Linux: Kniha kouzel, vanilková příchuť 2.14 (15. července 2022)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

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ů

@vytvořit#1 (1)
sudo vgcreate nazev-skupiny /dev/fyzický-svazek [-v[v]]
@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
@vypsat (pro člověka/pro skript)#6
sudo vgs
@smazat#7
sudo lvremove nazev-skupiny
sudo vgremove nazev-skupiny
@aktivovat deaktivovanou skupinu#8 (2)
sudo vgchange --verbose --activate y 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]]
@vytvořit prokládaný logický oddíl#2 (4)
sudo lvcreate nazev-skupiny --name nazev-oddilu parametr --size nebo --extents --stripes počet-zařízení --stripesize 64 [-v[v]]
@vypsat (pro člověka/pro skript)#3
sudo lvs
@zvětšit (na velikost/relativně)#4 (5)
sudo lvextend nazev-skupiny/nazev-oddilu --size gibibajtůG [-v[v]]
sudo lvextend nazev-skupiny/nazev-oddilu --size +gibibajtůG [-v[v]] [--resizefs]
@zmenšit (na velikost/relativně)#5 (6)
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]]
@přesunout do jiné skupiny svazků#8 (7)
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

@vytvořit#1 (8)
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
@přepsat původní oddíl snímkem a snímek odstranit (nutné kopírování)#3 (9)
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í

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.
[BY-SA]

Veškerý obsah této stránky (text, obrázky, zdrojový kód) je možno upravovat a šířit pod podmínkami licence Creative Commons Attribution-ShareAlike 4.0 International. Upozorňuji, že uvedená licence vyžaduje uvedení seznamu autorů, licence a zdroje a poskytnutí stejné či kompatibilní licence k provedeným změnám, jsou-li nějaké. Příslušné údaje jsou dostupné na stránce „Přehled autorů“. Šíření obsahu bez těchto údajů nebo šíření upravené verze bez poskytnutí adekvátní licence k provedeným úpravám je pravděpodobně porušení licenčních podmínek a může být postihováno. Poskytování zdrojového kódu při šíření není touto licencí vyžadováno.

Pro nové verze, další informace, aktuální zdrojový kód a možnost se zapojit do projektu „Linux: Kniha kouzel“ navštivte jeho repozitář na GitHubu.