赞
踩
本文主要介绍有关 LVM 镜像卷的配置与维护,所谓镜像卷其实就是指上层写入的数据会镜像一份出来,形成两副本文件,类似于 RAID1,但是与 LVM RAID 的配置还是有一定区别的。当用作 LVM 镜像卷的磁盘发生故障时,不会影响到当前已经挂载的文件系统,并且还可以实现在线更换磁盘以及在线扩容。
在博主的环境中,一共有四块大小为 50GB 的磁盘,对应的盘符依次为 sda、sdb、sdc 和 sdd;其中 sda 与 sdb 磁盘会用来配置 LVM 镜像卷,而剩余的两块磁盘会被用来演示更换故障磁盘以及 LVM 镜像卷扩容。
[root@iscsi-client1 ~]# pvcreate /dev/sda /dev/sdb
Physical volume "/dev/sda" successfully created.
Physical volume "/dev/sdb" successfully created.
[root@iscsi-client1 ~]# vgcreate vg01_mirror /dev/sda /dev/sdb
Volume group "vg01_mirror" successfully created
下面这条命令中
100%FREE
意味着将 VG 中可分配的空间全部分配给当前的 LV;m1
意味着镜像一份数据,即双副本。
[root@iscsi-client1 ~]# lvcreate -n lv01_mirror -m1 -l 100%FREE vg01_mirror /dev/sda /dev/sdb
Logical volume "lv01_mirror" created.
从这里不难看出 sda 磁盘与 sdb 磁盘互为镜像。
[root@iscsi-client1 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-a-r--- 49.99g 0.27 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- 49.99g /dev/sdb(1)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor--- 4.00m /dev/sdb(0)
[root@iscsi-client1 ~]# mkfs.xfs /dev/vg01_mirror/lv01_mirror
[root@iscsi-client1 ~]# mkdir /data
[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data
修复 LVM 镜像卷是指当用作 LVM 镜像卷的磁盘发生了故障,此时可以用同配置的新磁盘来更换从而到达修复的目的。本文使用 dd 命令将磁盘置零来模拟 sdb 磁盘故障,然后使用 sdc 磁盘进行更换。
[root@iscsi-client1 ~]# dd if=/dev/zero of=/dev/sdb bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 34.4632 s, 31.2 MB/s
此时查看 LV 的信息,可以发现 Devices 这一列原本应该显示的是 /dev/sdb 磁盘,现在变成了 unknown 状态。
[root@iscsi-client1 ~]# lvs -a -o +devices
WARNING: Device for PV vO3gn5-ipwA-EA20-oGQ1-Inzv-nvtn-3tvcXk not found or rejected by a filter.
Couldn't find device with uuid vO3gn5-ipwA-EA20-oGQ1-Inzv-nvtn-3tvcXk.
WARNING: Couldn't find all devices for LV vg01_mirror/lv01_mirror_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV vg01_mirror/lv01_mirror_rmeta_1 while checking used and assumed devices.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-aor-p- 49.99g 1.62 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor-p- 49.99g [unknown](1)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor-p- 4.00m [unknown](0)
尽管此时 sdb 磁盘已经损坏,但是丝毫不影响 LVM 镜像卷的挂载以及文件的读写。
[root@iscsi-client1 ~]# umount /data
[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data
[root@iscsi-client1 ~]# for i in {101..200};do echo $i >> /data/test.txt;done
[root@iscsi-client1 ~]# tail -n 5 /data/test.txt
196
197
198
199
200
接下来我们使用 sdc 磁盘替换 sdb 磁盘并修复镜像卷(
整个修复过程无需卸载文件系统
)。
[root@iscsi-client1 ~]# vgreduce --removemissing vg01_mirror --force
WARNING: Device for PV vO3gn5-ipwA-EA20-oGQ1-Inzv-nvtn-3tvcXk not found or rejected by a filter.
Couldn't find device with uuid vO3gn5-ipwA-EA20-oGQ1-Inzv-nvtn-3tvcXk.
WARNING: Couldn't find all devices for LV vg01_mirror/lv01_mirror_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV vg01_mirror/lv01_mirror_rmeta_1 while checking used and assumed devices.
Wrote out consistent volume group vg01_mirror.
此时可以看到原本处于 unknown 状态的 Devices 信息变为空:
[root@iscsi-client1 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-aor-r- 49.99g 100.00 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror vwi-aor-r- 49.99g
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor-r- 4.00m
无需先执行 pvcreate 操作,vgextend 操作会自动将 sdc 磁盘做成 PV。
[root@iscsi-client1 ~]# vgextend vg01_mirror /dev/sdc
Physical volume "/dev/sdc" successfully created.
Volume group "vg01_mirror" successfully extended
lvconvert
工具一般是用于改变 LVM 逻辑卷的段类型(如线性、镜像等)或特性,其中--repair
操作是为了恢复镜像的数量。
[root@iscsi-client1 ~]# lvconvert --repair -y vg01_mirror/lv01_mirror
WARNING: Not using lvmetad because of repair.
WARNING: Disabling lvmetad cache for repair command.
Faulty devices in vg01_mirror/lv01_mirror successfully replaced.
--mirros(等价于 -m)
是为了将线性逻辑卷转换成为镜像卷;此处如果不先执行--repair
操作而直接进行--mirros
操作,则会提示Can't change number of mirrors of degraded vg01_mirror/lv01_mirror. Please run "lvconvert --repair vg01_mirror/lv01_mirror" first.
错误信息。
[root@iscsi-client1 ~]# lvconvert -m1 -y /dev/vg01_mirror/lv01_mirror /dev/sda /dev/sdc
WARNING: Not using lvmetad because a repair command was run.
WARNING: vg01_mirror/lv01_mirror already has image count of 2.
Logical volume vg01_mirror/lv01_mirror successfully converted.
此时可以看到镜像卷已经被修复。
[root@iscsi-client1 ~]# lvs -a -o +devices
WARNING: Not using lvmetad because a repair command was run.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-aor--- 49.99g 0.68 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- 49.99g /dev/sdc(1)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor--- 4.00m /dev/sdc(0)
特别说明
:第3章节的内容与第2章节无关,可以理解为是紧接着第1章节之后进行的扩容操作;下面会将 sdc 和 sdd 磁盘扩容到 VG 中。
[root@iscsi-client1 ~]# pvcreate /dev/sd[c-d]
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
[root@iscsi-client1 ~]# vgextend vg01_mirror /dev/sdc /dev/sdd
Volume group "vg01_mirror" successfully extended
将 VG 的剩余可用空间全部扩容给 LV。
[root@iscsi-client1 ~]# lvextend -l +100%FREE vg01_mirror/lv01_mirror /dev/sdc /dev/sdd
Extending 2 mirror images.
Size of logical volume vg01_mirror/lv01_mirror changed from 49.99 GiB (12798 extents) to <99.99 GiB (25597 extents).
Logical volume vg01_mirror/lv01_mirror successfully resized.
此时可以看到镜像卷的组成发生了变化,即 sda && sdc 磁盘与 sdb && sdd 磁盘互为镜像。
[root@iscsi-client1 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-aor--- <99.99g 1.73 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- <99.99g /dev/sda(1)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- <99.99g /dev/sdc(0)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- <99.99g /dev/sdb(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- <99.99g /dev/sdd(0)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor--- 4.00m /dev/sdb(0)
这里需要注意的是,不同类型的文件系统,其通知文件系统进行空间调整的命令是不一样的;博主这里是 XFS 文件系统,因此使用的 xfs_growfs 命令,如果是 EXT4 系统,那么就要使用 resize2fs 命令了。
[root@iscsi-client1 ~]# mount |grep data
/dev/mapper/vg01_mirror-lv01_mirror on /data type xfs (rw,relatime,attr2,inode64,noquota)
[root@iscsi-client1 ~]# xfs_growfs /dev/vg01_mirror/lv01_mirror
此时文件系统的 Size 发生了改变(从 50GB 扩容到了 100GB)。
[root@iscsi-client1 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 12M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 84G 8.2G 76G 10% /
/dev/loop0 iso9660 4.3G 4.3G 0 100% /mnt/cdrom
/dev/vda2 xfs 497M 163M 335M 33% /boot
tmpfs tmpfs 795M 12K 795M 1% /run/user/42
tmpfs tmpfs 795M 0 795M 0% /run/user/0
/dev/mapper/vg01_mirror-lv01_mirror xfs 100G 33M 100G 1% /data
博主也是因为项目有需要才用到了 LVM 镜像卷,因此对这块内容进行了一些了解。以上若有不妥之处,欢迎大家指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。