国庆从老家回小家后,想整理之前一些旧硬盘里的文件,因为属于比较个人的,而且想长期保留,所以,希望能以一种加密的形式存放,同时又希望最终的形式,容易携带,不需要每次要拷贝很多文件之类的,类似于以前的 TrueCrypt 这样的,所以想到了本文的解决方案。文章虽然不长,看上去步骤也不复杂,但是理解所有的概念和知识点,并能“组装”起来,真的不是一个刚毕业的计算机专业的大学生或者研究生搞2-3年能弄明白的。吹个牛,就算长期在搞云计算的,特别是那些做架构的,也不一定能真正把本文里描述的环境搭建起来。
文中的链接,请点击 阅读原文,浏览器打开后可以点击。==================因为我自己的笔记本电脑上安装了 Ubuntu 作为 KVM Host,办公室里有多台 KVM Host,同时用 NFS 服务器,有专门的 Data Pool 分享给客户机。我想做的一件事情是,把自己的个人资料放到一块加密的 虚拟磁盘映像文件中,然后使用的时候,通过 NBD 挂接到 KVM Host 上, 作为 NFS Share export。可以同时被多个不同的客户机挂接,而实际读写的是一个加密的磁盘映像文件。
这样子的目的是如果需要回家办公,只要拷贝这个映像的快照即可,公司的服务器上的映像和自己笔记本上的映像相互之间更新最新的快照即可。
由于 qcow2/raw 格式的加密方式存在潜在问题,新版本的 qemu 推荐用 LUK 格式加密磁盘映像,本文就介绍整个的流程。
首先创建一个 secret.xml 文件如下:其中 首行 和末尾行以外的其他行都可以不要,然后运行 #virsh secret-define –file secret.xml参考官方文档:一,二(两个链接请点击 文末 “阅读原文” 打开)
# virsh secret-list 就可以看到新建的一个 secret 了。
2. 为创建的 secret 设置密码 123456:# MYSECRET=`printf %s “123456” | base64`# virsh secret-set-value 1d9cbca4-864b-45cb-8a23-98c9ee885695 $MYSECRET
3. 创建 vol_luks.xml 文件定义卷如下:
根据以上 XML 文件创建卷:# virsh vol-create –file vol_luks.xml –pool >
4. 磁盘创建成功后,通过 NBD 挂接到 /dev/nbdX 下(X可以是 0 开始的自然数,这里以 1为例子):# modprobe nbd max_part=16 (先加载 nbd 驱动到内核)# qemu-nbd -c /dev/nbd1 -f raw –object secret,id=sec0,>
5. 通过 cryptsetup 挂接为 DM 设备:# cryptsetup luksOpen /dev/nbd1 Albert_Encrypted输入正确的密码后, DM 设备就可以在 /dev/mapper 下看到了。# dmsetup info /dev/mapper/Albert_Encrypted
由于这是初次创建的磁盘,所以我们需要格式化一下( XFS 文件系统):# mkfs.xfs /dev/mapper/Albert_Encrypted然后我们就可以把这个磁盘挂接到 NFS Share 目录,把目录添加到 /etc/exports 文件,运行 exportfs -rav,然后运行 exportfs -s 确认
下面介绍一下逆过程,就是 DM 设备从 NBD 下卸载:先从 NFS 卸载:# umount /dev/mapper/Albert_Encrypted# cryptsetup -v luksClose Albert_Encrypted# qemu-nbd -d /dev/nbd1如果遇到问题:# fdisk -l /dev/nbd1# dmsetup ls (查看不能卸载设备的 Major:Minor)# lsof |grep “major,minor” (kill 对应的进程)# dmsetup remove /dev/mapper/Albert_Encrypted (如果有问题)
如果觉得《LUK 加密的 raw disk 映像 通过 nbd 挂接为 NFS》对你有帮助,请点赞、收藏,并留下你的观点哦!