Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1237692
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: 虚拟化

2018-01-19 15:13:25

从网上找了一些资料,看了libvirt文档等,最后终于能够使用luks加密磁盘启动vm了。
libvirt和qemu-kvm的版本很关键否则会有问题,一开始的环境libvirt 是3.2 qemu是 1.5.3,都是centos 自带的,define volume时会报错:

点击(此处)折叠或打开

  1. # virsh vol-create ocz-5ef92v58m9be7jo9 /tmp/in
  2. error: Failed to create vol from /tmp/in
  3. error: unsupported configuration: storage pool does not support encrypted volumes
关键是最后一行,一开始以为标准版的就可以,后来替换virt版才解决问题。


添加repo:

点击(此处)折叠或打开

  1. # cat /etc/yum.repos.d/CentOS-QEMU-EV.repo
  2. [centos-qemu-ev]
  3. name=CentOS-$releasever - QEMU EV
  4. baseurl=http://mirror.centos.org/centos/$releasever/virt/$basearch/kvm-common/
  5. gpgcheck=0
  6. enabled=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization


  8. [centos-qemu-ev-test]
  9. name=CentOS-$releasever - QEMU EV Testing
  10. baseurl=http://buildlogs.centos.org/centos/$releasever/virt/$basearch/kvm-common/
  11. gpgcheck=0
  12. enabled=0
  13. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Virtualization


  14. [libvirt-last]
  15. name=CentOS-libvirt-last
  16. baseurl=http://buildlogs.centos.org/centos/$releasever/virt/$basearch/libvirt-latest/
  17. gpgcheck=0
  18. enabled=1

然后yum update qemu-kvm libvirt-deamon


1、首先定义pool

点击(此处)折叠或打开

  1. # cat log.pool
  2. <pool type='logical'>
  3.   <name>lp</name>
  4.   <capacity unit='bytes'>0</capacity>
  5.   <allocation unit='bytes'>0</allocation>
  6.   <available unit='bytes'>0</available>
  7.   <source>
  8.     <device path='/dev/sda3'/>
  9.     <name>logical</name>
  10.     <format type='lvm2'/>
  11.   </source>
  12.   <target>
  13.     <path>/dev/lp</path>
  14.     <permissions>
  15.       <mode>0755</mode>
  16.     </permissions>
  17.   </target>
  18. </pool>
  19.    virsh pool-define log.pool
  20.    virsh pool-build lp
  21.    virsh pool-start lp

   中间出了点小插曲,virsh pool-build报错,具体忘记了,然后我pvcreate pvremove操作了下就能继续了,可能sda3磁盘中有数据的问题吧。


2、创建volume

点击(此处)折叠或打开

  1. # cat sec2.xml
  2. <secret ephemeral='no' private='yes'>
  3. <uuid>b9cdf965-bf99-4a07-886e-63e193907a5e</uuid>
  4. </secret>

  5. # cat vol1.xml
  6. <volume>
  7.   <name>vol1</name>
  8.   <capacity unit='G'>5</capacity>
  9.   <target>
  10.     <path>/dev/logical/vol1</path>
  11.     <format type='raw'/>
  12.     <encryption format='luks'>
  13.        <secret type='passphrase' uuid='b9cdf965-bf99-4a07-886e-63e193907a5e'/>
  14.     </encryption>
  15.   </target>
  16. </volume>

  17. #virsh secret-define sec2.xml
  18. #virsh secret-set-value b9cdf965-bf99-4a07-886e-63e193907a5e
  19. #MYSECRET=`printf %s "redhat" | base64`
  20. #virsh secret-set-value b9cdf965-bf99-4a07-886e-63e193907a5e $MYSECRET
  21. #virsh vol-create lp vol1.xml
这时候就能看到逻辑卷了,执行

点击(此处)折叠或打开

  1. # lvs
  2.   LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
  3.   root centos -wi-ao---- 50.00g
  4.   swap centos -wi-ao---- 7.75g
  5.   vol1 logical -wi-ao---- 5.00g ------------------看这一行
3、创建vm

点击(此处)折叠或打开

  1. ...
  2.     <disk type='volume' device='disk'>
  3.        <driver name='qemu' type='raw'/>
  4.        <source pool='lp' volume='vol1'/>
  5.        <target dev='sda' bus='scsi'/>
  6.        <encryption format='luks'>
  7.          <secret type='passphrase' uuid='b9cdf965-bf99-4a07-886e-63e193907a5e'/>
  8.        </encryption>
  9.        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
  10.     </disk>
  11. ...

  12. #virsh define centos7_3.xml
  13. #virsh start centos7_qcow2encrypt
之后操作的就是加密磁盘。

也可以直接使用qemu-img 创建加密的luks磁盘

点击(此处)折叠或打开

  1. #MYSECRET=`echo 123456|base64`
  2. #qemu-img create -f luks --object secret,data=$MYSECRET,id=sec0,format=base64,qom-type=secret -o key-secret=sec0 a.luks 1G
  3. 编辑一个sec xml文件
  4. # cat sec3.xml
  5. <secret ephemeral='no' private='yes'>
  6. <uuid>b9cdf965-bf99-4a08-886e-63e193907a5e</uuid>
  7. </secret>
  8. #virsh secret-set-value b9cdf965-bf99-4a08-886e-63e193907a5e $MYSECRET


然后再vm里就可以使用该磁盘了:

点击(此处)折叠或打开

  1. <disk type='file' device='disk'>
  2.        <driver name='qemu' type='raw'/>
  3.        <source file='/var/lib/libvirt/images/a.luks'/>
  4.        <target dev='sdb' bus='scsi'/>
  5.        <encryption format='luks'>
  6.          <secret type='passphrase' uuid='b9cdf965-bf99-4a08-886e-63e193907a5e'/>
  7.        </encryption>
  8.     </disk>
扩展:
luks格式磁盘创建快照:

点击(此处)折叠或打开

  1. qemu-img create -f qcow2 --object secret,id=sec0,data=$MYSECRET,format=base64 -b 'json:{"driver": "luks", "file": {"driver": "file", "filename": "/home/qgx_1/vm/disk-encrypt/base.luks"}, "key-secret": "sec0"}' -F luks sn1.qcow2



阅读(2860) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~