How to resize linux disk
Wstęp #
Tym razem przyszło mi się zmierzyć ze zmianą układu partycji na moim homelabie. Ponieważ kiedy maszyna pojawiła się w moich rękach postanowiłem zainstalować na dysku 2 systemy operacyjne, były to Windows 11 oraz Linux Debian, który później uzyskał dodatkowe paczki i stał się Proxmox. Dziś nastąpił dzień kiedy zacząłem odczuwać brak miejsca na dysku, a jako że Windows stał się zbędny to postanowiłem usunąć partycje i wolną przestrzeń wcielić w część dla Proxmox.
**UWAGA** Zwróć uwagę, że mój cały system był zainstalowany z użyciem LVM, jeżeli nie posiadasz LVM możesz albo przekształcić wolną przestrzeń w nową partycję lub LVM, jednak nie dodasz uzyskanej przestrzeni do proxmox tak jak to zrobiłem w tym wpisie.
Aktualny podział partycji wygląda następująco:
root@pve-xl:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 170.3G 0 part
├─sda4 8:4 0 684M 0 part
├─sda5 8:5 0 954M 0 part /boot
└─sda6 8:6 0 66.5G 0 part
├─vg--pve-lv--root 252:0 0 27.9G 0 lvm /
├─vg--pve-disks_tmeta 252:1 0 32M 0 lvm
│ └─vg--pve-disks-tpool 252:3 0 30G 0 lvm
│ ├─vg--pve-disks 252:4 0 30G 1 lvm
│ └─vg--pve-vm--100--disk--0 252:5 0 15G 0 lvm
└─vg--pve-disks_tdata 252:2 0 30G 0 lvm
└─vg--pve-disks-tpool 252:3 0 30G 0 lvm
├─vg--pve-disks 252:4 0 30G 1 lvm
└─vg--pve-vm--100--disk--0 252:5 0 15G 0 lvm
Jak można z tego wydruku wyczytać, jest to 1 dysk o pojemności 240GB, jest podzielony na 6 partycji. Pierwsza ( sda1 ) jest wykorzystywana przez EFI, piąta ( sda5 ) przechowuje rzeczy na potrzeby startu systemu, ostatnia ( sda6 ) jest częścią LVM. Spójrzmy zatem co dokładniej tam siedzi:
root@pve-xl:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg-pve 1 3 0 wz--n- 66.50g 8.50g
root@pve-xl:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
disks vg-pve twi-aotz-- 30.00g 39.58 23.40
lv-root vg-pve -wi-ao---- <27.94g
vm-100-disk-0 vg-pve Vwi-a-tz-- 15.00g disks 79.16
Jest 1 VG, która ma rozmiar 66.5G tak samo jak partycja. W tej VG posiadamy 3 LV ( Logical Volume ). Tutaj należy spojrzeć na pierwsze pole listy argumentów. LV disks jest (t)hin, lv-root jest simple (-), oraz vm-100-disk-0 jest wiritualny (V) i jest to powiązane z pierwszym LV.
Celem ćwiczenia jest usunięcie partycji 2-3, a uzyskaną przestrzeń zmienić w PV ( Physical Volume ), następnie dodanie nowo utworzonego PV do istniejącej VG vg-pve.
Akcja #
Mamy już rozpisane co jest, co chcemy zrobić. Przydałoby się wykonać czynności i zakończyć je sukcesem.
Na początek użyjemy polecenia gdisk
aby zarządzać tablicą partycji.
root@pve-xl:~# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.9
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help):
Jeśli nie jesteście zaznajomieni z narzędziem gdisk
, to użycie go do roli usunięcia partycji i dodanie nowej sprawdzi się wyjątkowo dobrze. W każdej chwili za pomocą ‘?’ możemy wywołać podręczną pomoc:
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Po zapoznaniu sie z dostępnymi opcjami nie trudno jest zgadnąć, że w celu wyświetlenia aktualnej tablicy partycji należy wprowadzić literę ‘p’, usunięcie partycji odbywa się poprzez ’d’, utworzenie nowej - ’n’ a zapisanie wszystkich wprowadzonych zmian i wyjście z programu to ‘w’. Natomiast jeżeli chcesz wyjść bez wprowadzania zmian, nawet po usunięciu partycji, używa się litery ‘q’. Tak zmiany wprowadzone w trakcie działania programu są zapisywane dopiero przy wychodzeniu z programu przez ‘w’. Nie usuwa się partycji na bieżąco, trzeba taką zmianę zatwierdzić.
Więc do działa:
Command (? for help): p
Disk /dev/sda: 500118192 sectors, 238.5 GiB
Model: ADATA SU650
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C49F47C0-8C27-438A-B2CB-856033CF16DB
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 2669 sectors (1.3 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 206847 100.0 MiB EF00 EFI
2 206848 239615 16.0 MiB 0C01 Micr
3 239616 357296127 170.3 GiB 0700
4 357296128 358696959 684.0 MiB 2700
5 358696960 360650751 954.0 MiB 8300 boot
6 360650752 500117503 66.5 GiB 8E00 main
Command (? for help): d
Partition number (1-6): 2
Command (? for help): d
Partition number (1-6): 3
Command (? for help): p
Disk /dev/sda: 500118192 sectors, 238.5 GiB
Model: ADATA SU650
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C49F47C0-8C27-438A-B2CB-856033CF16DB
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 357091949 sectors (170.3 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 206847 100.0 MiB EF00 EFI
4 357296128 358696959 684.0 MiB 2700
5 358696960 360650751 954.0 MiB 8300 boot
6 360650752 500117503 66.5 GiB 8E00 main
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-500118158, default = 206848) or {+-}size{KMGTP}:
Last sector (206848-357296127, default = 357296127) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda: 500118192 sectors, 238.5 GiB
Model: ADATA SU650
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C49F47C0-8C27-438A-B2CB-856033CF16DB
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 2669 sectors (1.3 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 206847 100.0 MiB EF00 EFI
2 206848 357296127 170.3 GiB 8300 Linux filesystem
4 357296128 358696959 684.0 MiB 2700
5 358696960 360650751 954.0 MiB 8300 boot
6 360650752 500117503 66.5 GiB 8E00 main
Command (? for help):
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
Powyżej zobaczyć można, że wydrukowałem aktualny układ partycji, nastepnie zażądałem usunięcia partycji 2 oraz 3, ponownie wydrukowalem uklad partycji i utworzyłem nową, odpowiadając nacisnięciem klawisza enter na pytania o numer partycji, początkowy sektor oraz ostatni, ponieważ wartości które były proponowane były dla mnie OK. W ten sposób uzyskałem partycję 2 o rozmiarze 170GB. Zapisuję zmiany i przechodzę do dodawania partycji jako PV do VG.
Dla sprawdzenia można wywołać lsblk
w celu sprawdzenia co faktycznie system wie o układzie partycji. Zaskoczenia nie ma - bez zmian. Musimy wymusić odświeżenie układu partycji poleceniem partprobe
. W moim systemie nie ma binarki, przez co muszę ją doinstalować apt install -y parted
. Po zainstalowaniu parted
i wydaniu polecenia partprobe
, mamy odsświeżoną tablicę partycji. Tym samym możemy przystąpić do dalszych czynności.
root@pve-xl:~# pvcreate /dev/sda2
Physical volume "/dev/sda2" successfully created.
root@pve-xl:~# vgextend vg-pve /dev/sda2
Volume group "vg-pve" successfully extended
root@pve-xl:~# vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <13.25g 0
vg-pve 2 3 0 wz--n- <236.77g <178.77g
Utworzenie PV poleceniem pvcreate
, a następnie dodanie partycji do VG poleceniem vgextend
. Tym samym uzyskujemy powiększoną przestrzeń o to co zostało odzyskane po usunięciu partycji związanych z wcześniej zainstalowanego systemu Windows.
Comments powered by Talkyard.