How to resize linux disk

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.