Centos8 中遷移邏輯卷
遷移邏輯卷是通過將分區(qū)從一個PV(物理卷)移動至另一個PV。遷移邏輯卷是替換磁盤最安全的方法之一。
將要執(zhí)行遷移的方法是使用pvmove操作。假設在我們的設置中,只有一個磁盤 /dev/sda1,大小為20gb。此時 /dev/sda1處于故障警告狀態(tài),需要更換新的同等容量的硬盤。讓我們使用pvmove選項將分區(qū)移動到一個新的PV中。使用pvmove命令是通過將底層舊物理卷替換為新的物理卷。此外,使用文件系統(tǒng)的用戶將不會注意到在底層發(fā)生的更改。
為什么需要遷移邏輯卷?
1. 更換故障磁盤。
2. 將現(xiàn)有的磁盤替換為較大的磁盤。
創(chuàng)建PV、VG和LV
# 創(chuàng)建PV
[root@localhost ~]# pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created.
# 創(chuàng)建VG
[root@localhost ~]# vgcreate vg_data /dev/sda1
Volume group "vg_data" successfully created
# 創(chuàng)建LV,使用所有空間。
[root@localhost ~]# lvcreate -l 100%FREE -n lv_data vg_data
Logical volume "lv_data" created.
創(chuàng)建完成之后格式化并掛載文件系統(tǒng)。
[root@localhost ~]# mkfs.xfs /dev/vg
[root@localhost ~]# mkfs.xfs /dev/vg_data/lv_data
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/vg_data/lv_data /data
列出現(xiàn)有的邏輯卷
下面列出邏輯卷使用率:
[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 ~]# 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
使用dmsetup命令獲取邏輯卷的主編號和次編號。
[root@localhost ~]# dmsetup deps /dev/vg_data/lv_data
1 dependencies : (8, 1)
記住主編號和次編號。一旦我們將故障PV替換為另一個PV,它將改變。
開始遷移邏輯卷
可以通過運行pvmove命令來執(zhí)行邏輯卷的遷移。下面首先開始創(chuàng)建一個新的物理卷:
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
然后將新創(chuàng)建的物理卷添加到已存在的卷組中,下面圖中可看到vg_data卷組容量增加了:
[root@localhost ~]# vgextend vg_data /dev/sdb1
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秒打印一次狀態(tài)。
下面將邏輯卷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已經(jīng)被/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
運行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命令將故障的物理卷移除。
[root@localhost ~]# vgreduce vg_data /dev/sda1
Removed "/dev/sda1" from volume group "vg_data"
移除故障的物理卷:
[root@localhost ~]# pvremove /dev/sda1
Labels on physical volume "/dev/sda1" successfully wiped.
下面使用dmsetup命令查看邏輯卷的主編號和次編號是否變了:
[root@localhost ~]# dmsetup deps /dev/vg_data/lv_data
1 dependencies : (8, 17)
就這樣,我們已經(jīng)完成遷移邏輯卷了。
總 結
本文使用了pvmove命令從邏輯卷遷移數(shù)據(jù)而無需停機。