GNU/Linux >> Znalost Linux >  >> Fedora

Pochopení souborového systému Btrfs ve Fedora Linux

B-Tree Filesystem (Btrfs) je kopie souborového systému pro zápis (CoW) pro operační systémy Linux. Uživatelé Fedory byli seznámeni s Btrfs, když z něj projektový tým Fedory udělal výchozí souborový systém pro Fedora Workstation 33. O Btrfs jsem příliš nepřemýšlel, přestože byl pro Linux k dispozici několik let. Tento článek vás seznámí se souborovým systémem Btrfs a jeho funkcemi, jako jsou snímky, dílčí svazky a kvóty.

B-Tree Filesystem (Btrfs) je souborový systém i správce svazků. Vyvíjí se od roku 2007 a od té doby je součástí linuxového jádra. Jeho vývojáři se zaměřují na vytvoření moderního souborového systému, který dokáže vyřešit problémy spojené se škálováním na velké úložné subsystémy. Z manuálové stránky Btrfs se její hlavní funkce zaměřují na odolnost proti chybám, snadnou správu a opravy.

Souborový systém Btrfs ve Fedora Linux

Jeho hlavní rysy jsou:

  • Snímky – snímky, které lze zapisovat a pouze pro čtení.
  • RAID.
  • Self-healing – kontrolní součty pro data a metadata.
  • Automatická detekce poškození dat.
  • Podsvazky.
  • Povědomí o SSD.
  • Efektivní přírůstkové zálohování

Více o jeho pokročilých funkcích a výhodách se můžete dozvědět na oficiální stránce Btrfs Man Page.

Předpoklad

Pokud již používáte Fedora Workstation 33, jste připraveni na další kroky. Pokud ne, můžete si stáhnout oficiální ISO Workstation Fedora a nainstalovat jej nebo spustit na novém virtuálním stroji z libovolné distribuce Linuxu, kterou používáte.

Při psaní tohoto článku jsem nenarazil na grafický nástroj pro práci s Btrfs (návrhy vítány!). Proto budeme u většiny ukázek v tomto článku pracovat s příkazovým řádkem. Pro další kroky musíte pracovat s Btrfs jako superuživatelem.

~]$ sudo su # přepnout do režimu superuživatele

Formát Btrfs můžete prozkoumat spuštěním následujícího příkazu.

Bližší pohled na souborový systém Btrfs

Zobrazit souborový systém Fedora Btrfs:

[root@fosslinux tuts]# souborový systém btrfs showLabel:'fedora_localhost-live' uuid:688a6af2-77e1-4da4-bc63-878c5b0f063bCelkový počet zařízení 1 FS  

Můžete si všimnout, že štítek souborového systému je „fedora_localhost-live“. Štítek můžete změnit tak, aby představoval přesnější reprezentaci vašeho systému, protože nepoužíváme živou USB verzi Fedory.

Změna štítků Btrfs:

Štítek můžete změnit pomocí příkazu btrfs filesystem label.

[root@fosslinux tuts]# štítek souborového systému btrfs /fedora_localhost-live[root@fosslinux tuts]# štítek souborového systému btrfs / fedoraworkstation33[root@fosslinux tuts]# štítek souborového systému btrfs /fedoraworkstation33[rootstrfedBoraslinu souborový systém labelBtrfs subvolumes

Dílčí svazky nejsou totéž jako oddíly, ale lze je přirovnat k oddílům a používají se podobným způsobem, jakým se používají oddíly. Podsvazek je standardní adresář, který může Btrfs spravovat.

Můžete použít dílčí svazek k pořizování snímků, nastavení kvóty a replikaci do jiných umístění a jiných hostitelských operačních systémů, pokud běží pod souborovým systémem Btrfs.

Vypsat podsvazky Btrfs:

[root@fosslinux tuts]# seznam dílčích svazků btrfs /ID 256 gen 24421 cesta domovské ID nejvyšší úrovně 5 258 gen 24407 kořenové ID cesty nejvyšší úrovně 5 265 gen 22402 cesta nejvyšší úrovně 258 var/lib/machines

Vytvořit podsvazek:

Nový subvolume můžete vytvořit spuštěním příkazu btrfs subvolume create.

[root@fosslinux tuts]# btrfs subvolume vytvořit /opt/fooCreate subvolume '/opt/foo'[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24469 top level 5 path homeID 258 gen top level 24469 cesta rootID 265 gen 22402 nejvyšší úroveň 258 cesta var/lib/machinesID 279 gen 24469 nejvyšší úroveň 258 cesta opt/foo

