Partycjonowanie LVM

LVM (Logical Volume Management) to system zaawansowanego zarządzania przestrzenią dyskową, który jest o wiele bardziej elastyczny, niż klasyczne partycje dyskowe. Zarządca pozwala na połączenie partycji znajdujących się na różnych urządzeniach pamięci masowej w jeden dysk wirtualny.

Tworzenie LVM

Wydając polecenie sudo lvmdiskscan zostanie wyświetlona lista urządzeń jakie można wykorzystać jako wolumin fizyczny.

 

root@deb12:~# lvmdiskscan
  /dev/sda1 [      59,04 GiB]
  /dev/sda5 [     975,00 MiB]
  /dev/sdb  [      20,00 GiB]
  1 disk
  2 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

Aby można było używać danego dysku, bądź partycji do utworzenia LVM należy nadać nagłówek. Służy do tego polecenie sudo pvcreate „nazwa_dysku/partycji”

root@deb12:~# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

Należy teraz utworzyć grupę woluminów , do której zostaną dodane woluminy fizyczne. Pozwoli na to polecenie sudo vgcreate „nazwa_grupy” „nazwa_woluminu”. Utworzy ono nową grupę oraz doda nowy wolumin. W przypadku gdy istnieje potrzeba dodania kolejnego woluminu należy skorzystać z poleceni sudo vgextend „nazwa_grupy” „nazwa_woluminu”.

root@deb12:~# vgcreate sdb_lvm /dev/sdb
  Volume group "sdb_lvm" successfully created

W celu sprawdzenia wielkości grupy trzeba wydać polecenie sudo vgdisplay.

root@deb12:~# vgdisplay
  --- Volume group ---
  VG Name               sdb_lvm
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <20,00 GiB
  PE Size               4,00 MiB
  Total PE              5119
  Alloc PE / Size       0 / 0
  Free  PE / Size       5119 / <20,00 GiB
  VG UUID               jGZXXy-KNj1-VxDe-Std7-PwAC-UwoT-7EK1kq

Aby storzyć wolumin logiczny należy wykorzystać polecenie sudo lvcreate -l 100%FREE sdb_lvm -n samba. Utworzy ono wolumin logiczny o nazwie samba, który przejmie całą przestrzeń przypisaną do grupy sdb_lvm. W przypadku gdy wolumin logiczny ma posiadać z góry określony rozmiar, należy skorzystać z polecenia sudo lvcreate -L [rozmiar] [nazwa_grupy] -n [nazwa-woluminu-logicznego].

Wykorzystując polecenie sudo lvdisplay zostanie wyświetlona lista woluminów logicznych wraz z ich właściwościami.

root@deb12:~# lvcreate --name samba --size 10G sdb_lvm
  Logical volume "samba" created.


root@deb12:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/sdb_lvm/samba
  LV Name                samba
  VG Name                sdb_lvm
  LV UUID                vSvtFk-1jWX-cym4-XFnI-EP3W-34Tx-vVGt9r
  LV Write Access        read/write
  LV Creation host, time deb12, 2024-03-01 09:04:38 +0100
  LV Status              available
  # open                 0
  LV Size                10,00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

root@deb12:~# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda               8:0    0   60G  0 disk
├─sda1            8:1    0   59G  0 part /
├─sda2            8:2    0    1K  0 part
└─sda5            8:5    0  975M  0 part [SWAP]
sdb               8:16   0   20G  0 disk
└─sdb_lvm-samba 254:0    0   10G  0 lvm
sr0              11:0    1  628M  0 rom
root@deb12:~#

Partycje LVM mają swoje pliki zapisywane w /dev/mapper/ 


root@deb12:~# ls -l /dev/mapper/
razem 0
crw------- 1 root root 10, 236 03-01 08:48 control
lrwxrwxrwx 1 root root       7 03-01 09:04 sdb_lvm-samba -> ../dm-0

Teraz trzeba utworzyć system plików na woluminie logicznym. W tym celu zostanie wykorzystane narzędzie mkfs. Polecenie wygląda następująco, sudo mkfs.ext4 /dev/vg00/part1.

mkfs.ext4 /dev/mapper/sdb_lvm-samba
root@deb12:~# mkfs.ext4 /dev/sdb_lvm/samba
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: d50457f0-074c-4ad8-a66f-d4848e2782a2
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Po utworzeniu systemu plików pozostaje zamontować wolumin logiczny. Najpierw należy utworzyć katalog, do którego zostanie zamontowany wolumin. Wydając polecenie sudo mkdir /mnt/virtual zostanie utworzony katalog virtual w folderze /mnt. Można utworzyć katalog w dowolnym miejscu. 

Zamontowanie woluminu polega na wydaniu polecenia sudo mount /dev/”nazwa_grupy”/”nazwa_woluminu_logicznego” „”ścieżka_miejsca_mątowania [/mnt/virtual]. W celu sprawdzenia czy montowanie się powiodło należy skorzystać z polecenia df -h.

root@deb12:~# mkdir /mnt/samba
root@deb12:~# mount /dev/mapper/sdb_lvm-samba /mnt/samba/

