Bardzo ciekawym i nie aż tak skomplikowanym tematem są LVM czyli Logical Volume Manager. Jest to bardzo elastyczny mechanizm do zarządzania przestrzenią dyskową. Poniżej przedstawiam parę podstawowych komend którymi sam się posługuję.

Poniżej są też ćwiczenia z konkretnych przypadków

Zmniejszanie dysku
Rozszerzanie dodawanie nowego dysku do wolumen grupy

Tworzenie LVM

Dostępne partycje:

/dev/sda1 /dev/sda2 /dev/sda3

Zainicjowanie fizycznych partycji do używania LVM:

pvcreate /dev/sda1
pvcreate /dev/sda2
pvcreate /dev/sda3

Wyświetlanie atrybutów fizycznych wolumenów:

pvdispaly & pvs

Tworzenie grupy wolumenu:

vgcreate vdysk /dev/sda1 /dev/sda2 /dev/sda3

lub

(gdzie PE – Physical Extents będzie wynosił 32M, domyślnie 4M)

vgcreate -s 32 vdysk /dev/sda1 /dev/sda2 /dev/sda3

Wyświetlanie atrybutów grup wolumenów:

vgdisplay & vgs

Tworzenie logicznego wolumenu w grupie wolumenu:

lvcreate -L 32M -n part1 vdysk

Tworzenie systemu pików na logicznym wolumenie:

mkfs.ext4 /dev/vdysk/part1

Wyświetlanie atrybutów logicznych wolumenów:

lvdisplay & lvs

Tworzenie katalogu i montowanie:

mkdir /lvm
mount /dev/vdysk/part1 /lvm

lub

mount /dev/mapper/vdysk-part1

Powiększanie LVM

Wyświetlanie atrybutów grup wolumenów:

vgs

Rozszerzenie logicznych wolumenów o 12M:

lvextend -L +12M /dev/vdysk/part1

lub

Rozszerzenie logicznych wolumenów o 4 jednostki PE:

lvextend -l +4 /dev/vdysk/part1

lub o 50%

lvextend -l +50%FREE /dev/vdysk/part1

Rozszerzanie systemy plików:

resize2fs /dev/vdysk/part1

Sprawdzanie wielkości partycji:

df -h

Zmniejszanie LVM

Odmontowanie logicznego wolumena zamontowanego w katalogu lvm:

umount /lvm

Zmniejszenie rozmiaru sytstemu plików do 32M

resize2fs /dev/vdysk/part1 32M

Zmiejszenie rozmiaru partycji do 32M

lvreduce -L 32 /dev/vdysk/part1
mount /dev/vdysk/part1 /lvm

Dodawanie dodatkowej partycji/miejsca do volumen grupy

pvcreate /dev/sda4
vgextend vdysk /dev/sda4

Zmniejszanie wielkości partycji

pvresize /dev/sda2 --setphysicalvolumesize 50G

Odłączenie dysku od grupy

(pvmove – Przenosi dane na inne partycje dostępne w volum grupie)

pvmove /dev/sda1

Odłączenie /dev/sda1 z grupy vdysk:

vgreduce vdysk /dev/sda1

Usuniecie oznaczenia LVM z fizycznej partycji

pvremove /dev/sda1

Snapshot

lvcreate -L 12M -n snapszot -s /dev/vdysk/part1

 

Ćwiczenia z LVM:

Zmniejszanie dysku

Przypuśćmy, że mamy maszynę na której mamy 180G dysk, dane zajmują 30G i musimy go zmniejszyć do rozmiarów 50G. Najszybciej było by można dodać drugi dysk o rozmiarach 50G i podłączyć pod Volumen Grupę i przesunąć dane na nową mniejszą partycję. A starą 180G usunąć. I tak własnie zaraz zrobię.

[root@baza01 ~]# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 vg_DB vg_HDD1 -wi-ao-- 179,50g
 lv_home vg_produkcja -wi-ao-- 33,76g 
 lv_root vg_produkcja -wi-ao-- 50,00g 
 lv_swap vg_produkcja -wi-ao-- 15,75g
[root@baza01 ~]# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0 
 /dev/sdb1 vg_HDD1 lvm2 a-- 180,00g 508,00m
[root@baza01 ~]# vgs
 VG #PV #LV #SN Attr VSize VFree 
 vg_HDD1 1 1 0 wz--n- 180,00g 508,00m
 vg_produkcja 1 3 0 wz--n- 99,51g 0
