共计 3374 个字符,预计需要花费 9 分钟才能阅读完成。
导读 | 迁移逻辑卷是通过将分区从一个 PV(物理卷)移动至另一个 PV。迁移逻辑卷是替换磁盘最安全的方法之一。 |
将要执行迁移的方法是使用 pvmove
操作。
假设在我们的设置中,只有一个磁盘 /dev/sda1
,大小为 20gb。此时 /dev/sda1
处于故障警告状态,需要更换新的同等容量的硬盘。让我们使用 pvmove
选项将分区移动到一个新的 PV 中。
使用 pvmove
命令是通过将底层旧物理卷替换为新的物理卷。此外,使用文件系统的用户将不会注意到在底层发生的更改。
1. 更换故障磁盘。
2. 将现有的磁盘替换为较大的磁盘。
[ | ]|
Physical volume "/dev/sda1" successfully created. | |
[ | ]|
Volume group "vg_data" successfully created | |
Logical volume "lv_data" created. |
创建完成之后格式化并挂载文件系统。
[ | ]|
[ | ]|
[ | ]|
[ | ]
下面列出逻辑卷使用率:
[ | ]|
Filesystem Size Used Avail Use% Mounted on | |
/dev/mapper/vg_data-lv_data 20G 2.2G 18G 11% /data |
下面列出所有的物理卷、卷组、逻辑卷:
[root@localhost ~]# pvs | |
PV VG Fmt Attr PSize PFree | |
/dev/nvme0n1p2 cl lvm2 a-- <19.00g <2.00g | |
/dev/sda1 vg_data lvm2 a-- <20.00g 0 | |
[root@localhost ~]# vgs | |
VG #PV #LV #SN Attr VSize VFree | |
cl 1 2 0 wz--n- <19.00g <2.00g | |
vg_data 1 1 0 wz--n- <20.00g 0 | |
[root@localhost ~]# lvs | |
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert | |
root cl -wi-ao---- 15.00g | |
swap cl -wi-ao---- 2.00g | |
lv_data vg_data -wi-a----- <20.00g |
下面检验一下逻辑卷使用到的磁盘是哪块,使用 lvs 命令并使用 -o +devices
选项,可以显示逻辑卷使用到的是哪块磁盘:
[root@localhost ~]# lvs -o +devices /dev/vg_data/lv_data | |
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices | |
lv_data vg_data -wi-ao---- <20.00g /dev/sda1(0) |
使用 dmsetup 命令获取逻辑卷的主编号和次编号。
[ | ]|
1 dependencies : (8, 1) |
记住主编号和次编号。一旦我们将故障 PV 替换为另一个 PV,它将改变。
可以通过运行 pvmove
命令来执行逻辑卷的迁移。下面首先开始创建一个新的物理卷:
[ | ]|
Physical volume "/dev/sdb1" successfully created. |
然后将新创建的物理卷添加到已存在的卷组中,下面图中可看到 vg_data 卷组容量增加了:
[ | ]|
Volume group "vg_data" successfully extended |
使用 pvs 命令添加 -o +pv_used
选项可以显示物理卷的使用情况:
[root@localhost ~]# pvs -o +pv_used | |
PV VG Fmt Attr PSize PFree Used | |
/dev/nvme0n1p2 cl lvm2 a-- <19.00g <2.00g 17.00g | |
/dev/sda1 vg_data lvm2 a-- <20.00g 0 <20.00g | |
/dev/sdb1 vg_data lvm2 a-- <20.00g <20.00g 0 |
下面就可以使用 pvmove
命令迁移逻辑卷啦,下面是用法:
# pvmove -n
下面是常用选项解释:
- -n 指定逻辑卷的名称。
- -b 可以添加 - b 选项,意思是在后台运行,如果容量大,文件多可以配合 screen 在后台运行。
- -i 5 表示每 5 秒打印一次状态。
下面将逻辑卷 lv_data 从 /dev/sda1 迁移到 /dev/sdb1 中:
[root@localhost ~]# pvmove -n /dev/vg_data/lv_data /dev/sda1 /dev/sdb1 | |
/dev/sda1: Moved: 1.29% | |
/dev/sda1: Moved: 39.99% | |
/dev/sda1: Moved: 73.90% | |
/dev/sda1: Moved: 100.00% |
迁移完成后,运行命令 lvs -o +devices
。在这里,我们看到旧磁盘/dev/sda1
已经被 /dev/sdb1
替换了。
[root@localhost ~]# lvs -a -o +devices /dev/vg_data/lv_data | |
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices | |
lv_data vg_data -wi-ao---- <20.00g /dev/sdb1(0) |
运行 pvs -o +pv_used
命令查看可看到,/dev/sda1 使用空间为 0。/dev/sdb1 的使用空间用满了。
[root@localhost ~]# pvs -o +pv_used | |
PV VG Fmt Attr PSize PFree Used | |
/dev/nvme0n1p2 cl lvm2 a-- <19.00g <2.00g 17.00g | |
/dev/sda1 vg_data lvm2 a-- <20.00g <20.00g 0 | |
/dev/sdb1 vg_data lvm2 a-- <20.00g 0 <20.00g |
与此同时我们检查一下 /data 目录中的内容仍然保留,逻辑卷仍然挂载着。这就说明迁移逻辑卷的时候不影响用户使用该逻辑卷。
[root@localhost ~]# df -h /data | |
Filesystem Size Used Avail Use% Mounted on | |
/dev/mapper/vg_data-lv_data 20G 2.2G 18G 11% /data[root@localhost ~]# ll /data/ | |
total 2097152 | |
-rw-r--r-- 1 root root 2147483648 Apr 26 15:17 disk.img |
下面我们可以使用 vgreduce
命令将故障的物理卷移除。
[ | ]|
Removed "/dev/sda1" from volume group "vg_data" |
移除故障的物理卷:
[ | ]|
Labels on physical volume "/dev/sda1" successfully wiped. |
下面使用 dmsetup
命令查看逻辑卷的主编号和次编号是否变了:
[ | ]|
1 dependencies : (8, 17) |
就这样,我们已经完成迁移逻辑卷了。
本文使用了 pvmove 命令从逻辑卷迁移数据而无需停机。