root@deb12:~# df -h
System plików             rozm. użyte dost. %uż. zamont. na
udev                       2,5G     0  2,5G   0% /dev
tmpfs                      505M  508K  504M   1% /run
/dev/sda1                   58G  1,9G   54G   4% /
tmpfs                      2,5G     0  2,5G   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                      505M     0  505M   0% /run/user/0
tmpfs                      505M     0  505M   0% /run/user/1000
/dev/mapper/sdb_lvm-samba  9,8G   24K  9,3G   1% /mnt/samba

Takie ustawienie wymaga ręcznego montowania woluminu za każdym razem gdy system zostanie uruchomiony na nowo. Aby montowanie następowało podczas startu systemu należy dodać wpis do tablicy fstab. Używając edytora tekstowego np. nano, należy dodać wpis. Polecenie wygląda następująco, sudo nano /etc/fstab. Po otworzeniu pliku trzeba wpisać na jego końcu nastepujący wpis /dev/”grupa_woluminów”/”nazwa_woluminu_wirtualnego” „ścieżka_montowania” ext4 defaults 0 0.

dev/mapper/sdb_lvm-samba /mnt/samba/ ext4 defaults 0 0.

Bezpieczniejszy i zalecany sposób mountowania partycji w fstab,  jest użycie UUID partycji. UUID partycji sprawdzamy za pomocą polecenia blkid

root@deb12:~# blkid /dev/mapper/sdb_lvm-samba
/dev/mapper/sdb_lvm-samba: UUID="8d04feaa-f630-43f5-900c-641da9d45277" BLOCK_SIZE="4096" TYPE="ext4"
root@deb12:~# nano /etc/fstab

UUID="8d04feaa-f630-43f5-900c-641da9d45277" /mnt/samba/ ext4 defaults 0 0

Rozszerzyć partycję LVM o dodatkowe 1GB możemy za pomocą polecenia lvextend.

Wykonując polecenie lvextend –size +1g –resizefs /dev/mapper/sdb_lvl-samba

root@deb12:~# lvextend --size +1g --resizefs /dev/sdb_lvm/samba
  Size of logical volume sdb_lvm/samba changed from 10,00 GiB (2560 extents) to 11,00 GiB (2816 extents).
  Logical volume sdb_lvm/samba successfully resized.
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/sdb_lvm-samba is mounted on /mnt/samba; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/mapper/sdb_lvm-samba is now 2883584 (4k) blocks long.

root@deb12:~# df -h
System plików             rozm. użyte dost. %uż. zamont. na
udev                       2,5G     0  2,5G   0% /dev
tmpfs                      505M  508K  504M   1% /run
/dev/sda1                   58G  1,9G   54G   4% /
tmpfs                      2,5G     0  2,5G   0% /dev/shm
tmpfs                      5,0M     0  5,0M   0% /run/lock
tmpfs                      505M     0  505M   0% /run/user/0
tmpfs                      505M     0  505M   0% /run/user/1000
/dev/mapper/sdb_lvm-samba   11G   28K   11G   1% /mnt/samba
root@deb12:~#

root@deb12:~# lvs
  LV    VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  samba sdb_lvm -wi-ao---- 11,00g

Rozszerzanie woluminu

Jeśli zaistnieje potrzeba rozszerzenia wirtualnego woluminu, można tego dokonać poprzez dodanie kolejnych dysków fizycznych lub partycji.

Rozszerzenia wirtualnego woluminu LVM można dokonać zarówno gdy jest on zamontowany oraz gdy znajdują się na nim zapisane dane. Pamiętać należy jednak, że wszelkie operacje edycji przestrzeni dyskowej niosą ryzyko utraty danych.

Przed przystąpieniem do rozszerzania woluminu został utworzony plik aby pokazać czy ta operacja spowoduje jego usunięcie bądź uszkodzenie.

Poleceniem sudo lvmdiskscan można sprawdzić nazwę dysku bądź partycji. która ma zostać wykorzystana do zwiększenia przestrzeni na dane.

Wirtualny wolumin zostanie powiększony o dodatkowe 30GB, zostanie wykorzystany do tego dysk /dev/sdbc.

W pierwszej kolejności należy utworzyć nagłówek, wykorzystując polecenie sudo pvcreate /dev/sdc.

Należy teraz rozszerzyć grupę woluminów, wykorzystując polecenie sudo vgextend vg00 /dev/sdc.

Teraz należy rozszerzyć wcześniej utworzony wolumin wirtualny. Poleceniem sudo lvextend -r -l +100%FREE /dev/vg00/part1 /dev/sdc rozszerzamy wolumin jak i jego system plików o całe dostępne wolne miejsce. W przypadku gdy ma zostać dodana określona pojemność należy wydać polecenie sudo lvextend -r -L „o_ile_ma_zostać_rozszerzony_wolumin [+10G]” /dev/vg00/part1 /dev/sdc .

Jak można zauważyć na powyższym zdjęciu, wolumin logiczny został rozszerzony do 80 GB. Rozszerzenie systemu plików było możliwe nawet gdy wolumin był zamontowany w systemie.

Dodatkowo, jak można zauważyć na zdjęciach poniżej, plik tekstowy jak i jego zawartość zostały nienaruszone.