Smazat dílčí svazek:

Subvolume můžete odstranit spuštěním příkazu btrfs subvolume delete.

[root@fosslinux tuts]# btrfs subvolume delete /opt/fooDelete subvolume (no-commit):'/opt/foo'[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24495 top level 5 path homeID 258 gen 24493 kořenové ID cesty nejvyšší úrovně 5 265 gen 22402 cesta nejvyšší úrovně 258 var/lib/machines

Dílčí svazky se mohou hodit správcům systému, zejména při přidávání uživatelů.

Přidání uživatele

Před Fedora Linux 33 by vytvoření nového uživatelského účtu vytvořilo domovský adresář pro účet. Vytvořený uživatelský adresář je v podstatě podadresářem /home. Znamenalo to, že vlastnictví a oprávnění byly přizpůsobeny vlastníkovi adresáře /home. Znamenalo to také, že pro správu podadresáře nebyly žádné speciální funkce. S Btrfs máte větší kontrolu nad správou a aplikováním omezení na vytvořené uživatelské adresáře.

Tradiční způsob přidávání nového uživatele.

Přidejte nového uživatele „fedoran1“ pomocí příkazu useradd:

[root@fosslinux tuts]# useradd fedoran1[root@fosslinux tuts]# getent passwd fedoran1fedoran1:x:1001:1001::/home/fedoran1:/bin/bash[root@fosslinux tuts]# ls -l / hometotal 0drwx------. 1 fedoran1 fedoran1 80 7. dubna 19:00 fedoran1drwx------. 1 tutovka 308 6. dubna 08:33 tutovka
Používání podsvazků Btrfs jako domovů uživatelů

Subvolume Btrfs můžete umístit jako domovy uživatelů přidáním –btrfs-subvolume-home do příkazu useradd. Příkaz vytvoří pro uživatele nový podsvazek Btrfs.

[root@fosslinux tuts]# useradd --btrfs-subvolume-home fedoran2Create subvolume '/home/fedoran2'[root@fosslinux tuts]# getent passwd fedoran2fedoran2:x:1002:1002::doran:/fe bin/bash

Pokud spustíte btrfs subvolume list / příkaz, všimnete si nového subvolume pro domovský adresář nového uživatele.

[root@fosslinux tuts]# seznam subvolume btrfs /ID 256 gen 24732 cesta nejvyšší úrovně 5 homeID 258 gen 24731 cesta nejvyšší úrovně 5 rootID 265 gen 22402 cesta nejvyšší úrovně 258 var/lib/machinesID 2820 gen 2473 cesta nejvyšší úrovně 24731 home/fedoran2
Smazat uživatele:

Někdy chcete odstranit uživatele se všemi soubory uživatele a jeho domovským adresářem současně. Můžete použít příkaz userdel s volbou -r, která také odstraní podsvazek Btrfs uživatele.

[root@fosslinux tuts]# userdel -r fedoran2Delete subvolume (commit):'/home/fedoran2'

Kvóty Btrfs

Stalo se vám někdy, že se program vymkl kontrole a zapisoval na váš disk, dokud nebyl zaplněn celý váš adresář /home? Tyto problémy se vyskytují, zejména u aplikací nebo serverů, které ukládají obsah a soubory protokolu. Nastavením a implementací kvót Btrfs můžete zabránit tomu, aby se váš systém nebo server zastavil, protože disk je zaplněný.

Prvním krokem je povolení kvót na vašem souborovém systému Btrfs:

[root@fosslinux tuts]# povolena kvóta btrfs /

Dále si poznamenejte ID číslo skupiny kvót (qgroup) každého subvolume pomocí příkazu btrfs subvolume list. Nejlepší by bylo spojit každý podsvazek s qgroup na základě jeho ID čísla pomocí příkazu btrfs qgroup create. Můžete to udělat individuálně, ale můžete také použít následující příkaz k urychlení vytváření qgroups pro dílčí svazky.

>seznam podsvazků btrfs \ | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup zničit 0/{} \

Ve své Fedoře 33 nahraďte \ kořenovou cestou ( / ) vašeho souborového systému.

 # seznam dílčích svazků btrfs / | řez -d' ' -f2 | xargs -I{} -n1 btrfs qgroup vytvořit 0/{} /