[root@baza01 ~]# fdisk /dev/sdc
 Urządzenie nie zawiera poprawnej DOS-owej tablicy partycji ani etykiety dysku Sun, SGI ani OSF
 Tworzenie nowej etykiety dysku typu DOS z identyfikatorem dysku 0x16358207.
 Zmiany pozostaną tylko w pamięci do chwili ich zapisania.
 Potem, oczywiście, poprzednia zawartość będzie nie do odzyskania.
 Uwaga: niepoprawna flaga 0x0000 tablicy partycji 4 będzie poprawiona przy zapisie (w)
 UWAGA: tryb kompatybilności z DOS-em jest przestarzały. Zdecydowanie
 zaleca się wyłączyć ten tryb (polecenie 'c') i zmienić jednostki
 wyświetlania na sektory (polecenie 'u').
 Polecenie (m wyświetla pomoc): p
 Dysk /dev/sdc: 53.7 GB, bajtów: 53687091200
 głowic: 255, sektorów/ścieżkę: 63, cylindrów: 6527
 Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
 Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
 Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
 Identyfikator dysku: 0x16358207
 Urządzenie Rozruch Początek Koniec Bloków ID System
 Polecenie (m wyświetla pomoc): n
 Polecenie
 e partycja rozszerzona
 p partycja główna (1-4)
 Numer partycji (1-4): 1
 Pierwszy cylinder (1-6527, domyślnie 1):
 Przyjęto wartość domyślną 1
 Ostatni cylinder, +cylindrów lub +rozmiar{K,M,G} (1-6527, domyślnie 6527):
 Przyjęto wartość domyślną 6527
 Polecenie (m wyświetla pomoc): p
 Dysk /dev/sdc: 53.7 GB, bajtów: 53687091200
 głowic: 255, sektorów/ścieżkę: 63, cylindrów: 6527
 Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
 Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
 Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
 Identyfikator dysku: 0x16358207
 Urządzenie Rozruch Początek Koniec Bloków ID System
 /dev/sdc1 1 6527 52428096 83 Linux
 Polecenie (m wyświetla pomoc): w
 Tablica partycji została zmodyfikowana!
 Wywoływanie ioctl() w celu ponownego odczytu tablicy partycji.
 Synchronizacja dysków.
[root@baza01 ~]# pvcreate /dev/sdc1
 Writing physical volume data to disk "/dev/sdc1"
 Physical volume "/dev/sdc1" successfully created
[root@baza01 ~]# vgextend vg_HDD1 /dev/sdc1
 Volume group "vg_HDD1" successfully extended
[root@baza01 ~]# umount /DB
[root@baza01 ~]# e2fsck -f /dev/vg_HDD1/vg_DB
 e2fsck 1.41.12 (17-May-2010)
 Przebieg 1: Sprawdzanie i-węzłów, bloków i rozmiarów
 Przebieg 2: Sprawdzanie struktury katalogów
 Przebieg 3: Sprawdzanie łączności katalogów
 Przebieg 4: Sprawdzanie liczników odwołań
 Przebieg 5: Sprawdzanie sumarycznych informacji o grupach
 /dev/vg_HDD1/vg_DB: 2445/11763712 plików (42.2% nieciągłych), 7459456/47054848 bloków
[root@baza01 ~]# resize2fs /dev/vg_HDD1/vg_DB 49G
 resize2fs 1.41.12 (17-May-2010)
 Zmiana rozmiaru systemu plików /dev/vg_HDD1/vg_DB na 12845056 (4k) bloków.
 System plików na /dev/vg_HDD1/vg_DB ma teraz 12845056 bloków.
[root@baza01 ~]# lvreduce -L 49G /dev/vg_HDD1/vg_DB
 WARNING: Reducing active logical volume to 49,00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
 Do you really want to reduce vg_DB? [y/n]: y
 Reducing logical volume vg_DB to 49,00 GiB
 Logical volume vg_DB successfully resized
[root@baza01 ~]# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 vg_DB vg_HDD1 -wi-a--- 49,00g
 lv_home vg_produkcja -wi-ao-- 33,76g
 lv_root vg_produkcja -wi-ao-- 50,00g
 lv_swap vg_produkcja -wi-ao-- 15,75g
[root@baza01 ~]# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0
 /dev/sdb1 vg_HDD1 lvm2 a-- 180,00g 131,00g
 /dev/sdc1 vg_HDD1 lvm2 a-- 50,00g 50,00g
[root@baza01 ~]# pvresize /dev/sdb1 --setphysicalvolumesize 50G
 Physical volume "/dev/sdb1" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized
[root@baza01 ~]# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0
 /dev/sdb1 vg_HDD1 lvm2 a-- 50,00g 1020,00m
 /dev/sdc1 vg_HDD1 lvm2 a-- 50,00g 50,00g
[root@baza01 ~]# pvmove /dev/sdb1
 /dev/sdb1: Moved: 0,0%
 /dev/sdb1: Moved: 1,1%
 /dev/sdb1: Moved: 20,7%
 /dev/sdb1: Moved: 48,2%
 /dev/sdb1: Moved: 60,9%
 /dev/sdb1: Moved: 77,9%
 /dev/sdb1: Moved: 93,1%
 /dev/sdb1: Moved: 100,0%
[root@baza01 ~]# vgreduce vg_HDD1 /dev/sdb1
 Removed "/dev/sdb1" from volume group "vg_HDD1"
[root@baza01 ~]# pvremove /dev/sdb1
 Labels on physical volume "/dev/sdb1" successfully wiped
[root@baza01 ~]# df -h
 System plików rozm. użyte dost. %uż. zamont. na
 /dev/mapper/vg_produkcja-lv_root
 50G 30G 18G 63% /
 tmpfs 7,8G 0 7,8G 0% /dev/shm
 /dev/sda1 485M 69M 391M 15% /boot
 /dev/mapper/vg_produkcja-lv_home
 34G 2,3G 30G 8% /home
[root@baza01 ~]# mount -a
[root@baza01 ~]# df -h
 System plików rozm. użyte dost. %uż. zamont. na
 /dev/mapper/vg_produkcja-lv_root
 50G 30G 18G 63% /
 tmpfs 7,8G 0 7,8G 0% /dev/shm
 /dev/sda1 485M 69M 391M 15% /boot
 /dev/mapper/vg_produkcja-lv_home
 34G 2,3G 30G 8% /home
 /dev/mapper/vg_HDD1-vg_DB
 49G 26G 21G 56% /DB

Rozszerzanie / dodawanie nowego dysku do wolumen grupy

Mamy sytuację że mamy produkcyjną maszynę na VMware na której kończy się miejsce na dysku. Zadanie jest takie aby dodać nowy dysk i nie restartować maszyny bo mieli ważne dane.

Pierwsze co admin pomyśli po dodaniu dysku to czy system go zobaczy. Od razu nie zobaczy ale wystarczy przeskanować /sys/class/scsi_host i nowy dysk powinien się pojawić.

[root@produkcja ~]# ls /sys/class/scsi_host/
host0 host1 host2
 [root@produkcja ~]#echo - - - > /sys/class/scsi_host/host0/scan
 [root@produkcja ~]#echo - - - > /sys/class/scsi_host/host1/scan
 [root@produkcja ~]#echo - - - > /sys/class/scsi_host/host2/scan

lub zastosować skrypt

#! /bin/bash
 host=`ls /sys/class/scsi_host/`
 for i in $host
 do
 echo - - - > /sys/class/scsi_host/$i/scan
 done

Pojawił się dysk 70G

[root@produkcja ~]# fdisk -l
Dysk /dev/sdc: 75.2 GB, bajtów: 75161927680
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 9137
Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x00000000

Upewniam się czy ten dysk na pewno nigdzie nie został przydzielony

[root@produkcja ~]# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0 
 /dev/sdb1 vg_baza lvm2 a-- 50,00g 1020,00m

Nowy dysk /dev/sdc Nigdzie nie należy więc tworzę partycję

[root@produkcja ~]# fdisk /dev/sdc
 Urządzenie nie zawiera poprawnej DOS-owej tablicy partycji ani etykiety dysku Sun, SGI ani OSF
 Tworzenie nowej etykiety dysku typu DOS z identyfikatorem dysku 0xb4f1510c.
 Zmiany pozostaną tylko w pamięci do chwili ich zapisania.
 Potem, oczywiście, poprzednia zawartość będzie nie do odzyskania.
 Uwaga: niepoprawna flaga 0x0000 tablicy partycji 4 będzie poprawiona przy zapisie (w)
 UWAGA: tryb kompatybilności z DOS-em jest przestarzały. Zdecydowanie
 zaleca się wyłączyć ten tryb (polecenie 'c') i zmienić jednostki
 wyświetlania na sektory (polecenie 'u').
 Polecenie (m wyświetla pomoc): p
 Dysk /dev/sdc: 75.2 GB, bajtów: 75161927680
 głowic: 255, sektorów/ścieżkę: 63, cylindrów: 9137
 Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
 Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
 Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
 Identyfikator dysku: 0xb4f1510c
 Urządzenie Rozruch Początek Koniec Bloków ID System
 Polecenie (m wyświetla pomoc): n
 Polecenie
 e partycja rozszerzona
 p partycja główna (1-4)
