Jak vytvořit odkládací soubor v Linuxu

Potřebujete přidat nebo zvětšit odkládací prostor na vašem Linuxovém počítači? Nemusíte se trápit s vytvářením diskových oddílů. Ukážeme vám jednoduchý způsob, jak si přizpůsobit odkládací prostor dle vašich potřeb.

Odkládací soubory versus odkládací oddíly

Existuje několik situací, kdy může být nutné navýšit či přidat swapovací prostor na vašem linuxovém systému.

  • Možná váš swapovací prostor je často plný nebo blízko svého limitu.
  • Při instalaci systému jste mohli nechtěně vynechat možnost vytvoření swapu.
  • Původně jste se mohli rozhodnout, že s daným množstvím operační paměti (RAM) swap nepotřebujete, a nyní jste změnili názor.
  • Někdy můžete zdědit systém bez swapu z neznámých důvodů.

Snadným řešením je přidání odkládacího souboru. Jedná se o speciální soubor, který je předem alokován a vyhrazen pro swap. Tento soubor pracuje společně s existujícím swapem, ať už jde o soubor či oddíl.

Dříve byl výkon swap souboru oproti swap oddílu nižší. S vylepšením mechanických disků a optimalizací funkcí swapu v Linuxu, tento rozdíl již neplatí. Některé distribuce Linuxu nyní dokonce vytvářejí odkládací soubory jako výchozí řešení.

Swap není jen prostředek k uvolnění paměti RAM. Je to klíčová součást správného fungování systému. Bez swapu je pro jádro obtížné efektivně spravovat paměť. Nyní se podíváme na snadný způsob, jak přidat odkládací prostor.

Důležité informace před začátkem: Btrfs a SSD

Je zde pár věcí, na které bychom rádi upozornili.

Souborový systém Btrfs má specifika ohledně odkládacích souborů. V minulosti vznikal konflikt mezi copy-on-write funkcí Btrfs a fungováním swap souborů. Některé funkce, na kterých swap soubory závisely, nebyly implementovány a určité předpoklady o číslování bloků v swap souborech neplatily u Btrfs. Kvůli těmto problémům nebyly swap soubory podporovány.

Od jádra 5.0 lze používat swap soubory v souborových systémech Btrfs, pokud splňují následující podmínky:

  • Nesmějí používat copy-on-write (NOCOW).
  • Nesmějí být komprimované.
  • Nesmí zasahovat na více pevných disků.

Většina uživatelů však používá výchozí souborový systém ext4, takže se jich to netýká.

Když se objevily SSD disky (Solid-State Drives), panovaly obavy ohledně jejich použití v situacích s častým zápisem do souborového systému. Lidé byli varováni před umísťováním swapu na SSD, a dokonce se měli vyhýbat i logování systému na SSD.

Dnes je toto mnohem menší problém a většina SSD má životnost, která přesahuje životnost většiny počítačů. Swap soubor na SSD bude mít mnohem vyšší výkon než swap oddíl na mechanickém disku.

Kontrola stávajícího odkládacího prostoru

Než začneme, zkontrolujme, jaký swapovací prostor je na vašem počítači k dispozici. Můžeme to zjistit dvěma způsoby. Použijeme oba. Příkaz `free` zobrazí použitou a volnou paměť. Volba `-h` (human-readable) zajistí, že se hodnoty paměti zobrazí ve srozumitelných jednotkách.

free -h

Výstup z příkazu `free` ukazuje, že na tomto počítači není swap nakonfigurován.

Když se bavíme o swapu, často se objeví i téma RAM. Je důležité si uvědomit, že volná RAM je v tomto případě 237 MB. Nezaměňujte to s celkovou dostupnou pamětí RAM. Tuto hodnotu udává údaj „available“, který je 881 MB.

Linux používá volnou RAM pro vlastní účely, jako je ukládání souborů do mezipaměti a vyrovnávací paměti jádra. Množství paměti RAM pro toto vyhrazené udává „buff/cache“, což je 871 MB. Tato paměť je však stále považována za dostupnou. Obsah „buff/cache“ RAM může být okamžitě uvolněn a využit libovolnou aplikací, která potřebuje paměť.

