Linux

將 PV1 的 LVM 移動到 PV2

  • July 25, 2020

如何將 sda3 上的 LVM 移動/合併到 sda2?問題是 vg1-var 和 vg1-opt 駐留在兩個 PV 上,所以 apvmove不會解決問題。

sda                          8:0    0   80G  0 disk
├─sda1                       8:1    0  300M  0 part /boot
├─sda2                       8:2    0   37G  0 part
│ ├─vg1-root         253:0    0    5G  0 lvm  /
│ ├─vg1-swap         253:1    0    4G  0 lvm  [SWAP]
│ ├─vg1-usr          253:2    0    8G  0 lvm  /usr
│ ├─vg1-home         253:4    0    2G  0 lvm  /home
│ ├─vg1-var          253:5    0  6.7G  0 lvm  /var
│ ├─vg1-tmp          253:6    0   10G  0 lvm  /tmp
│ └─vg1-opt          253:7    0    5G  0 lvm  /opt
└─sda3                       8:3    0 42.7G  0 part
 ├─vg1-var          253:5    0  6.7G  0 lvm  /var
 └─vg1-opt          253:7    0    5G  0 lvm  /opt
 PV         VG    Fmt  Attr PSize    PFree
 /dev/sda2  vg1   lvm2 a--    37.00g       0
 /dev/sda3  vg1   lvm2 a--   <42.70g   39.00g

最簡單的方法是臨時附加一個新驅動器pvmove /dev/sda3。這將使您成長/dev/sda2並將一切移回。

如果這不可能,您將不得不對您擁有的驅動器中的數據進行洗牌。由於對齊問題,相鄰的 PV 通常不能直接合併,因此您仍然需要移動所有內容兩次。

/dev/sda3的容量是 42.7G,有 39G 免費,所以使用了 ~3.7G。所以你應該能夠縮小/dev/sda34G,以便/dev/sda4在磁碟末尾創建一個新的 4G 大小:

pvresize /dev/sda3 --setphysicalvolumesize 37G
parted /dev/sda -- resizepart 3 -4G
parted /dev/sda -- mkpart primary -4G -1

將所有數據移動到新分區:

vgextend vg1 /dev/sda4
pvmove /dev/sda3
vgreduce vg1 /dev/sda3

刪除現在免費的/dev/sda3並相應增長/dev/sda2

parted /dev/sda -- rm 3
parted /dev/sda -- resizepart 2 -4G
pvresize /dev/sda2

將所有內容從/dev/sda4現在足夠大/dev/sda2

pvmove /dev/sda4
vgreduce vg1 /dev/sda4

此時,您的 VG 僅使用單個 PV /dev/sda2,.

刪除現在免費的/dev/sda4並再次增長/dev/sda2

parted /dev/sda -- rm 4
parted /dev/sda -- resizepart 2 -1
pvresize /dev/sda2

請注意,這些步驟非常粗糙,並且在某些時候可能會失敗,您必須相應地進行調整。特別parted是命令不應盲目執行,始終驗證發生了什麼parted /dev/sda print free, vgs, lvs, pvs, lsblk, …

如果沒有充分的理由來洗牌,我會原樣離開。麻煩多多,收益少。擁有多個 PV 也有優勢,例如額外的元數據副本。

引用自:https://unix.stackexchange.com/questions/600245