Toto je úplný průvodce LVM (Logical Volume Management) v Linuxu pro začátečníky.
V tomto tutoriálu se naučíte koncept LVM, jeho součásti a proč byste jej měli používat.
Neomezím se pouze na teoretické vysvětlení. Ukážu také praktické příklady pro vytváření a správu LVM v Linuxu.
Stručně řečeno, poskytnu vám všechny potřebné informace, které budete potřebovat, abyste mohli začít pracovat s LVM v reálném světě.
Co je LVM v Linuxu?
LVM je zkratka pro Logical Volume Management. Toto je alternativní metoda správy úložných systémů než tradiční metoda založená na oddílech. V LVM místo vytváření oddílů vytváříte logické svazky a pak můžete tyto svazky stejně snadno připojit k systému souborů jako oddíly disku.
Jedinou výjimkou z předchozího prohlášení je, že pro/boot nemůžete používat logické svazky . Je to proto, že GRUB (nejběžnější bootloader pro Linux) nemůže číst z logických svazků. Známá alternativa ke GRUB, systemd-boot na druhou stranu čte pouze souborové systémy vfat, takže ani to nebude fungovat. Součásti LVM
LVM má tři hlavní součásti:
- Fyzické objemy
- Skupiny svazků
- Logické svazky
Přestože se seznam skládá ze tří součástí, pouze dvě z nich jsou přímými protějšky systému dělení. Zaznamenává to následující tabulka.
| Systém dělení disku | LVM |
|---|---|
| Oddíly | Logické svazky |
| Disky | Skupiny svazků |
Fyzické svazky nemají žádný přímý protějšek, ale o tom budu brzy mluvit.
Proč používat LVM?
Hlavní výhodou LVM je, jak snadné je změnit velikost svazku nebo skupiny svazků. Abstrahuje všechny ošklivé části (oddíly, surové disky) a ponechává nám centrální úložiště, se kterým můžeme pracovat.
Pokud jste někdy zažili hrůzu změny velikosti diskového oddílu, měli byste použít LVM.
Laboratorní příprava na praktické cvičení
Tento článek není jen teorie. Po cestě vám ukážu skutečné příklady příkazů a nejlepší způsob, jak se něco naučit, je pracovat s tím, prakticky. K tomu vám doporučuji použít virtuální stroj.
Abych vám s tím pomohl, připravil jsem jednoduchý soubor Vagrantfile, který můžete použít ke spuštění velmi lehkého virtuálního stroje s VirtualBoxem. Tento virtuální stroj má tři další disky, které vy i já můžeme použít pro níže uvedené příklady příkazů.
Vytvořte adresář někde ve vašem souborovém systému a uložte do něj následující soubor s názvem Vagrantfile .
Vagrant.configure "2" do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "lvm"
3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
config.vm.provider :virtualbox do |machine|
machine.memory = 1024
machine.cpus = 1
machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
# vi: set ft=ruby
Nebo pokud chcete, můžete použít wget nebo curl stáhnout soubor z mé podstaty.
wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile Ujistěte se, že máte nainstalovaný Vagrant a VirtualBox.
Jakmile je soubor Vagrantfile na svém místě, nastavte proměnnou prostředí VAGRANT_EXPERIMENTAL na disks .
export VAGRANT_EXPERIMENTAL=disks Nakonec spusťte virtuální počítač pomocí následujícího příkazu (ujistěte se, že jste ve stejném adresáři jako soubor Vagrantfile):
vagrant up
Jakmile je stroj spuštěn, můžete použít vagrant ssh do něj SSH a spusťte ukázkové příkazy z tohoto článku.
Nezapomeňte spustit vagrant destroy po dokončení ze stejného adresáře jako soubor Vagrantfile.
Instalace LVM
Než budete moci použít některý z příkazů, musíte nainstalovat lvm2 balík. Toto by mělo být předinstalován ve většině moderních distribucí, zejména v těch založených na Ubuntu. Ale přesto jsem to musel zmínit, než jsem se pustil dál. Chcete-li nainstalovat lvm2 , podívejte se do dokumentace vaší distribuce.
Ruky s LVM
Pro tento praktický návod jsem sestavil virtuální stroj s 40G kořenovým úložištěm (nedůležité) a třemi externími disky o velikosti 5G. Velikost těchto disků je libovolná.
example@unixlinux.online:~$ lsblk -o name,size,fstype
NAME SIZE FSTYPE
loop0 55.5M squashfs
loop1 32.3M squashfs
loop2 70.4M squashfs
sda 40G
└─sda1 40G ext4
sdb 10M iso9660
sdc 5G
sdd 5G
sde 5G
Jak můžete vidět, zařízení, která budu používat, jsou sdc , sdd a sde .
Pamatujete si, jak jsem vám řekl, že LVM má tři hlavní součásti?
- Fyzické objemy
- Skupiny svazků
- Logické svazky
Je čas je vidět jednoho po druhém.
1. Fyzické objemy
Úplně první věc, kterou potřebujete vědět o LVM, jsou fyzické svazky. Fyzické objemy jsou suroviny nebo stavební bloky, které se používají k dosažení abstrakce, kterou jsou logické objemy. Jednodušeji řečeno, fyzické svazky jsou logickou jednotkou systému LVM.
Fyzický svazek může být cokoli, nezpracovaný disk nebo diskový oddíl. Vytvoření a inicializace fyzického svazku jsou stejné. Obojí znamená, že pouze připravujete stavební bloky (tj. oddíly, disky) pro další operace. To bude za chvíli jasnější.
Nástroje: Všechny nástroje, které spravují fyzické svazky, začínají písmeny pv pro P fyzikální V světlo. Např. pvcreate , pvchange , pvs , pvdisplay atd.
Vytváření fyzických svazků
Fyzický svazek můžete vytvořit pomocí surového disku bez oddílů nebo samotných oddílů.
Jak jsem již zmínil, k mému virtuálnímu počítači jsou připojeny tři externí disky, začněme /dev/sdc .
Používáme pvcreate příkaz k vytvoření fyzického svazku. Stačí mu předat název zařízení a nic jiného.
sudo pvcreate /dev/sdc Měli byste vidět něco takového:-
example@unixlinux.online:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
Dále budu rozdělovat /dev/sdd na stejné části. Použijte jakýkoli nástroj, cfdisk , parted , fdisk atd., existuje mnoho nástrojů k dosažení tohoto úkolu.
example@unixlinux.online:~$ lsblk -o name,size,fstype | grep sdd
sdd 5G
├─sdd1 2.5G
└─sdd2 2.5G
Nyní můžete rychle vytvořit dva další fyzické svazky z těchto dvou oddílů v jediném kroku, předat obě tato zařízení pvcreate najednou.
sudo pvcreate /dev/sdd1 /dev/sdd2 Podívejte se:-
example@unixlinux.online:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created. Výpis dostupných fyzických svazků
Existují tři příkazy, které můžete použít k získání seznamu dostupných fyzických nosičů, pvscan , pvs a pvdisplay . Obecně těmto příkazům nemusíte nic předávat.
pvscan :-
example@unixlinux.online:~$ sudo pvscan
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdd1 lvm2 [2.50 GiB]
PV /dev/sdd2 lvm2 [<2.50 GiB]
Total: 3 [<10.00 GiB] / in use: 0 [0 ] / in no VG: 3 [<10.00 GiB]
pvs :-
example@unixlinux.online:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 lvm2 --- <2.50g <2.50g
pvdisplay :-
example@unixlinux.online:~$ sudo pvdisplay
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
"/dev/sdd1" is a new physical volume of "2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
"/dev/sdd2" is a new physical volume of "<2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2
VG Name
PV Size <2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB Jak můžete vidět, spolu s pouhým výpisem fyzických svazků vám tyto příkazy také poskytují spoustu dalších informací o těchto svazcích.
Odebrání fyzického svazku
Fyzický svazek můžete odebrat pomocí pvremove příkaz. Stejně jako pvcreate , stačí předat zařízení (která jsou inicializována jako fyzické svazky) pvremove příkaz.
Pro ukázku odstraním /dev/sdd2 ze seznamu.
sudo pvremove /dev/sdd2 Výstup by měl být shodný s tímto:-
example@unixlinux.online:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Nyní uveďte fyzické svazky pomocí sudo pvs
example@unixlinux.online:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 už tu není.
2. Skupiny svazků
Skupiny svazků jsou kolekce fyzických svazků. Je to další úroveň abstrakce v LVM. Skupiny svazků jsou úložný fond, který kombinuje úložnou kapacitu více nezpracovaných úložných zařízení.
Nástroje: Všechny názvy obslužných programů skupiny disků začínají vg , znamená V olume G roup, např. vgcreate , vgs , vgrename atd.
Vytváření skupin svazků
Skupiny svazků se vytvářejí pomocí vgcreate příkaz. První argument pro vgcreate je název, který chcete přidělit této skupině svazků, a zbytek je seznam fyzických svazků, které budou zálohovat fond úložiště.
sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1 Příklad:-
example@unixlinux.online:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Volume group "lvm_tutorial" successfully created Výpis skupin svazků
Výpis skupin nosičů je podobný výpisu fyzických nosičů, můžete použít různé příkazy s různou úrovní výřečnosti, vgdisplay , vgscan a vgs .
Osobně preferuji vgs příkaz sudo vgs
example@unixlinux.online:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan :-
example@unixlinux.online:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay :-
example@unixlinux.online:~$ sudo vgdisplay
--- Volume group ---
VG Name lvm_tutorial
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 7.49 GiB
PE Size 4.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 7.49 GiB
VG UUID LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1 Výpis fyzických svazků připojených ke skupině svazků
Pomocí následujícího příkazu můžete vypsat všechny fyzické svazky, které jsou připojeny ke konkrétní skupině svazků:-
sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name Příklad:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1 Můžete také získat počet fyzických svazků.
sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count Příklad:-
example@unixlinux.online:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
#PV
3 Rozšíření skupiny svazků
Rozšíření skupiny disků znamená přidání dalších fyzických disků do skupiny disků. Chcete-li tak učinit, vgextend je použit příkaz. Syntaxe je jednoduchá:-
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Pojďme rozšířit náš lvm_tutorial svazku podle /dev/sdd2 .
sudo vgextend lvm_tutorial /dev/sdd2 Zaměřte se na výstup:-
example@unixlinux.online:~$ sudo vgextend lvm_tutorial /dev/sdd2
Physical volume "/dev/sdd2" successfully created.
Volume group "lvm_tutorial" successfully extended
V sekci fyzického svazku jsme skončili odstraněním /dev/sdd2 jako fyzický svazek, ale oddíl nebo nezpracovaný disk musí být inicializován jako fyzický svazek, jinak jej LVM nebude moci spravovat jako součást skupiny svazků. Takže vgextend je připraven /dev/sdd2 před přidáním do skupiny svazků.
Nyní pro jistotu vypište fyzické svazky připojené k této skupině svazků.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name Výstup:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
/dev/sdd2
/dev/sdd2 je nyní v seznamu podle očekávání.
Snížení skupiny svazků
Stejně jako rozšíření skupiny svazků znamená přidání dalšího fyzického svazku, jeho zmenšení znamená odebrání jednoho nebo více fyzických svazků.
Používáme vgreduce příkaz k tomu. Obecná syntaxe je následující:-
vgreduce <vgname> <physical_volume1> <physical_volume2> ....
Odeberme fyzické svazky /dev/sdc a /dev/sdd1 .
sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1 Příklad:-
example@unixlinux.online:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Removed "/dev/sdc" from volume group "lvm_tutorial"
Removed "/dev/sdd1" from volume group "lvm_tutorial" Pokud má skupina svazků nějaké aktivní logické svazky, nebudete ji moci takto zmenšit. Znovu vypište fyzické svazky.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name Výstup:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdd2 Tyto dva fyzické svazky jsou pryč.
Nyní v zájmu zbytku tohoto článku přidejte tyto dva fyzické svazky zpět.
sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1 Odebrání skupiny svazků
Logický svazek můžete odstranit pomocí vgremove příkaz.
sudo vgremove lvm_tutorial Tento příkaz hned nespouštějte, jinak byste museli znovu vytvořit skupinu svazků. Pokud si to chcete vyzkoušet, spusťte to na samém konci tohoto článku.
3. Logické svazky
To je to, s čím budete většinou pracovat. Logický svazek je jako oddíl, ale místo toho, aby seděl na nezpracovaném disku, je umístěn nad skupinou svazků. Můžete,
- Naformátujte logický svazek pomocí libovolného souborového systému.
- Připojte jej kamkoli do souborového systému, který chcete.
V této sekci se naučíte,
- Jak vytvořit logické svazky.
- Běžné operace na logickém svazku.
- Změna velikosti logického svazku.
- Odebrání logického svazku.
Nástroje: Všechny názvy obslužných programů skupiny disků začínají lv , znamená L ogické V světlo. např. lvcreate , lvs , lvreduce atd.vgcreate , vgs , vgrename atd.
Vytváření logických svazků
Logické svazky se vytvářejí pomocí lvcreate příkaz. Běžně používaná syntaxe vypadá následovně,
sudo lvcreate -L <size> -n <lvname> <vgname> Dovolte mi to pro vás rozebrat:-
-Lvolba je pro velikost nového logického svazku, můžete použít libovolné celé číslo s "GB", "MB" nebo "KB" na konci. Např. "1 GB".-nmožnost je pojmenovat tento logický svazek.- Nakonec mu musíte předat název skupiny svazků, které bude tento logický svazek součástí. Při poskytování logického svazku s velikostí se tedy ujistěte, že skupina svazků má k dispozici místo.
Spusťte na virtuálním počítači následující příkaz:-
sudo lvcreate -L 5GB -n lv1 lvm_tutorial Příklad výstupu:-
example@unixlinux.online:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Logical volume "lv1" created. Běžné operace na logickém svazku
Jak jsem již řekl dříve, souborový systém můžete umístit na logický svazek a také jej připojit kamkoli na souborový systém.
Po vytvoření najdete logický svazek v /dev/<vgname>/<lvname> cesta. Například v našem případě bude svazek v /dev/lvm_tutorial/lv1 .
example@unixlinux.online:~$ ls -l /dev/lvm_tutorial/lv1
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0 Nyní jej můžete použít jako jakýkoli oddíl. Naformátujte jej pomocí ext4,
sudo mkfs.ext4 /dev/lvm_tutorial/lv1
Připojte jej na nějaké místo ve vaší aktuální adresářové struktuře, například /mnt ,
sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt Změna velikosti logického svazku
Logický svazek můžete rozšířit pomocí lvextend a zmenšete jeho velikost pomocí lvreduce příkaz. Nebo můžete použít jediný příkaz lvresize ke splnění obou úkolů.
Nejprve se podívejme, zda ve skupině svazků zbývá nějaké místo.
sudo vgs -S vgname=lvm_tutorial -o vg_free Výstup:-
example@unixlinux.online:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
VFree
<4.99g Podle výstupu mi zbývá nějaké místo, takže zvětšíme velikost svazku o 2 GB.
Pamatujte, že logický svazek je stále připojen na /mnt .
example@unixlinux.online:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime) Pro změnu velikosti svazku použijte následující příkaz:-
sudo lvresize -L +2GB lvm_tutorial/lv1 Obecná syntaxe je asi tato:-
lvresize -L [+|-][Size] <vgname>/<lvname>
Symbol + nebo - za -L záleží na tom, zda se snažíte zvětšit nebo zmenšit objem.
Poté, co se velikost svazku zvětší, musí být také změněna velikost souborového systému. Pro ext4 je použit příkaz resize2fs .
sudo resize2fs /dev/lvm_tutorial/lv1 Výstup:-
example@unixlinux.online:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long. Ne všechny souborové systémy podporují horkou změnu velikosti, Ext4 a XFS jsou jedny z podporovaných. Doporučuji, abyste se jich drželi. Zmenšení logického svazku je o něco složitější úkol a o tom zde v tomto článku mluvit nebudu. Zmenšuji velikost tohoto svazku o 1 GB.
Odebrání logického svazku
Logický svazek odstraníte pomocí lvremove příkaz. Syntaxe příkazu je následující:-
lvremove <vgname>/<lvname> Spusťte tento příkaz na virtuálním počítači:-
sudo lvremove lvm_tutorial/lv1 Výstup:-
example@unixlinux.online:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
Logical volume "lv1" successfully removed
Existuje mnoho dalších operací proveditelných na logických svazcích, fyzických svazcích a skupinách svazků, ale není možné to vše napsat do jednoho článku.
Nechal jsem vám ještě jeden disk /dev/sde ve virtuálním stroji. Použijte to, procvičte si některé příkazy z tohoto článku, vytvořte novou skupinu svazků, rozšiřte stávající, prostě procvičte.
Doufám, že tento článek byl pro vás užitečný, pokud byste se o tom chtěli v budoucnu dozvědět více, dejte mi vědět v sekci komentářů níže.