W moim poprzednim blogu przyjrzeliśmy się migawkom LVM . Kolejną zaawansowaną funkcją, na którą możemy spojrzeć w LVM2, jest Thin Provisioning. Jest to funkcja powszechna w większości specjalistycznego sprzętu pamięci masowej, która jest również częścią LVM2. Tworzenie woluminów LVM z alokacją elastyczną pozwala na udostępnienie większej ilości miejsca, niż faktycznie może znajdować się w systemie. Chociaż może to wydawać się szalone, może być korzystne. To ludzka cecha, że prosimy o więcej, niż potrzebujemy. Dotyczy to wymagań dotyczących miejsca do przechowywania. Można więc mówić o 15 TB danych, ale tak naprawdę każdy korzysta z 3 TB. Korzystanie z Thin Provisioning w LVM2 umożliwi wdrażanie woluminów o większej ilości miejsca, niż faktycznie jest w systemie. Dzięki temu użytkownicy są zadowoleni. Musimy jednak upewnić się, że odpowiednio monitorujemy system, aby niedobory podaży nie stały się problemem. W następnej lekcji przyjrzymy się migracji danych LVM
Zainstaluj wymagane oprogramowanie
Może być konieczne zainstalowanie narzędzi do zarządzania Thin Provisioning w LVM. Pakiet to narzędzia do alokacji elastycznej w Arch Linux i Ubuntu, a w CentOS pakiet to urządzenia-mapper-persistent-data. Możemy sprawdzić, czy istnieje jedno z narzędzi, jeśli go tam nie ma, możemy zainstalować wymagany pakiet:
Zainstaluj Debian / Ubuntu
apt-get install -y narzędzia-thin-provisioning-tools Tworzenie cienkiej puli
Rozwiązanie LVM Thin Provisioning wymaga, aby woluminy alokowane elastycznie znajdowały się w tzw. cienkiej puli. Cienka pula to po prostu specjalny rodzaj woluminu logicznego. Cienka pula określa, ile miejsca jest udostępniane woluminom alokowanym elastycznie. Bardzo ważne jest, abyśmy monitorowali dostępną przestrzeń w tej puli.
root@deb12:~# lvcreate --size 5g --thinpool think-pool sdb_lvm
Thin pool volume with chunk size 64,00 KiB can address at most <15,88 TiB of data.
Logical volume "think-pool" created. Cienka pula jest tworzona poprzez określenie opcji –thinpool podczas tworzenia specjalnego LV. Nadaliśmy nazwę think-pool i jest ona tworzona w grupie woluminów sdb_lvm. Celowo ustawiliśmy mały rozmiar 5GB, abyśmy mogli zademonstrować nadmierne udostępnianie i potrzebę monitorowania cienkiej puli. Do monitorowania puli Thin Pool możemy użyć lvdisplay.
root@deb12:~# lvdisplay /dev/sdb_lvm/think-pool
--- Logical volume ---
LV Name think-pool
VG Name sdb_lvm
LV UUID Qo0R3U-GpJA-PxSG-ZPgr-nvMz-PIsd-BOJfrV
LV Write Access read/write
LV Creation host, time deb12, 2024-03-01 10:36:57 +0100
LV Pool metadata think-pool_tmeta
LV Pool data think-pool_tdata
LV Status available
# open 0
LV Size 5,00 GiB
Allocated pool data 0,00%
Allocated metadata 10,64%
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3 Co najważniejsze, musimy monitorować wartość danych przydzielonej puli. Ponieważ nie utworzyliśmy jeszcze żadnych wartości LV ani nie dodaliśmy danych, jest to świetne rozwiązanie przy zużyciu 0%. Do monitorowania tej wartości możemy również użyć polecenia lvs:
root@deb12:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
samba sdb_lvm -wi-ao---- 11,00g
think-pool sdb_lvm twi-a-tz-- 5,00g 0,00 10,64
root@deb12:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sdb_lvm-samba 254:0 0 11G 0 lvm /mnt/samba
├─sdb_lvm-think--pool_tmeta 254:1 0 8M 0 lvm
│ └─sdb_lvm-think--pool 254:3 0 5G 0 lvm
└─sdb_lvm-think--pool_tdata 254:2 0 5G 0 lvm
└─sdb_lvm-think--pool 254:3 0 5G 0 lvm
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 59G 0 part /
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 975M 0 part [SWAP]
sr0 11:0 1 628M 0 Krytyczną kolumną jest Data%. Możemy również spojrzeć na atrybuty używane w puli:
Dla tpool atrybuty są następujące
Attr
-wi-ao—-
- Volume Type: Thin pool / cienka pula
- Permissions: Writable / Możliwość zapisu
- Allocation Policy: Inherited from the Volume Group / Dziedziczone z Volume Group
- Fixed minor number is not set / Stały numer mniejszości nie jest ustawiony
- State: Is marked as active / Jest oznaczony jako aktywny
- Device: Is not open or mounted / Nie jest otwarty ani zamontowany
- Target type: Is marked as thin provisioning / Jest oznaczony jako thin provisioning
- Zeroed: Newly allocated blocks will be overwritten with zeros before use. / Nowo przydzielone bloki zostaną nadpisane zerami przed ich użyciem.
Tworzenie cienkich woluminów w LVM2
Teraz, gdy mamy Thin Pool, możemy przydzielić miejsce Thin Volumes. Pamiętaj, że w rzeczywistości jesteśmy ograniczeni do śmiesznie małych 5GB. Nie powstrzymuje nas to od zapewnienia większej przestrzeni. Odbywa się to przy założeniu, że żądana przestrzeń prawdopodobnie nie będzie równa potrzebnej przestrzeni. Zasada Urban Penguin dla użytkowników IT obowiązuje:
Wymagana przestrzeń!= Potrzebna przestrzeń
Nawet jeśli rzeczywiście będą potrzebować żądanej przestrzeni, prawdopodobnie na początku nie będzie ona w całości potrzebna. Później można dodać więcej miejsca do grupy woluminów i cienkiej puli.
root@deb12:~# lvcreate -V 100G --thin -n tnin_volume sdb_lvm/think-pool
WARNING: Sum of all thin volume sizes (100,00 GiB) exceeds the size of thin pool sdb_lvm/think-pool and the size of whole volume group (<20,00 GiB).
WARNING: You have not turned on protection against thin pools running out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
Logical volume "tnin_volume" created.
Widzimy, że pojawia się ostrzeżenie informujące nas o przekroczeniu aprowizacji. Informuje nas również, że w razie potrzeby możemy włączyć automatyczny rozwój puli. Bardzo podobnie jak w przypadku snapshotów
Przynajmniej użytkownicy są zadowoleni, mają wolumin 100 GiB, nie wiedząc, że trochę ich oszukaliśmy.
Jeśli ponownie spojrzymy na wynik polecenia lvs, zobaczymy nowy wolumin:
root@deb12:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
samba sdb_lvm -wi-ao---- 11,00g
think-pool sdb_lvm twi-aotz-- 5,00g 0,00 10,69
tnin_volume sdb_lvm Vwi-a-tz-- 100,00g think-pool 0,00
root@deb12:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sdb_lvm-samba 254:0 0 11G 0 lvm /mnt/samba
├─sdb_lvm-think--pool_tmeta 254:1 0 8M 0 lvm
│ └─sdb_lvm-think--pool-tpool 254:3 0 5G 0 lvm
│ ├─sdb_lvm-think--pool 254:4 0 5G 1 lvm
│ └─sdb_lvm-tnin_volume 254:5 0 100G 0 lvm
└─sdb_lvm-think--pool_tdata 254:2 0 5G 0 lvm
└─sdb_lvm-think--pool-tpool 254:3 0 5G 0 lvm
├─sdb_lvm-think--pool 254:4 0 5G 1 lvm
└─sdb_lvm-tnin_volume 254:5 0 100G 0 lvm
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 59G 0 part /
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 975M 0 part [SWAP]
sr0 11:0 1 628M 0 rom
Widzimy, że rozmiar cienkiego_woluminu wynosi 1 GiB. Atrybuty pokazują trochę więcej szczegółów:
Dla cienkiej_objętości atrybuty brzmią:
- Volume Type: Thin Volume
- Permissions: Writable
- Allocation Policy: Inherited from the Volume Group
- Fixed minor number is not set
- State: Is marked as active
- Device: Is not open or mounted
- Target type: Is marked as thin provisioning
- Zeroed: Newly allocated blocks will be overwritten with zeros before use.
- Typ wolumenu: Cienka objętość
- Uprawnienia: Zapisywalne
- Zasady alokacji: Dziedziczone z grupy woluminów
- Naprawiono numer drugorzędny, który nie jest ustawiony
- Stan: Jest oznaczony jako aktywny
- Urządzenie: nie jest otwarte ani zamontowane
- Typ docelowy: jest oznaczony jako alokacja elastyczna
- Zeroed: Nowo przydzielone bloki zostaną nadpisane zerami przed użyciem.
Uwaga: ponieważ pool jest obecnie używany, jest oznaczony jako otwarty.
Monitorowanie wykorzystania puli
Jak już wspomnieliśmy, wirtualny rozmiar cienkiego woluminu wynosi 100 GiB. Jeśli spróbujemy sformatować to za pomocą systemu plików ext4, proces zapisze wystarczającą ilość metadanych, aby obsłużyć wolumin o rozmiarze 100 GiB. Ponieważ pamięć fizyczna zajmuje zaledwie 5 MiB, zauważymy, że wykorzystywane miejsce znacznie wzrasta po samym sformatowaniu LV.
root@deb12:~# mkfs.ext4 /dev/sdb_lvm/tnin_volume
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 26214400 4k blocks and 6553600 inodes
Filesystem UUID: d9bd0648-3039-4741-9c0c-41115146d8aa
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done
Używając polecenia lvs, możemy zobaczyć, że metadane systemu plików zajmują 12,40% miejsca na dysku w woluminie cienkim i 0,51% miejsca w puli cienkiej. Musimy bardzo uważać na cienką przestrzeń basenu, aby nie zabrakło jej miejsca:
root@deb12:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
samba sdb_lvm -wi-ao---- 11,00g
think-pool sdb_lvm twi-aotz-- 5,00g 10,16 12,40
tnin_volume sdb_lvm Vwi-a-tz-- 100,00g think-pool 0,51
Konfigurowanie automatycznego rozszerzania cienkiej puli
Edycja ustawień w pliku /etc/lvm/lvm.conf może w razie potrzeby umożliwić automatyczne powiększanie cienkiej puli. Domyślnie próg wynosi 100%, co oznacza, że pula nie będzie rosła. Jeśli ustawimy tę opcję na 75%, Cienka Pula będzie się automatycznie rozszerzać, gdy pula zostanie zapełniona w 75%. Zwiększy się o domyślny procent 20%, jeśli wartość nie zostanie zmieniona. Możemy zobaczyć te ustawienia za pomocą polecenia grep w stosunku do pliku.
root@deb12:~# grep -E thin_pool_auto /etc/lvm/lvm.conf
# Configuration option activation/thin_pool_autoextend_threshold.
# Also see thin_pool_autoextend_percent.
# thin_pool_autoextend_threshold = 70
# thin_pool_autoextend_threshold = 100
# Configuration option activation/thin_pool_autoextend_percent.
# thin_pool_autoextend_percent = 20
# thin_pool_autoextend_percent = 20
Źródło: Link







