KVM存储管理-学习日记
KVM存储池就是一个大的容器,里面主要是虚拟机的镜像文件,以及其他的磁盘相关文件。
当磁盘空间不够时,需要对KVM虚拟机磁盘进行添加和管理,添加存储池的两种方法:一是本地的分区来作为存储池,二是NFS服务器提供的共享来作为存储池。
一、使用分区来创建存储池
在虚拟机中创建一个新的硬盘,在设置过程中硬盘类型选择SCSI。在启动后的虚拟机中创建硬盘,无法直接使用新添加的硬盘,需要重新启动虚拟机,硬盘才能生效。
如果不想重启虚拟机,可以使用这个方法:执行“ls /sys/class/scsi_host“,重新扫描SCSI总线来添加设备。
[root@kvm ~]# ls /sys/class/scsi_host/
host0 host1 host2
[root@kvm ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@kvm ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@kvm ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
使用fdisk -l查看全部的分区,虚拟机所挂硬盘个数及分区情况。可以看到新添加的硬盘信息。此时/dev/sdb只能显示分区大小,目前无法使用。详细信息如下:
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
此硬盘大小为2147MB,2147483648字节, 4194304个扇区。每个扇区大小为512字节。
blocks=(end-start)*sector size /1024
使用fdisk对/dev/sdb磁盘进行分区。
[root@kvm ~]# fdisk /dev/sdb
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n --新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free) --主分区,目前4个可用
e extended --扩展分区
Select (default p): --默认主分区
Using default response p
Partition number (1-4, default 1):
First sector (2048-4194303, default 2048): --默认分区开始的扇区
Using default value 2048
Last sector, +sectors or +size{
K,M,G} (2048-4194303, default 4194303): --默认分区结束的扇区
Using default value 4194303 默认分区大小为4194303*512 bytes
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): w --保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
对创建好的分区进行格式化,即设置分区的文件系统格式。
[root@kvm ~]# lsblk -f ---查看当前的文件系统格式有哪些
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
|-sda1 xfs 6ec6fb2f-7fab-4c82-8e81-25d8dad17e74 /boot
`-sda2 LVM2_member OT8gtx-BwYm-bbG8-5g7K-qG5Y-zsUp-JZi7Di
|-centos-root
xfs d016cbb9-e1bd-474f-be91-2f7e658afa1e /
`-centos-swap
swap e4ff30b7-9041-496c-9128-91d322163bd9 [SWAP]
sdb
`-sdb1
sr0 iso9660 CentOS 7 x86_64 2015-12-09-23-14-10-00 /mnt/cdrom
loop0 iso9660 CentOS 7 x86_64 2015-12-09-23-14-10-00 /var/ftp/dvd
[root@kvm ~]# mkfs.xfs /dev/sdb1 ---将分区格式化为xfs类型
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=131008 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=524032, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
分区格式化后,将分区添加到存储池中。打开virt-manager,在vm01是关机状态下,进入连接详情页面。
在storage选项卡中,默认有个default存储池,点击+号添加新的存储池,输入name值,类型选择fs(预格式化快设备),libvirt会自动挂载分区,(默认情况下存储池的类型为dir,是基于目录的存储设计,/var/lib/libvirt/images目录就是默认的存储池)。针对不同类型创建存储池,可以参考这个https://cloud.tencent.com/developer/news/258143。
添加成功。
在宿主机上查看文件系统磁盘使用情况统计,df -h。
[root@kvm ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 5.4G 13G 31% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sr0 4.1G 4.1G 0 100% /mnt/cdrom
/dev/loop0 4.1G 4.1G 0 100% /var/ftp/dvd
/dev/sda1 497M 130M 368M 27% /boot
tmpfs 183M 8.0K 183M 1% /run/user/0
/dev/sdb1 2.0G 33M 2.0G 2% /var/lib/libvirt/images/storage_pool
最后一条记录可以看到/dev/sdb1已经挂载到/var/lib/libvirt/images/storage_pool目录。
在宿主机上查看存储池的配置文件。
[root@kvm ~]# cat /etc/libvirt/storage/autostart/
default.xml storage_pool.xml
[root@kvm ~]# cat /etc/libvirt/storage/autostart/storage_pool.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh pool-edit storage_pool
or other application using the libvirt API.
-->
<pool type='fs'>
<name>storage_pool</name>
<uuid>1ed32488-55ea-4d68-ab60-09a392802c86</uuid>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
<device path='/dev/sdb1'/>
<format type='auto'/>
</source>
<target>
<path>/var/lib/libvirt/images/storage_pool</path>
</target>
</pool>
在存储池中,创建新的卷。
查看存储池中的卷,显示卷的具体信息。
在宿主机中通过命令查看存储池的卷。
[root@kvm ~]# ll -h /var/lib/libvirt/images/storage_pool/
total 952K
-rw-------. 1 root root 103M Feb 4 03:45 centos7-01.qcow2
-rw-------. 1 root root 206M Feb 4 03:41 centos7.qcow2
在宿主机中通过命令查看卷的具体信息。
[root@kvm ~]# qemu-img info /var/lib/libvirt/images/storage_pool/centos7-01.qcow2
image: /var/lib/libvirt/images/storage_pool/centos7-01.qcow2
file format: qcow2
virtual size: 102M (107374592 bytes)
disk size: 488K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
在宿主机中通过命令查看存储池。
[root@kvm ~]# virsh pool-list
Name State Autostart
-------------------------------------------
default active yes
storage_pool active yes
在宿主机中查看存储池的具体信息。
[root@kvm ~]# virsh pool-info storage_pool
Name: storage_pool
UUID: 1ed32488-55ea-4d68-ab60-09a392802c86
State: running
Persistent: yes
Autostart: yes
Capacity: 1.99 GiB
Allocation: 33.12 MiB
Available: 1.96 GiB
二、使用NFS分区来创建存储池
在宿主机上搭建一台NFS服务器,创建一个共享的文件系统,然后共享给KVM虚拟机,作为KVM虚拟机的存储池。
部署 NFS共享步骤如下:
确保宿主机的防火墙、selinux是关闭状态。
安装NFS服务器端软件。
[root@kvm ~]# yum -y install nfs ---tab键补齐
nfs-utils.x86_64 nfsometer.noarch
nfs4-acl-tools.x86_64 nfstest.noarch
[root@kvm ~]# yum -y install nfs-utils.x86_64
Loaded plugins: fastestmirror, langpacks
Centos-Local | 3.6 kB 00:00:00
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 5.6 MB 00:00:02
.........
创建共享目录/kvm/nfs/images,并修改其目录权限,让其他用户具有读写权限。
[root@kvm ~]# mkdir -p /kvm/nfs/images
[root@kvm ~]# ll -d /kvm/nfs/images/
drwxr-xr-x. 2 root root 6 Feb 6 03:33 /kvm/nfs/images/
[root@kvm ~]# chmod 757 /kvm/nfs/images/
[root@kvm ~]# ll -d /kvm/nfs/images/
drwxr-xrwx. 2 root root 6 Feb 6 03:33 /kvm/nfs/images/
配置NFS服务器,设置刚才创建的目录/kvm/nfs/images共享给KVM虚拟机网段的用户可以读写的操作。
查看kvm虚拟机网段。介绍两个方法查看虚拟机ip地址,但前提都是在kvm虚拟机开启的条件下才可以查看。
1、直接打开KVM虚拟机查看ip地址
2、在宿主机中查看虚拟机ip地址。首先查看虚拟主机配置文件找到虚拟机的mac地址信息,然后通过arp -a判定虚拟机器IP地址。
得知虚拟机网段信息后,配置NFS服务器,找到nfs配置文件/etc/exports,将目录/kvm/nfs/images共享给KVM虚拟机网段的用户可以读写的操作。
[root@kvm ~]# vi /etc/exports
[root@kvm ~]# cat /etc/exports
/kvm/nfs/images 192.168.100.0/24(rw,no_root_squash)
/kvm/nfs/images 192.168.217.0/24(rw,no_root_squash)
启动nfs服务,
[root@kvm ~]# systemctl restart nfs-server.service
[root@kvm ~]# systemctl restart rpcbind.service
找个其他主机查看NFS服务器的共享情况,看看是否可以看到共享文件夹。
准备工作完成后,将NFS服务器提供的共享添加到KVM虚拟机存储池中。添加存储池时,KVM虚拟机要处于关机状态。
完成后可以在宿主机上查看KVM虚拟机的存储池信息。
[root@kvm ~]# virsh pool-list
Name State Autostart
-------------------------------------------
default active yes
kvm_nfs_storage active yes
storage_pool active yes
[root@kvm ~]# vi /kvm/nfs/images/1.txt
[root@kvm ~]# ll -h /var/lib/libvirt/images/kvm_nfs_storage/
total 4.0K
-rw-r--r--. 1 root root 51 Feb 6 04:56 1.txt
在存储池中添加存储卷。
[root@kvm ~]# qemu-img info /var/lib/libvirt/images/kvm_nfs_storage/nfs_share.qcow2 ---查看存储池中卷的详细信息
image: /var/lib/libvirt/images/kvm_nfs_storage/nfs_share.qcow2
file format: qcow2
virtual size: 102M (107374592 bytes)
disk size: 488K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
[root@kvm ~]# virsh pool-info kvm_nfs_storage ---查看存储池的详细信息
Name: kvm_nfs_storage
UUID: a371060a-e8fe-49ae-abbc-6d67954dc0d5
State: running
Persistent: yes
Autostart: yes
Capacity: 17.46 GiB
Allocation: 5.45 GiB
Available: 12.01 GiB
[root@kvm ~]# virsh vol-list kvm_nfs_storage ---查查看存储池中的卷信息
Name Path
------------------------------------------------------------------------------
1.txt /var/lib/libvirt/images/kvm_nfs_storage/1.txt
nfs_share.qcow2 /var/lib/libvirt/images/kvm_nfs_storage/nfs_share.qcow2