Spusťte příkaz btrfs kvóta rescan pro zobrazení qgroups, které jste vytvořili.

[root@fosslinux tuts]# btrfs qgroup show /UPOZORNĚNÍ:probíhá opětovné skenování, data qgroup mohou být nesprávnáqgroupid rfer excl-------- ---- ----0/5 16,00 kiB 16,00 kiB0 /256 23,70MiB 23,70MiB0/258 449,61MiB 449,61MiB0/265 16,00KiB 16,00KiB0/279 16,00KiB 16,00KiB

Nyní můžete přiřadit kvótu qgroup, která použije změny na přidružený podsvazek.

Nyní můžeme použít příkaz btrfs qgroup limit k omezení využití domovského adresáře uživatelem fedoran2 na 2 GB.

[root@fosslinux tuts]# btrfs qgroup limit 2G /home/fedoran2

Potvrďte změny limitu kvóty pro uživatele fedoran2.

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2qgroupid rfer bez max_rfer max_excl-------- ---- ---- ------- --- -----0/279 16,00KiB 16,00KiB 2,00GiB žádné

Zobrazit všechny přiřazené qgroups a limity kvót, pokud existují, pomocí btrfs qgroup show -re /

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2qgroupid rfer bez max_rfer max_excl-------- ---- ---- ------- --- -----0/279 16,00KiB 16,00KiB 2,00GiB žádné

Snímky Btrfs

Snímek v souborovém systému Btrfs je prostě kopie dílčího svazku. Proto je snímek podsvazek, který může sdílet svá data a metadata s jinými podsvazky pomocí funkcí kopírování při zápisu (CoW). Pořízení snímku je okamžité, ale jakmile je vytvořeno, nezabírá místo.

Když pořídíte snímek, prostor snímku se zvětší se změnami v původním dílčím svazku nebo ve snímku, pokud do něj lze zapisovat. Kromě toho všechny přidané, upravené nebo odstraněné soubory v podsvazku budou stále umístěny ve snímku. Tyto funkce nabízejí způsob, jak pohodlně vytvářet zálohy ve vašem systému.

Vytvářejte zálohy pomocí snímků

Ve výchozím nastavení bude snímek umístěn na stejném disku jako podsvazek a můžete procházet nebo dokonce obnovit kopii souboru v původním stavu, ve kterém byl snímek pořízen. Zajímavou funkcí snapshotů je, že je můžete odeslat na externí pevný disk nebo vzdálený systém pomocí SSH. Háček je v tom, že cíl by měl mít souborový systém Btrfs. Chcete-li využít této funkce ve snímcích, použijete příkazy btrfs send a btrfs recipient.

Poznámka:Uložení snímku na stejný disk jako podsvazek není ideální strategií zálohování. Pokud dojde k poškození disku, ztratíte jak dílčí svazek, tak snímky.

Chcete-li vytvořit zálohu dílčího svazku, postupujte podle těchto kroků.

1:Vytvořte podsvazek pro svůj projekt

Pro demonstrační účely vytvoříme podsvazek Btrfs (myproject) uvnitř $HOME/Desktop/myproject. Podsvazek Btrfs bude vypadat a fungovat jako standardní adresář.

Vytvořte podsvazek pomocí následujícího příkazu:

[tuts@fosslinux ~]$ btrfs subvolume vytvořit $HOME/Desktop/myprojectCreate subvolume '/home/tuts/Desktop/myproject'

Vytvořte skrytý adresář pro ukládání snímků:

[tuts@fosslinux ~]$ mkdir $HOME/.myprojectsnapshots

Vytvořte textový soubor v podsvazku $HOME/Desktop/myproject:

[tuts@fosslinux ~]$ cd /home/tuts/Desktop/myproject[tuts@fosslinux myproject]$ ls[tuts@fosslinux myproject]$ vi day0.txt[tuts@fosslinux myproject]$ lsday0.txt 

2:Pořiďte snímek

Ve výchozím nastavení jsou snímky zapisovatelné, ale budete muset vytvořit snímek pouze pro čtení, abyste mohli používat příkazy btrfs send a btrfs recipient. ‘

Snímky lze pořizovat každý den, každou hodinu nebo dokonce každou minutu.

Pořiďte snímek podsvazku $HOME/Desktop/myproject a uspořádejte jej do $HOME/.myprojectsnapshots pomocí následujícího příkazu.