Dalším způsobem, jak ověřit dostupnost swapu, je příkaz `swapon`. Volba `–show` neprovádí žádné změny v swapu vašeho počítače. Pouze zobrazuje statistiky.

swapon --show

Pokud příkaz nevygeneruje žádný výstup, znamená to, že swap není nakonfigurován.

Pokud tyto příkazy odhalí, že již máte swap, měli byste jeho velikost vzít v úvahu při rozhodování o velikosti swap souboru, který se chystáte vytvořit.

Kolik swap prostoru potřebuji?

Tradiční odpověď zněla „dvojnásobek velikosti RAM“. To se však používalo v době, kdy počítače měly velmi málo RAM. S poklesem cen RAM a s rostoucími nároky programů a her se i specifikace PC přizpůsobily. Dnes není neobvyklé mít domácí PC s 32 GB RAM. V takovém případě byste rozhodně neměli vyčlenit 64 GB diskového prostoru pro swap. To by bylo přehnané.

Množství swapu, které potřebujete, je žhavé téma, srovnatelné s debatou o nejlepším textovém editoru. Jedna z nejrozumnějších diskuzí na toto téma se nachází v Ubuntu Swap FAQ. Nabízí stručný a rozumný přístup (i když si mnoho lidí špatně vykládá, jak swappiness v Linuxu funguje). Naleznete zde také praktickou tabulku, která doporučuje velikost swapu pro různá množství RAM a pro to, zda počítač uspáváte nebo ne.

Dobrá zpráva je, že nezáleží na tom, jakou hodnotu zvolíte. Swap soubor lze vždy smazat a nahradit větším či menším, nebo můžeme přidat další swap soubor.

Vyberte si velikost swap souboru z tabulky a nějakou dobu jej používejte. Sledujte využití swapu. Pokud bude třeba doladit, lze to snadno provést. Se swap soubory je to otázka pár minut. Srovnejte to s úpravou oddílů na živém linuxovém systému.

Vytvoření swap souboru

Neměli byste používat příkaz `fallocate` pro vytvoření swap souboru. Z manuálové stránky pro `swapon`:

The swap file implementation in the kernel expects to be able to write to
the file directly, without the assistance of the file system.

This is a problem on files with holes or on copy-on-write files on file
systems like Btrfs. Commands like cp(1) or truncate(1) create files with
holes. These files will be rejected by swapon.

Preallocated files created by fallocate(1) may be interpreted as files
with holes too depending of the filesystem. Preallocated swap files are
supported on XFS since Linux 4.18.

The most portable solution to create a swap file is to use dd(1) and
/dev/zero.

Ačkoliv je `fallocate` rychlejší, pro vytvoření swap souboru použijeme `dd`. Stroj použitý pro tento článek má 2 GB RAM. Vytvoříme swap soubor o velikosti 1 GB.

Parametry jsou:

  • `if`: Vstupní soubor. V tomto případě používáme `/dev/zero`, který generuje proud nulových bajtů.
  • `of`: Výstupní soubor. V kořenovém adresáři vytvoříme soubor s názvem `swapfile`.
  • `bs`: Velikost bloku v bajtech. Určuje, kolik bajtů se má najednou přečíst ze vstupního souboru a zapsat do výstupního souboru.
  • `count`: Počet bloků ke čtení a zápisu. Vynásobením tohoto čísla s hodnotou `bs` získáme velikost souboru.
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Při vytváření souboru se zobrazí statistiky.

Můžeme vidět počet bloků (záznamů), které byly zapsány do souboru, velikost souboru, čas potřebný k vytvoření souboru a efektivní rychlost přenosu dat.

Příkazem `ls` zobrazíme soubor v kořenovém adresáři:

ls /

Příprava swap souboru

Před použitím musíme swap soubor připravit příkazem `mkswap`. Pro `mkswap` nemusíme uvádět žádné parametry kromě cesty a názvu souboru:

sudo mkswap /swapfile

Soubor je nyní připraven k použití jako swap soubor. Všimněte si varování ohledně oprávnění k souboru. Budeme je muset změnit, aby měl root jako jediný práva číst a zapisovat do swap souboru.

