Skip to content

Latest commit

 

History

History
231 lines (167 loc) · 14 KB

File metadata and controls

231 lines (167 loc) · 14 KB

LVM

!Štítky: {tematický okruh}{systém}{LVM} !OblíbenáZaklínadla: !ÚzkýRežim: zap

Ú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.

Definice

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.

!ÚzkýRežim: vyp

Zaklínadla

Fyzické svazky

# vytvořit z celého zařízení
sudo wipefs -a {/dev/zařízení}
sudo pvcreate {/dev/zařízení} [-v[v]]

# vytvořit z oddílu
sudo wipefs -a {/dev/oddíl}
sudo pvcreate {/dev/oddíl} [-v[v]]

# smazat
sudo pvremove {/dev/zařízení-nebo-oddíl} [-v[v]]

# zkontrolovat
sudo pvck {/dev/zařízení-nebo-oddíl}

# vypsat (pro člověka/pro skript)
sudo pvs
sudo pvs --noheadings | sed -E 's/^\s*(\S+)\s.*$/\1/'

# uvolnit všechno místo na fyzickém svazku
sudo pvmove {/dev/zařízení-nebo-oddíl}

Skupiny svazků

# vytvořit
// 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.
sudo vgcreate {nazev-skupiny} {/dev/fyzický-svazek}... [-v[v]]

# deaktivovat skupinu
sudo vgchange --verbose --activate n {nazev-skupiny}

# přidat fyzický svazek do skupiny
sudo vgextend {nazev-skupiny} {/dev/fyzický-svazek}... [-v[v]]

# odebrat fyzický svazek ze skupiny
sudo pvmove {/dev/fyzický-svazek}
sudo vgreduce {nazev-skupiny} {/dev/fyzický-svazek}

# přejmenovat
sudo vgrename {nazev-skupiny} {novy-nazev-skupiny}

# vypsat (pro člověka/pro skript)
sudo vgs
?

# smazat
sudo lvremove {nazev-skupiny}
sudo vgremove {nazev-skupiny}

# aktivovat deaktivovanou skupinu
// Tento příkaz obvykle není potřeba, protože po připojení zařízení nebo startu systému se nalezené skupiny obvykle aktivují automaticky.
sudo vgchange --verbose --activate y {nazev-skupiny}

Logické oddíly

# vytvořit (velikost zadat: absolutně/v procentech velikosti skupiny/v procentech velikosti volného místa/všechno volné místo)
// 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.
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
// 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.
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)
sudo lvs
?

# zvětšit (na velikost/relativně)
// Volba --resizefs je podporována pouze pro některé typy systému souborů, zejména pro ext4.
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ě)
// 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.
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
sudo lvrename {nazev-skupiny}/{nazev-oddilu} {nové-id-oddílu}

# smazat oddíl/všechny oddíly ve skupině
sudo lvremove {nazev-skupiny}/{nazev-oddilu} [-v[v]]
sudo lvremove {nazev-skupiny} [-v[v]]

# přesunout do jiné skupiny svazků
// 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ý.
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 &&]

Logické snímky

# vytvořit
// „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.
sudo lvcreate --snapshot --type snapshot --name {id-snimku} --size {velikost-P} [-v] /dev/{skupina-svazků}/{puvodni-oddil}

# zrušit (bez kopírování)
sudo lvremove /dev/{skupina-svazků}/{id-snimku}

# přepsat původní oddíl snímkem a snímek odstranit (nutné kopírování)
// 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).
sudo lvconvert --merge /dev/{skupina-svazků}/{id-snimku}

# zvětšit prostor pro logický snímek
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)
sudo lvs [/dev/{skupina-svazku}/{nazev-snimku}]
!: Údaj ve sloupci „Data%“ uvádí, kolik procent prostoru je již obsazeno.

Ostatní

# aktualizovat systémový přehled LVM podle připojených zařízení
sudo lvscan --mknodes

Instalace na Ubuntu

Pokud chcete používat LVM, musíte doinstalovat:

*# *
sudo apt-get install lvm2

!ÚzkýRežim: zap

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“).

Další zdroje informací

Zákulisí kapitoly

V této verzi kapitoly chybí:

!KompaktníSeznam:

  • nic

Tato kapitola záměrně nepokrývá:

!KompaktníSeznam:

  • nic

!ÚzkýRežim: vyp