[tuts@fosslinux ~]$ snímek subvolume btrfs -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day0Vytvořte snímek '/home/tuts/Desktop/myproject' pouze pro čtení v '/home/tuts /.myprojectsnapshots/myproject-day0'

Poznámka:

  • Použijte parametr -r k vytvoření snímku pouze pro čtení. Parametr -r nabídne lepší konzistenci a zabezpečení a umožní vám odesílat a přijímat na externí pevný disk.
  • Snímky nebudou pořizovat rekurzivní snímky sebe sama. Snímek podsvazku /home neudělá snímek podsvazku $HOME/Desktop/myproject.
Pomocí btrfs odeslat a btrfs přijmout k zálohování snímků.

V níže uvedené ukázce bude snímek svazku Btrfs (/.myprojectsnapshots/myproject-day0) odeslán na USB disk připojený jako /run/media/tuts/bk.

[tuts@fosslinux ~]$ sudo btrfs poslat $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs obdrží /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day0ERROR:/run/media/tuts/bk nepatří do bodu připojení btrfs

V závislosti na tom, jak jste naformátovali jednotku USB, se může zobrazit následující chybová zpráva:

CHYBA:/run/media/tuts/bk nepatří do přípojného bodu btrfs.‘ 

Chyba znamená, že vaše jednotka USB nemá formát souborového systému btrfs. Příkaz btrfs send nemůže fungovat na jiném souborovém systému než btrfs.

Pokud se zobrazí taková chybová zpráva, naformátujte svůj USB disk na btrfs pomocí následujícího příkazu.

Naformátujte jednotku USB na formát souborového systému btrfs:

[tuts@fosslinux ~]$ sudo mkfs.btrfs /dev/sdb -L 'bk' -f

Nyní spusťte příkaz btrfs send a btrfs příjem:

[tuts@fosslinux ~]$ sudo btrfs poslat $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs obdrží /run/media/tuts/bk[sudo] heslo pro tuts:At subvol /home/tuts/.myprojectsnapshots/myproject-day0At subvol myproject-day0

Příkaz btrfs send byl úspěšně dokončen a vy můžete zobrazit a procházet svůj snímek „myproject-day0“ na vašem USB disku.

Příkaz může nějakou dobu trvat v závislosti na velikosti vašeho dílčího svazku ($HOME/.myprojectsnapshots/myproject-day0). Následné přírůstkové odesílání btrfs bude trvat kratší dobu.

Přírůstkové zálohy pomocí btrfs send

Chcete-li používat btrfs send inkrementálně, budete muset pořídit další snímek vašeho dílčího svazku.

Vytvořte snímky:

[tuts@fosslinux ~]$ snímek subvolume btrfs -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day1Vytvořte snímek '/home/tuts/Desktop/myproject' pouze pro čtení v '/home/tuts /.myprojectsnapshots/myproject-day1'

Odeslání přírůstkových btrfs:

[tuts@fosslinux ~]$ sudo btrfs odeslat -p $HOME/.myprojectsnapshots/myproject-day0 $HOME/.myprojectsnapshots/myproject-day1 | sudo btrfs obdrží /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day1At snapshot myproject-day1

Další přírůstková záloha (den poté).

Vytvořte snímek:

[tuts@fosslinux ~]$ snímek subvolume btrfs -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day2Vytvořte snímek '/home/tuts/Desktop/myproject' pouze pro čtení v '/home/tuts /.myprojectsnapshots/myproject-day2'

Odeslání přírůstkových btrfs (den poté):

[tuts@fosslinux ~]$ sudo btrfs odeslat -p $HOME/.myprojectsnapshots/myproject-day1 $HOME/.myprojectsnapshots/myproject-day2 | sudo btrfs obdrží /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day2At snapshot myproject-day2
Vyčištění

Poznámka:K provedení inkrementálního odesílání btrfs potřebujete alespoň poslední snímek. Ujistěte se, že se snímek nachází ve zdroji a cíli.

Smazat snímky ve zdrojovém umístění

Nepotřebné snímky můžete odstranit pomocí následujícího příkazu:

[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day0[sudo] heslo pro tuts:Delete subvolume (no-commit):'/home/tuts/.myprojectsnapshots/myproject-day0 '
[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day1[sudo] heslo pro tuts:Delete subvolume (no-commit):'/home/tuts/.myprojectsnapshots/myproject-day1 '

Odstraňte snímky v cílovém umístění:

[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day0Delete subvolume (no-commit):'/run/media/tuts/bk/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day1Delete subvolume (no-commit):'/run/media/tuts/bk/myproject-day1'

Poznámka:Nejlepší by bylo, kdybyste si ponechali poslední snímek ve zdrojovém a cílovém umístění, abyste mohli provést nové přírůstkové odeslání btrfs.

Obnovte soubor nebo adresář ze snímku btrfs

Chyby, jako je smazání adresáře nebo souboru omylem, jsou nevyhnutelné. Když se takové chyby vyskytnou, můžete obnovit soubory nebo adresáře z posledního snímku. Můžete také obnovit starší verzi adresáře nebo souboru ze staršího snímku.

Protože snímky fungují jako adresáře, můžete pomocí příkazu cp obnovit soubor pomocí následujícího příkazu.

Pomocí příkazu cp

Obnovte smazaný soubor pomocí příkazu cp:

[tuts@fosslinux ~]$ cp $HOME/.myprojectsnapshots/myproject-day1/day0.txt $HOME/Desktop/myproject

Obnovte smazaný adresář pomocí příkazu cp:

[tuts@fosslinux ~]$ cp -r $HOME/.myprojectsnapshots/myproject-day1/adresář $HOME/Desktop/myproject

Pokud smažete celý adresář $HOME/Desktop/myproject (subvolume), můžete subvolume vytvořit znovu a použít příkaz cp k obnovení celého obsahu ze snímku.

Obnovení smazaného dílčího svazku:

[tuts@fosslinux ~]$ btrfs subvolume vytvořit $HOME/Desktop/myprojectCreate subvolume '/home/tuts/Desktop/myproject'
[tuts@fosslinux ~]$ cp -rT $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject
Použití příkazu btrfs snapshot

Smazaný podsvazek můžete obnovit pořízením snímku snímků.

Obnovte dílčí svazek pomocí příkazu btrfs snapshot:

[tuts@fosslinux ~]$ snímek subvolume btrfs $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myprojectVytvořte snímek '/home/tuts/.myprojectsnapshots/myproject-day1' v '/home/tuts /Desktop/myproject'
Obnovte snímky btrfs z externího disku

K obnovení snímku z jednotky USB nebo externí jednotky můžete použít příkaz cp.

Obnovení souboru:

[tuts@fosslinux ~]$ cp /run/media/tuts/bk/myproject-day1/day0.txt $HOME/Desktop/myproject

K obnovení celého snímku můžete použít příkazy btrfs send a btrfs recipient. Chcete-li obnovit zapisovatelný podsvazek, musíte nastavit možnost pouze pro čtení na hodnotu false.

Obnovení celého snímku:

[tuts@fosslinux ~]$ sudo btrfs odeslat /run/media/tuts/bk/myproject-day1 | sudo btrfs obdrží $HOME/Desktop/[sudo] heslo pro tuts:Na subvol /run/media/tuts/bk/myproject-day1At subvol myproject-day1

Rekapitulace

Článek zdůraznil některé funkce Btrfs, které stojí za to se naučit. Btrfs byl vytvořen jako alternativa k souborovému systému ZFS a nabízí mnoho pokročilých funkcí souborového systému pro operační systémy Fedora a Linux.

Více o Btrfs se můžete dozvědět pomocí příkazu btrfs – – help nebo online dokumentace, ke které máte přístup pomocí man btrfs-subvolume, man btrfs-send nebo man btrfs-receive. Také mi přijde vhod oficiální Btrfs Wiki.

Všichni bychom si vystačili s grafickým nástrojem pro interakci s Btrfs! Tobě, tým projektu Fedora.


Fedora
  1. Porozumění systému souborů sysfs (/sys) v Linuxu

  2. Porozumění systému souborů /proc

  3. Vlastnosti souborového systému „Btrfs“.

  1. Linux – Jak zobrazit typ souborového systému přes terminál?

  2. Pochopení souboru /etc/inittab v Linuxu

  3. Linux:Kam umístit odkládací soubor

  1. Linux – Proč v systému není přítomen žádný souborový systém Rootfs?

  2. Linux – jak často je systém souborů Proc aktualizován v systému Linux?

  3. Jaké jsou možnosti připojení pro zlepšení výkonu souborového systému ext4 v Linuxu