Použití swap souboru

Výchozí oprávnění jsou příliš liberální. Musíme je omezit, aby mohl swap soubor používat pouze root. Pro změnu oprávnění souboru použijeme příkaz `chmod`:

sudo chmod 600 /swapfile

Tím odebereme veškerá oprávnění členům skupiny souboru a ostatním. Vlastníkovi souboru, rootovi, ponecháme práva číst a zapisovat.

Musíme pomocí příkazu `swapon` dát Linuxu vědět, že je k dispozici nový swap soubor k použití. Potřebujeme pouze zadat cestu a název souboru:

sudo swapon /swapfile

Swap soubor je nyní aktivní.

Přidání swap souboru do fstab

Abyste zajistili, že váš swap soubor bude dostupný i po restartu, musíte jej přidat do souboru `/etc/fstab`. Můžete použít libovolný textový editor, ale ukážeme to pomocí grafického editoru Gedit.

sudo gedit /etc/fstab

Řádek, který musíme přidat na konec souboru, vypadá takto:

/swapfile    none    swap    sw    0    0

Jednotlivá pole znamenají:

  • Systém souborů: Cesta a název swap souboru.
  • Bod připojení: Soubor není připojen jako souborový systém, takže položka je „none“.
  • Typ: Toto je „swap“.
  • Možnosti: Při bootování se z jednoho spouštěcího skriptu zavolá `swapon -a` (spuštění všech zařízení označených jako swap). Tato volba říká Linuxu, aby s touto položkou zacházel jako se swapovacím prostředkem, který by měl být spravován příkazem `swapon -a`. Často se zde používá „defaults“, protože někteří uživatelé Linuxu se mylně domnívají, že je toto pole ignorováno. Ale není tomu tak. Proto má smysl použít správnou možnost.
  • Dump: Lze nastavit na nulu. V tomto případě je irelevantní.
  • Pass: Lze nastavit na nulu. V tomto případě je irelevantní.

Uložte změny a zavřete editor.

Kontrola využití swapu

Pro ověření využití swap prostoru použijte příkaz `swapon` s volbou `–show`:

swapon --show

Sloupce znamenají:

  • Název: Název swap oddílu nebo swap souboru.
  • Typ: Typ swapovacího zařízení.
  • Velikost: Velikost swapovacího zdroje.
  • Used: Množství použitého swap prostoru.
  • Prio: Priorita tohoto swapovacího zdroje.

Priorita swap prostoru

Každému swapovacímu prostoru je přiřazena priorita. Pokud ji nezadáte, bude přidělena automaticky. Automaticky přiřazené priority jsou vždy záporné. Rozsah priorit, které lze ručně přiřadit, je 0 až 32767. Swapovací prostředky s vyšší prioritou se používají jako první.

Pokud má více swap prostorů stejnou prioritu, jsou používány střídavě, dokud nejsou oba plné, poté systém hledá swap prostor s nejbližší nižší prioritou. Pokud máte jen jeden swap prostor, priorita je samozřejmě irelevantní. Nyní změníme prioritu swap souboru, který jsme vytvořili, abychom ukázali, jak se to dělá.

Pro nastavení priority přidejte do položky v `/etc/fstab` volbu `pri=` (priorita). Upravte řádek, který jste přidali do `/etc/fstab`, aby vypadal takto:

/swapfile    none    swap    sw,pri=10    0    0

Do pole voleb tedy přidejte `pri=10`, oddělené od `sw` čárkou. Mezi `sw`, čárkou a `pri=10` nesmí být žádné mezery. Restartujte počítač a použijte příkaz `swapon –show`:

swapon --show

Priorita tohoto swap prostoru byla zvýšena na 10. To je důkaz, že pole voleb v položce `/etc/fstab` není ignorováno.

Snadná výměna prostoru

Po probrání všech vysvětlení můžeme nový swap soubor vytvořit tak snadno a rychle:

sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

A zkontrolujeme, zda to funguje:

swapon --show

Pro trvalé uložení proveďte přidání do souboru `/etc/fstab`.

A je hotovo.