Lvm

我可以在 lvextend 之後進行 lvreduce 而不失去其中的 ext4 分區嗎?

  • April 5, 2018

在將我的根分區從一個磁碟移動到另一個磁碟的失敗嘗試中,我執行了以下操作:

  • 添加了新磁碟
  • 用 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 &

引用自:https://serverfault.com/questions/441655