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á.
[email protected]:~$ 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:-
[email protected]:~$ 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.
[email protected]:~$ 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:-
[email protected]:~$ 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
:-
[email protected]:~$ 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
:-
[email protected]:~$ 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
:-
[email protected]:~$ 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:-
[email protected]:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Nyní uveďte fyzické svazky pomocí sudo pvs
[email protected]:~$ 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:-
[email protected]:~$ 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
[email protected]:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan
:-
[email protected]:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay
:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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:-
-L
volba 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".-n
mož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:-
[email protected]:~$ 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
.
[email protected]:~$ 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:-
[email protected]:~$ 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
.
[email protected]:~$ 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:-
[email protected]:~$ 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:-
[email protected]:~$ 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.