Lvm
我可以在 lvextend 之後進行 lvreduce 而不失去其中的 ext4 分區嗎?
在將我的根分區從一個磁碟移動到另一個磁碟的失敗嘗試中,我執行了以下操作:
- 添加了新磁碟
- 用 parted 對其進行分區(第 3 部分現在幾乎完全填滿了磁碟)
- 初始化物理卷
$ pvcreate /dev/sdb3 Physical volume "/dev/sdb3" successfully created
- 擴展卷組以包含這個新的物理磁碟
$ vgextend myvg /dev/sdb3 Volume group "myvg" successfully extended
- 擴展了邏輯卷(我認為這是我總結的地方:我認為我應該將 pvmove 的內容添加到該組中的新 pv - 有人可以確認嗎?)
$ lvextend /dev/mapper/myvg-root /dev/sdb3
我現在想撤消 lvextend,然後繼續執行將舊物理卷的內容移動到新物理卷的原始計劃。我可以減少邏輯卷(我還沒有使用 resizefs 之類的東西觸及位於 /dev/mapper/myvg-root 中的 ext4 分區)而不必擔心損壞 ext4 文件系統嗎?如果是這樣,我如何告訴它減少正確的數量?
$ lvreduce --by-exactly-the-amount-occupied-by-PV /ev/sdb3 /dev/mapper/myvg-root
總而言之,目前在一個邏輯卷 (myvg-root) 中有一個 ext4 文件系統 (root),它位於一個由兩個物理卷組成的捲組 (myvg) 中(其中一個是新添加的 sdb3)。
您可以使用 lvdisplay 檢查邏輯範圍到物理範圍的映射
$ lvdisplay -m --- Logical volume --- LV Name /dev/myvg/root VG Name pfeifer LV UUID 2LeFq8-zz3y-Y62m-931D-mD3m-XmK1-6Zp3Ir LV Write Access read/write LV Status available # open 1 LV Size 3.62 TiB Current LE 947851 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 251:0 --- Segments --- Logical extent 0 to 470980: Type linear Physical volume /dev/sda3 Physical extents 0 to 470980 Logical extent 470981 to 947850: Type linear Physical volume /dev/sdb3 Physical extents 0 to 476869
您可以使用 lvreduce 簡單地減小此邏輯卷的大小
$ lvreduce -l -476870 /dev/myvg/root WARNING: Reducing active and open logical volume to 1.80 TiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce root? [y/n]: y Reducing logical volume root to 1.80 TiB Logical volume root successfully resized
請注意要減少的 sdb3 上的邏輯盤區數是 476869+1(從 0 開始計數!)。就是這樣。現在快速檢查似乎確認了最初的世界秩序:
--- Segments --- Logical extent 0 to 470980: Type linear Physical volume /dev/sda3 Physical extents 0 to 470980
現在,一個緩慢而乏味的 pvmove 命令應該允許移動數據:
nohup pvmove -n /dev/myvg/root /dev/sda3 /dev/sdb3 &