4.2. Diskové oddíly / LVM
Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022
do 1. března 2025 ve stavu dlouhodobé pasivní údržby;
nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným
projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel
pro novější verze linuxových operačních systémů,
kontaktujte autora nebo rovnou vytvořte odnož.
1. Úvod
Tato podkapitola se zabývá prací s LVM. LVM (logical volume management) je metoda rozložení oddílů na pevném disku, která má odstínit uživatele od fyzického rozložení dat a poskytnout nové možnosti, např. flexibilní rozložení jednoho oddílu přes několik fyzických disků nebo snadné přemísťování oddílů a změnu jejich velikosti, často i bez nutnosti restartu počítače.
2. Definice
2/1 Obecné definice
- Logický oddíl je v LVM obdoba běžného diskového oddílu (tzn. je možno ho naformátovat a používat k ukládání dat); na rozdíl od něj ale nemá pevné fyzické umístění na disku, jeho fyzické umístění je vymezené skupinou svazků, ve které je vytvořen. Logický oddíl LVM je dostupný pod cestou „/dev/skupina-svazků/název-oddílu“.
- Skupina svazků je v LVM neprázdná pojmenovaná skupina fyzických svazků k vytváření logických oddílů. Data každého logického oddílu se fyzicky nacházejí pouze na fyzických svazcích příslušných do dané skupiny.
- Fyzický svazek je v LVM blokové zařízení (celý disk nebo jeho oddíl), které je nastavené a naformátované k ukládání dat logických oddílů. Nemůže to být logický oddíl LVM.
- Normálně je každá skupina svazků aktivovaná, což znamená, že její logické oddíly jsou dostupné a je možné je připojit. Skupina svazků, jejíž fyzické svazky se nacházejí na výměnných médiích, se automaticky aktivuje při připojení posledního z nich. Aby však bylo možno tato média odpojit bez vypnutí systému, je nutno skupinu ručně deaktivovat, čímž její logické oddíly přestanou být dostupné.
- Logický snímek („LVM snapshot“) je (zpravidla dočasný) „klon“ logického oddílu, který při vytvoření sdílí umístění na disku s původním oddílem, ale LVM vytvářením kopií dat při zápisu (copy-on-write) způsobuje, že logický snímek se uživateli jeví jako samostatný oddíl. Nejčastěji se používá k vytvoření krátkodobé neměnné kopie jinak intenzivně zapisovaného diskového oddílu nebo k opakovanému vracení diskového oddílu do určitého výchozího stavu.
3. Zaklínadla
3/1 Fyzické svazky
@vytvořit z celého zařízení#1
sudo wipefs -a /dev/zařízení
sudo pvcreate /dev/zařízení [-v[v]]
@vytvořit z oddílu#2
sudo wipefs -a /dev/oddíl
sudo pvcreate /dev/oddíl [-v[v]]
@smazat#3
sudo pvremove /dev/zařízení-nebo-oddíl [-v[v]]
@zkontrolovat#4
sudo pvck /dev/zařízení-nebo-oddíl
@vypsat (pro člověka/pro skript)#5
sudo pvs
sudo pvs --noheadings | sed -E 's/^\s*(\S+)\s.*$/\1/'
@uvolnit všechno místo na fyzickém svazku#6
sudo pvmove /dev/zařízení-nebo-oddíl
3/2 Skupiny svazků
@deaktivovat skupinu#2
sudo vgchange --verbose --activate n nazev-skupiny
@přidat fyzický svazek do skupiny#3
sudo vgextend nazev-skupiny /dev/fyzický-svazek [-v[v]]
@odebrat fyzický svazek ze skupiny#4
sudo pvmove /dev/fyzický-svazek
sudo vgreduce nazev-skupiny /dev/fyzický-svazek
@přejmenovat#5
sudo vgrename nazev-skupiny novy-nazev-skupiny
@smazat#7
sudo lvremove nazev-skupiny
sudo vgremove nazev-skupiny
3/3 Logické oddíly
@vytvořit (velikost zadat: absolutně/v procentech velikosti skupiny/v procentech velikosti volného místa/všechno volné místo)#1 (3)
sudo lvcreate nazev-skupiny --name nazev-oddilu --size gibibajtůG [-v[v]] [/dev/fyzický-svazek]
sudo lvcreate nazev-skupiny --name nazev-oddilu --extents procenta%VG [-v[v]]
sudo lvcreate nazev-skupiny --name nazev-oddilu --extents procenta%FREE [-v[v]]
sudo lvcreate nazev-skupiny --name nazev-oddilu --extents 100%FREE [-v[v]]
sudo lvcreate nazev-skupiny --name nazev-oddilu parametr --size nebo --extents --stripes počet-zařízení --stripesize 64 [-v[v]]
sudo lvextend nazev-skupiny/nazev-oddilu --size gibibajtůG [-v[v]]
sudo lvextend nazev-skupiny/nazev-oddilu --size +gibibajtůG [-v[v]] [--resizefs]
sudo lvreduce nazev-skupiny/nazev-oddilu --size gibibajtůG [-v[v]]
sudo lvreduce nazev-skupiny/nazev-oddilu --size +gibibajtůG [-v[v]] [--resizefs]
@přejmenovat oddíl#6
sudo lvrename nazev-skupiny/nazev-oddilu nové-id-oddílu
@smazat oddíl/všechny oddíly ve skupině#7
sudo lvremove nazev-skupiny/nazev-oddilu [-v[v]]
sudo lvremove nazev-skupiny [-v[v]]
sudo lvcreate cíl-skupina --name cíl-název --size $(sudo lvs /dev/pův-skupina/pův-název --noheadings --nosuffix --units b -o size | sed -E 's/^\s*(\S+)\s*$/\1b/') [-v] &&
sudo dd if=/dev/pův-skupina/pův-název iflag=fullblock,skip_bytes of=/dev/cíl-skupina/cíl-název oflag=seek_bytes conv=nocreat,notrunc seek=1M skip=1M [status=progress] &&
sudo dd if=/dev/pův-skupina/pův-název iflag=fullblock,count_bytes count=1M of=temp.dat [status=progress] &&
sudo dd if=temp.dat iflag=fullblock,count_bytes count=1M of=/dev/cíl-skupina/cíl-název conv=notrunc,nocreat [status=progress] &&
sudo lvremove pův-skupina/pův-název [-v] [-y]
[sudo rm -v temp.dat &&]
3/4 Logické snímky
sudo lvcreate --snapshot --type snapshot --name id-snimku --size velikost-P [-v] /dev/skupina-svazků/puvodni-oddil
@zrušit (bez kopírování)#2
sudo lvremove /dev/skupina-svazků/id-snimku
sudo lvconvert --merge /dev/skupina-svazků/id-snimku
@zvětšit prostor pro logický snímek#4
sudo lvextend [-v] --size nová-velikost-P /dev/skupina-svazků/id-snimku
@kolik místa z logického snímku je již obsazeno? (pro člověka)#5
sudo lvs [/dev/skupina-svazku/nazev-snimku]
Údaj ve sloupci „Data%“ uvádí, kolik procent prostoru je již obsazeno.
3/5 Ostatní
@aktualizovat systémový přehled LVM podle připojených zařízení#1
sudo lvscan --mknodes
4. Instalace na Ubuntu
Pokud chcete používat LVM, musíte doinstalovat:
sudo apt-get install lvm2
5. Tipy a zkušenosti
- V případě změny velikosti oddílu v LVM je třeba samostatně změnit velikost souborového systému a samostatně velikost logického oddílu. Výjimkou je souborový systém „ext4“, u kterého je možné tyto operace sloučit použitím parametru „--resizefs“.
- LVM lze použít i na vyjímatelných médiích (např. flash discích); v takovém případě je ale před fyzickým odpojením média potřeba deaktivovat příslušnou skupinu svazků. Je-li skupina svazků rozložena přes více takových médií, automaticky se aktivuje při připojení posledního z nich.
- Při vytváření velkého logického oddílu přes několik SSD disků doporučuji vytvořit raději prokládaný oddíl než normální; sice tím přijde o cca 10% kapacity, ale zato se rozsáhlé zápisy budou rovnoměrně rozkládat mezi všechny disky, což by u SSD disků mělo zvýšit jejich životnost.
- LVM poskytuje svůj vlastní interpret příkazové řádky, který nabízí pouze příkazy související s LVM (bez zadávání „sudo“). Spustíte ho příkazem „sudo lvm“.
- Pokud dojde k zaplnění prostoru pro logický snímek, ten se tím zničí, přijdete o zápisy na něj a budete ho muset smazat. Pokud nechcete, aby k tomu došlo, je třeba pro logický snímek vyhradit cca 110% až 125% velikosti původního oddílu (100% při experimentech nestačilo). V případě zaplnění však nepřijdete o žádná data na původním oddílu.
- Název skupiny svazků nebo logického oddílu smí obsahovat pouze malá a velká písmena anglické abecedy, číslice a znaky „.“, „-“, „+“ a „_“. Název nesmí začínat pomlčkou a mnoho názvů je vyhrazených (viz „man 8 lvm“).
6. Další zdroje informací
- Seriál Logical Volume Manager
- Wikipedie: Logical Volume Management
- LVM Ubuntu Tutorial (anglicky)
- man lvm (anglicky)
- Arch Wiki: LVM (anglicky)
- Balíček Bionic: lvm2 (anglicky)
- YouTube: Lesson 20 Managing LVM (anglicky)
- YouTube: Combining Drives Together (anglicky)
- YouTube: LVM snapshots (anglicky)
7. Zákulisí kapitoly
V této verzi kapitoly chybí:
- nic
Tato kapitola záměrně nepokrývá:
- nic
1 Skupiny tvořené fyzickými svazky na více fyzických discích zvyšují pravděpodobnost ztráty dat, protože když havaruje kterýkoliv zúčastněný disk, přijdete o všechna data v celé skupině svazků. Proto pokud nepotřebujete slučovat úložný prostor na více fyzických discích, preferujte vytváření samostatné skupiny svazků pro fyzické svazky na každém fyzickém disku.
2 Tento příkaz obvykle není potřeba, protože po připojení zařízení nebo startu systému se nalezené skupiny obvykle aktivují automaticky.
3 Pro přesnější určení rozměru můžete zadat velikost oddílu v mebibajtech místo gibibajtů (místo přípony „G“ uveďte příponu „M“), ale v takovém případě počítejte s možností, že příkaz zadanout hodnotu může zaokrouhlit o několik mebibajtů nahoru.
4 Nechť N je uvedený „počet-zařízení“. Velikost prokládaného oddílu se rozdělí na N stejných dílů a každý se umístí na jeden fyzický svazek ze zadané skupiny svazků. Pokud se některý z dílů na svůj fyzický svazek nevejde, všechny díly budou zmenšeny společně, aby se tam vešel. Kapacita vytvořeného oddílu bude cca 90% součtu místa zabraného všemi díly prokládaného oddílu (prokládání má zřejmě svoji režii). Příklad: máte ve skupině dva fyzické svazky 2G a jeden 1G a pokusíte se vytvořit prokládaný svazek o velikosti 5G; příkaz ho rozdělí na tři díly o velikosti 1,66G; jenže na třetí fyzický svazek se díl nevejde, tak se všechny zmenší na 1G. Výsledný oddíl tedy zabere 3G (na prvním i druhém svazku zůstane 1G volný) a kapacita nově vzniklého oddílu bude cca 2765M.
5 Volba --resizefs je podporována pouze pro některé typy systému souborů, zejména pro ext4.
6 Pozor! Pokud je na zmenšovaném oddíle souborový systém, musíte ho před zmenšením oddílu zmenšit na odpovídající velikost, jinak dojde ke ztrátě dat! To neplatí, použijete-li zde parametr --resizefs.
7 Přesouvaný oddíl nesmí být připojený a v aktuálním adresáři si toto zaklínadlo potřebuje vytvořit dočasný soubor „temp.dat“. Pokud vám tento název nevyhovuje, můžete použít jiný.
8 „velikost-P“ je velikost nově přiděleného prostoru pro alokaci kopií dat vzniklých při zápisu do původního oddílu nebo do logického snímku.
9 Pokud je původní oddíl připojený nebo jinak využívaný, nedojde k nakopírování a sloučení ihned, ale až při příští aktivaci logického oddílu (tzn. zpravidla po restartu systému).
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.