p
 Numer partycji (1-4): 1
 Pierwszy cylinder (1-9137, domyślnie 1):
 Przyjęto wartość domyślną 1
 Ostatni cylinder, +cylindrów lub +rozmiar{K,M,G} (1-9137, domyślnie 9137):
 Przyjęto wartość domyślną 9137
 Polecenie (m wyświetla pomoc): p
 Dysk /dev/sdc: 75.2 GB, bajtów: 75161927680
 głowic: 255, sektorów/ścieżkę: 63, cylindrów: 9137
 Jednostka = cylindrów, czyli 16065 * 512 = 8225280 bajtów
 Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
 Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
 Identyfikator dysku: 0xb4f1510c
 Urządzenie Rozruch Początek Koniec Bloków ID System
 /dev/sdc1 1 9137 73392921 83 Linux
 Polecenie (m wyświetla pomoc): w
 Tablica partycji została zmodyfikowana!
 Wywoływanie ioctl() w celu ponownego odczytu tablicy partycji.
 Synchronizacja dysków.

Tworzę nowy fizyczny wolumen

[root@produkcja ~]# pvcreate /dev/sdc1
 Writing physical volume data to disk "/dev/sdc1"
 Physical volume "/dev/sdc1" successfully created

Wyświetlam fizyczne wolumeny

[root@produkcja ~]# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0 
 /dev/sdb1 vg_baza lvm2 a-- 50,00g 1020,00m
 /dev/sdc1 lvm2 a-- 69,99g 69,99g

Rozszerzam wolumen grupę o nowy fizyczny wolumen

[root@produkcja ~]# vgextend vg_baza /dev/sdc1
 Volume group "vg_baza" successfully extended

Sprawdzam czy fizyczny wolumen jest przypisany do wolumen grupy

[root@produkcja ~]# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/sda2 vg_produkcja lvm2 a-- 99,51g 0 
 /dev/sdb1 vg_baza lvm2 a-- 50,00g 1020,00m
 /dev/sdc1 vg_baza lvm2 a-- 69,99g 69,99g

Wyświetlam logiczne volumeny aby wiedzieć jaki mam rozszerzyć.

[root@produkcja ~]# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 vg_DB vg_baza -wi-ao-- 49,00g 
 lv_home vg_produkcja -wi-ao-- 33,76g 
 lv_root vg_produkcja -wi-ao-- 50,00g 
 lv_swap vg_produkcja -wi-ao-- 15,75g

Rozszerzam o 70G logiczny wolumen

[root@produkcja ~]# lvextend -L +70G /dev/vg_baza/vg_DB 
 Extending logical volume vg_DB to 119,00 GiB
 Logical volume vg_DB successfully resized

Sprawdzam wielkość zamontowanej partycji. Tu jeszcze będzie stara wartość.

[root@produkcja ~]# df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/mapper/vg_produkcja-lv_root  50G 29G 19G 61% /
tmpfs 7,8G 0 7,8G 0% /dev/shm 
/dev/sda1 485M 69M 391M 15% /boot
/dev/mapper/vg_produkcja-lv_home  34G 7,8G 24G 25% /home
/dev/mapper/vg_baza-vg_DB  49G 26G 21G 56% /baza

Rozszerzam system plików, jeśli system plików to XFS zamień komendę resize2fs na fsadm resize

[root@produkcja ~]# resize2fs /dev/vg_baza/vg_DB 
resize2fs 1.41.12 (17-May-2010)
System plików /dev/vg_baza/vg_DB jest zamontowany pod /dsdb; wymagana zmiana rozmiaru w locie
old desc_blocks = 4, new_desc_blocks = 8
Wykonywanie zmiany rozmiaru w locie /dev/vg_baza/vg_DB na 31195136 (4k) bloków.
System plików na /dev/vg_baza/vg_DB ma teraz 31195136 bloków.

Sprawdzam wielkość zamontowanej partycji. Tu już będzie nowa wartość 118G

[root@produkcja ~]# df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/mapper/vg_produkcja-lv_root
 50G 29G 19G 61% /
tmpfs 7,8G 0 7,8G 0% /dev/shm
/dev/sda1 485M 69M 391M 15% /boot
/dev/mapper/vg_produkcja-lv_home  34G 7,8G 24G 25% /home
/dev/mapper/vg_baza-vg_DB  118G 26G 86G 24% /dsdb