6.2.
Diskové oddíly / LVM
Vývoj vanilkové příchuti Linuxu: Knihy kouzel byl 1. března 2025
ukončen. Tento text je zachován jako historický, ale chyby již nejsou
opravovány. Odnože projektu pod kompatibilní licencí jsou vítány.
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).