Debian

使用 LVM 調整硬碟中間的擴展分區大小

  • August 8, 2020

我想添加一個分區以將可用空間 (50GB) 用於 LVM。磁碟被放大了好幾倍,造成了這個分區的混亂。我怎樣才能恢復訂單並使用可用空間?

# cfdisk /dev/sda
Disk: /dev/sda
Size: 200 GiB, 214748364800 bytes, 419430400 sectors
Label: dos, identifier: 0x000cc491

   Device      Boot   Start           End       Sectors      Size     Id Type
>>  /dev/sda1   *       2048        499711        497664      243M     83 Linux
   /dev/sda2         501758     167770111     167268354     79.8G      5 Extended
   └─/dev/sda5       501760     167770111     167268352     79.8G     8e Linux LVM
   /dev/sda3      167770112     209715199      41945088       20G     83 Linux
   /dev/sda4      209715200     314572799     104857600       50G     83 Linux
   Free space     314572800     419430399     104857600       50G

我嘗試先調整擴展分區的大小,以便之後添加邏輯分區。但這不起作用:

(parted) print                                                            
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
1      1049kB  256MB   255MB   primary   ext2         boot
2      257MB   85.9GB  85.6GB  extended
5      257MB   85.9GB  85.6GB  logical                lvm
3      85.9GB  107GB   21.5GB  primary
4      107GB   161GB   53.7GB  primary

(parted) resizepart                                                       
Partition number? 2                                                       
End?  [85.9GB]? 135.6                                                     
Error: Can't have the end before the start! (start sector=501758 length=-236914)

更多資訊:

# pvs
 PV         VG   Fmt  Attr PSize  PFree
 /dev/sda3  root lvm2 a--  20.00g    0 
 /dev/sda4  root lvm2 a--  50.00g    0 
 /dev/sda5  root lvm2 a--  79.76g    0 

# lvs
 LV     VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 root   root -wi-ao---- 146.48g                                                    
 swap_1 root -wi-ao----   3.28g   

                                            
# vgs
 VG   #PV #LV #SN Attr   VSize   VFree
 root   3   2   0 wz--n- 149.75g    0 

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-0       145G  129G  8.6G  94% /
udev             10M     0   10M   0% /dev
tmpfs           1.6G  9.2M  1.6G   1% /run
tmpfs           4.0G     0  4.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           4.0G     0  4.0G   0% /sys/fs/cgroup
/dev/sda1       228M   53M  164M  25% /boot
tmpfs           801M     0  801M   0% /run/user/1000

為什麼不增加現有分區而不是添加新分區?

您的所有分區都已經是您的單個 LVM 卷組的一部分,無需添加更多,只需增加您所擁有的即可。

parted /dev/sda -- resizepart 4 100%
pvresize /dev/sda4

到目前為止,這應該是最簡單的解決方法。


解決現有的分區排序有點複雜。解決它的最簡單和最安全的方法是附加一個新磁碟並遷移過來。

可以將數據改組到位,我之前在Move LVM of PV1 to PV2中描述過。由於分區問題,您不能直接應用此解決方案,並且映射未分區空間losetup --offset是有風險的,因為您可能會弄錯偏移量,並且它無法在重新啟動後繼續存在。

另一種選擇是轉換為 GPT 分區,主分區與邏輯分區之間沒有區別,因此您可以創建任意數量的分區。但是,這樣做會導致系統無法啟動,直到您重新安裝引導載入程序。對於 Grub,您還必須創建一個 bios_grub 分區,該分區可以放置在 64s-2047s 中(在第一個分區之前,忽略對齊)。

如果pvdisplay顯示not usable x.y MiBx >= 1,您還可以將每個分區縮小 1 MiB,然後在主/邏輯分區之間進行轉換。縮小是必要的,因為 msdos 邏輯分區資訊儲存在這些分區之間的間隙中。您目前在 sda5-sda3-sda4 之間沒有這樣的差距,因此它們不能直接映射到邏輯分區。

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