Centos6

沒有分區表的磁碟上的 LVM。如何使用 fdisk 重新分配可用空間?

  • July 9, 2015

我使用以下命令將 LVM 縮小了一半:

e2fsck -f /dev/VG/LV
resize2fs /dev/VG/LV 5G
lvreduce -L 5G /dev/VG/LV

檢查物理卷會產生以下結果:

 --- Physical volume ---
 PV Name               /dev/sdb
 VG Name               VG
 PV Size               10.00 GiB / not usable 4.00 MiB
 Allocatable           yes 
 PE Size               4.00 MiB
 Total PE              2559
 Free PE               1279
 Allocated PE          1280

如何通過 fdisk 將空閒 PE(從哪個柱面開始)分配為標準分區?

如果您已將 PV 創建為分區,則必須先使用 縮小 PV ,然後使用或pvresize --setphysicalvolumesize 5124M /dev/sdb等工具調整分區表中的分區大小。fdisk``parted

但是在您的情況下,您無法在那裡創建新分區,因為 PV 包含整個驅動器,因此您無法在不破壞 PV 的情況下安全地創建新的分區表。好吧,實際上你可以通過直接操作分區表,但這很危險,並且會回來並進一步咬你。

相反,最安全的方法是在不同的驅動器上創建另一個 PV,將其添加到卷組,將 LV 移動到另一個 PV,從 VG 中刪除第一個 PV,從 /dev/sdb 中刪除第一個 PV,創建分區在 /dev/sdb 上,在其中一個分區上創建一個 PV,將 PV 添加到 VG,將 LV 移動到這個現在正確的 PV,最後從 VG 中刪除臨時 PV。

像這樣:(請注意,您必須確保使用適用於您的特定配置的設備名稱,而不僅僅是複制和粘貼。/dev/sdc這只是一個範例,對您來說可能會有所不同):

# plug in external USB drive

dmesg | tail                     # Check which device name the plugged in drive got.
lsblk                            # another way to verify, assuming `lsblk` is installed
cat /proc/partitions             # one more way to verify, sizes are in KiB

fdisk /dev/sdc                   # Make at least one partition on the drive, minimum of 5124 MiB.

pvcreate /dev/sdc1               # create the Physical Volume (PV)
vgextend VG /dev/sdc1            # add the PV to the Volume Group (VG)

pvmove -i 5 /dev/sdb /dev/sdc1   # Try to move every Logical Volume (LV) on PV /dev/sdb over to PV /dev/sdc1.
                                # There's no need to unmount anything, the process is completely transparent
                                # to the LV and anything using it. You may want to make a tea or two ;)
                                # Watch out for errors regarding insufficient space on the target PV, tho.

vgreduce VG /dev/sdb             # Remove the old PV from the VG.
pvremove /dev/sdb                # Wipe the PV metadata from the drive. Don't continue in case of errors here!

fdisk /dev/sdb                   # Properly partition the drive. Partition for PV should be 5124 MiB minimum.

pvcreate /dev/sdb1               # Create a PV on the just created partition.
vgextend VG /dev/sdb1            # Add PV to the VG.

pvmove -i 5 /dev/sdc1 /dev/sdb1  # Move LVs back from the temporary PV to the freshly partitioned one.

vgreduce VG /dev/sdc1            # Remove temporary PV from the VG.
pvremove /dev/sdc1               # Wipe PV metadata from the drive.

在嘗試此操作之前進行備份。

如果按照此處所示使用,給定的pv*和命令是安全的。vg*如果不滿足先決條件,他們將拒絕工作,或者會詢問您是否仍要這樣做(n在這種情況下回答)。特別是,當您將 LV 縮小到恰好 5 GiB 時,您將需要一個略大於 5120 MiB 的分區(我建議添加 4 MiB,因此 5124 MiB),以便 PV 能夠容納元數據,它會抱怨如果不是這樣的話。

但是,fdisk這並不安全,即使它會覆蓋您的寶貴數據,它也會很樂意繼續執行您的指令,因此請格外小心。

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