BTRFS je mladším kolegou ZFS. Stejně jako ZFS se snaží o implementování rozšířených vlastností s důrazem na toleranci chyb, opravy a jednoduchou administraci.
Název může mít několik významů: BetterFS, BtreeFS, ButterFS, ButterFace.
Nemá tak vysoké cíle jako ZFS. Chce být stejně tak dobré nebo dokonce lepší než stávající Linuxové systémy souborů (ext4, ReiserFS, XFS). Důraz klade na škálovatelnost a výkon.
Používá pevnou velikost bloků, které seskupuje do extentů.
Extenty zajistí nižší fragmentaci dat, ale mají i své nevýhody. Například při kompresi je nutné přečíst celý extent.
Pro ukládání datových struktur se používají optimalizované b+stromy.
Transakce v BTRFS porušují některé ACID pravidla (atomicity, consistency).
Oproti ZFS se snaží co nejvíce využít funkcí jádra (io scheduler, cache, komprese).
Na stránkách BTRFS se můžeme dočíst, že návrh systému již není nestabilní, ale kód prochází překotným vývojem.
Není doporučeno jeho použití pro produkční účely.
BTRFS je licencován GPL, tedy stejně jako Linux, což je možná jeden z důvodů, proč je vůbec tento systém vyvíjen.
V názvosloví BTRFS se skupina zařízení pro ukládání dat označuje jako filesystem.
Do filesystemu můžeme přidávat a odebírat zařízení online.
Ve filesystemu vytváříme subvolumy.
Aby systém věděl, kde se BTRFS filesystemy nacházejí, použije se skanování.
/mnt/btrfs # btrfs device scan
Scanning for Btrfs filesystems
Pro vytvoření filesystemu použijeme standardní utilitu mkfs.
Při použití více zařízení, jsou v základním nastavení metadata v RAID1 a data RAID0.
Rozložení dat a metadat se může nastavit parametry mkfs při vytváření, nebo později změnit příkazem btrfs.
Při vytváření systému může být v parametru mkfs.btrfs více zařízení.
/ # mkfs.btrfs -L btrfs_data -d raid1 -m raid1 /dev/sda3 /dev/sdb2 /dev/sda2
/ # mount /dev/sda3 /mnt/btrfs
Vypsání dostupných BTRFS filesystemů provedeme příkazem btrfs.
/mnt/btrfs # btrfs filesystem show
Label: 'btrfs_data' uuid: b4793685-b88a-4480-8869-437f71554959
Total devices 3 FS bytes used 267.15GiB
devid 2 size 74.61GiB used 2.00GiB path /dev/sda3
devid 4 size 461.95GiB used 293.03GiB path /dev/sdb2
devid 5 size 387.34GiB used 291.00GiB path /dev/sda2
Btrfs v3.14.2
Vidíme systém s názvem btrfs\_data, obsahující 3 diskové oddíly.
Rozložení dat ve filesystemu.
/mnt/btrfs # btrfs fi df .
Data, RAID1: total=291.00GiB, used=266.10GiB
System, single: total=32.00MiB, used=52.00KiB
Metadata, RAID1: total=2.00GiB, used=1.05GiB
unknown, single: total=360.00MiB, used=0.00
/mnt/btrfs # df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 924G 535G 243G 69% /mnt/btrfs
Pro ukládání dat a metadat se použije systém RAID1.
Příkaz df zobrazuje volné místo na disku netradičně, oproti zvyklostem.
Velikost je součet všech zařízení ve filesystemu. Volné resp. použité místo se mění v závislosti na použitém RAID modelu.
Zařízení odebereme příkazem btrfs.
/mnt/btrfs # btrfs dev delete /dev/sda3 .
/mnt/btrfs # btrfs fi sh
Label: 'btrfs_data' uuid: b4793685-b88a-4480-8869-437f71554959
Total devices 2 FS bytes used 272.93GiB
devid 4 size 461.95GiB used 293.03GiB path /dev/sdb2
devid 5 size 387.34GiB used 293.00GiB path /dev/sda2
Btrfs v3.14.2
Data se automaticky rozloží na zbylé disky.
Vytvoření subvolumu provedeme příkazem btrfs.
/mnt/btrfs # btrfs subvolume create tmp
Create subvolume './tmp'
/mnt/btrfs # btrfs su list .
ID 256 gen 692121 top level 365 path var/cache/pacman
ID 257 gen 692148 top level 365 path var/lib/mysql
ID 270 gen 699161 top level 5 path usr
ID 317 gen 691332 top level 5 path opt
ID 365 gen 699174 top level 5 path var
ID 497 gen 699174 top level 5 path home
ID 499 gen 699144 top level 497 path home/virts
ID 1099 gen 699173 top level 5 path tmp
Pokud připojujeme BTRFS filesystem, je jedno, které zařízení použijeme jako parametr pro příkaz mount.
Nový systém obsahuje pouze jeden subvolume (subvolid=5). Ten je implicitně nastaven jako výchozí pro mount.
Výchozí subvolume se nastaví příkazem btrfs.
Pro připojení subvolumu na jiné místo, než jaké má ve struktuře filesystemu přidáme příkazu mount parametr subvol, nebo subvolid.
/mnt/btrfs # mount /dev/sda3 /usr/home -o subvol=home
Kvóty jsou v BTRFS implicitně vypnuty.
Jejich zapnutí se provede příkazy btrfs.
/mnt/btrfs # btrfs quota enable .
/mnt/btrfs # btrfs qu rescan .
Každý subvolume je zařazen do qgroup. Limit lze nastavit přímo nad subvolumem.
/mnt/btrfs # btrfs qgroup limit 1g opt
Snapshot vytvoříme analogicky jako subvolume.
/mnt/btrfs # btrfs su snapshot opt/ opt2
Create a snapshot of 'opt/' in './opt2'
/mnt/btrfs # ls
home opt opt2 tmp usr var
Snapshoty jsou v BTRFS prosté subvolumy, které sdílí společná data s jiným subvolumem.
Defaultně jsou read-write.
Výpis qgroup pak vypadá následovně.
/mnt/btrfs # btrfs su li .
...
ID 1105 gen 712160 top level 5 path opt2
/mnt/btrfs # btrfs qg sh -r .
qgroupid rfer excl
-------- ---- ----
...
0/317 889212928 4096 1073741824
...
0/1105 889212928 4096 0
Ve sloupcích je název qgroup, zabrané místo odkazované a vlastní, limit.
Pokud jsme vytvořili systém pouze na jednom zařízení, není zajištěna redundance.
Toho docílíme přidáním dalšího zařízení.
Samotná operace přidání ale nestačí k tomu, aby se data na nově přidané zařízení rozprostřela.
Pro tento účel existuje příkaz balance.
Další jeho funkcí je konvertovat rozložení dat (single, RAIDx).
/mnt/btrfs # btrfs dev add /dev/sda3 .
/mnt/btrfs # btrfs balance start -dconvert=raid0 -mconvert=raid1 .
Oproti ZFS je podporováno online změna velikosti file systému.
Nároky na použití jsou také nižší. Doporučuje se 1 GB místa na disku a 128 MB RAM.
Pro kontrolu dat na disku má btrfs příkaz scrub. Ten přečte všechna data a metadata a použije kontrolní součty pro odhalení chyb. Pro opravy použije redundantní kopie z RAID zařízení.
/mnt/btrfs # btrfs scrub start .
/mnt/btrfs # btrfs sc status .
scrub status for b4793685-b88a-4480-8869-437f71554959
scrub started at Thu Sep 4 16:28:51 2014 and finished after 276 seconds
total bytes scrubbed: 31.91GiB with 0 errors
Kompresní algoritmus můžeme volit lzo, rychlý a lepší pro SSD, nebo zlib, pomalejší s lepší kompresí.
No, to je vseobecne dobre, ze niekdo pise o BTRFS, lebo poslednom case mam pocit, ako keby ludiem sibalo z toho, ze neexistuje iny COW FS ako ZFS. A ZFS na Linuxe je nahovno a vsetky tie kecy o tom, ze je to pomale na FreeBSD nie su pravda. Na Linuxe je ale BTRFS dobry, ja som dlho s tym bezal a pre mna sa to osvedcilo ako stabilnejsie ako XFS. Napriek tomu, RHEL7 stale este ma XFS ako default, co teraz pred nedavnom spravili, aby to clovek mohel aj na root particii pouzivat, pricom nevim na co. BTRFS je lepsi a tam treba sa koncentrovat a jediny do to robi, je RHEL Oracle klon, co je dost hanba, ze len ti.
…
Přečteno 10 412×
Přečteno 6 662×
Přečteno 6 656×
Přečteno 6 638×
Přečteno 6 006×