Portál AbcLinuxu, 30. dubna 2025 12:53
Na článek se to IMHO nehodí, není tam žádný rozumný širší úvod atd. Jsem dostatečně oceněn tím, že se to dostalo do výběru kvalitních linuxových blogpostů, má to solidní skóre v dobré:špatné hodnocení od čtenářů a kladné ohlasy v diskusi.
Anketa by byla zajímavější, kdyby tam byla i možnost "něco jiného". Kdyby mi někdo držel pistoli u hlavy, že si z těch dvou musím vybrat, tak bych tam holt BtrFS dal, ale zatím jsem se u svých systémů mohl rozhodovat svobodně, takže nikde není.
Ale i pak by ta otázka byla příliš obecná. Odpověď totiž může silně záviset na tom, k čemu a jak má být ten filesystém využíván.
Uživatelé OpenSUSE 13.2 (btrfs default) proto používají raději EXT4.
Tak to se uvádím jako protipříklad, openSUSE používám dlouhá léta na všech svých linuxových ne-serverových strojích a s Btrfs jsem tam začal s radostí experimentovat ještě (tuším o verzi) před tím, než se z něj stal defaultní filesystém.
Nevím, co přesně je myšleno vlivem snapshotů na výkon. Napadají mne jen dvě věci:
Jestli při změně bloku odkaz na původní blok označí za volný nebo ne, protože je součástí snapshotu, to je prakticky jedno.
Není to jedno z hlediska fragmentace toho souboru. Pokud se soubor mění často, tak alokátor může ten blok umístit vedle (zvýší se fragmentace) a při jeho dalším update zase na původní místo (sníží se fragmentace). Pokud je původní blok stále odkazován z nějaké jiné kopie (reflink, snapshot), tak při dalším update musí mají další volný blok (který už může být na disku o hodně dál, než původní bloky souboru). (Jestli to takhle btrfs dělá nevím, takto se to někdy dělá v multigeneračních db.) V praxi potom pozoruji, že subvolume se snapshoty se updatuje o něco pomaleji, než sub bez snapshotů. (Což ale může být dáno i něčím jiným, alokátor může mít problém najít volné bloky.) Není to nijak významné, ale lze si toho všimnout. (A to se bavíme o sub, která má několik tisíc snapů a updatuje se poměrně často, takže těch kopií bloků tam bude hodně.)
navíc je to z mého pohledu stejně naprosto zanedbatelná cena
Asi tak.
Flexibilita zmenšování úložištěU mě před lety vyhrálo BtrFS nad ZFS právě z důvodu flexibility multidevice. Přidat, odebrat, kdykoliv, cokoliv (s podmínkou aktuálního typu raidu a volného místa). Chystám se ještě na obecný potlach o "dokonalém" fs (z mého pohledu). Co bych velmi u btrfs ocenil by byla možnost vybrat si raid profil per subvolume. ZFS má tohle přesně naopak, tam je raid definován pro vdev, který se jako celek strká do zpoolu. Ale já bych rád FS, který disky bere jen jako "skladiště bloků" a redundanci si řeší tak, že bloky souboru umístí na příslušný počet zařízení. Takže mít subvolume typu raid1, raid0 apod. Nevím, jak daleko od toho btrfs je, toto už dnes v podstatě platí pro celý fs (za běhu lze měnit raid profil celého fs, to znamená, že během této operace jsou některá data uložena dle starého profilu a některá dle nového - a je to zcela konzistentní). Snad by nemuselo být tak těžké implementovat profil per subvolume (i když ten multidevice alokátor bloků různých profilů bych teda psát nechtěl).
Mimochodem už jste někdo viděl nějakou silent data corruption, pokud možno na počítači s ECC?
Právě že možná viděl...
Před chvílí jsem četl tohle, a řeknu vám, ta čísla tam uváděná jsou děsivá. Docela žasnu, že běžné desktopy a notebooky bez ECC RAM vůbec nějak fungují.
Do příštího desktopu se budu snažit dostat ECC paměť, ale bojím se, že to narazí hlavně na omezeném výběru desek. :-/ U notebooku je to prakticky marné (krom pár modelů superdrahých mobilních pracovních stanic).
každou novou stanici či server jsme nechali memtestovat 3-7 dníNemůže se ta chyba projevit jen tehdy, když se to zapíše, nechá chvíli odležet, a pak přečte? Přičemž memtest zapisuje a čte menší bloky. Jinak já se u non-ECC počítačů nebojím ani tak náhodných chyb občas, jako spíš toho, že od náhodných bitflipů ke spuštění memtestu většinou vede spousta debugování ve skutečnosti funkčního softwaru.
Nemůže se ta chyba projevit jen tehdy, když se to zapíše, nechá chvíli odležet, a pak přečte? Přičemž memtest zapisuje a čte menší bloky.
Vzpomínám si, že memtest míval i nějaký "decay" test (defaultně se nespouštěl), kde se IIRC popsala celá paměť, pak se 90 minut nedělo nic a potom se obsah zkontroloval.
The status of btrfs was experimental for a long time, but the the core functionality is considered good enough for daily use.
Ano, doporučuje se mít poslední kernel, a je tam zdůrazněné mít zálohy a být připraven je použít, to ale snad platí vždy, ne?
Taky pomalu roste počet „produkčních“ uživatelů.
Výše popsané tedy rozhodně nepovažuji za něco, co by Btrfs neměl přežít (a však to taky data nijak neohrozilo).
Nehlásil ovšem chyby už disk, tj. nebylo z logu poznat, že došlo k chybě čtení z hardware? Nebo to opravdu chytal až Btrfs přes nesedící kontrolní součty?
např. u snapshotu na úrovni blokového zařízení nelze garantovat, že bude obsahovat konzistentní obraz filesystémuJaktože ne? Filesystém se dá ručně zmrazit a podle manuálové stránky fsfreeze to dokonce LVM dělá automaticky, když se po něm chce vytvoření snapshotu.
Jaký má smysl používat jednu a tu samovou věc na všechno, když si bloková zařízení mohu řešit přes LVM a souborový systém zvlášť?LVM snapshoty jsou výkonnostně nepoužitelné. Jak mdraid tak LVM neumí pracovat s informací o neobsazeném místě (mohlo by to asi fungovat přes TRIM, ale není to tam). RAID zas dokáže těžit z kontrolních součtů, pokud o nich ví. Velkou část věcí by asi šlo nějak vyřešit i přes oddělené vrstvy, ale integrace přináší výkonnostní a implementační výhody.
GNU GPL kód Btrfs je mnohem příjemnější,
... jestli na ZFS založí svůj produkt,
Z uvedeného myslím jasně vyplývá, že Btrfs i ZFS mají svoje silné a slabé stránky. Jako obvykle tedy musíte zvážit svoje potřeby, vybrat vhodnější řešení a vypořádat se s jeho omezeními.
Pokud vím, tak se ZFS není dobře integrovatelný s linuxovým VFSTo někdy ani btrfs. Pokud je subvolume s daty, udělá se její snapshot (takže subvolume a její snapshot vede na zcela stejné bloky), tak při čtení subvolume a následně jejího snapshotu se ty bloky čtou z disku znovu (nedostanou se do žádné iocache, resp se tam dostanou 2x - jednou pro tu subvolume a podruhé pro snapshot - pokud je dostatek paměti). Toto není problém při běžném používání, ale pokud někdo intenzivně pracuje napříč snapshoty (které se příliš nemění, takže souboru odkazují na tytéž bloky), tak je to mnohem pomalejší, než by to mohlo být. Stejně tak (nepřekvapivě) pro kopie pomocí reflinků.
ja maximum, co jsem ochotny prijmout, vidim na DRBDJo tak to bych zrovna teď nejradši vzal a vyhodil z okna. Náhodné vytuhnutí drbdsetup v kernelu na 10 minut fakt nepotěší.
V Btrfs je snapshot vlastně další podadresář (nebo možná spíše mountpoint) někde v adresářové struktuře. V ZFS běžně vidět není.Snapshoty jsou v ZFS vidět pomocí
zfs list -t snap
nebo zfs list -t all
.
Jinak jak je na tom btrfs s řízením, který uživatel může co dělat? Tzn. vytvářet subvolumes / snapshoty apod.
V Btrfs je snapshot vlastně další podadresář (nebo možná spíše mountpoint) někde v adresářové struktuře. V ZFS běžně vidět není.Snapshoty jsou v ZFS vidět pomocízfs list -t snap
nebozfs list -t all
.
Jasně, ale tady mi šlo o to, aby to bylo dostupné jako běžné soubory, které si prohlédnu libovolným programem pracujícím se soubory na disku.
Jinak jak je na tom btrfs s řízením, který uživatel může co dělat? Tzn. vytvářet subvolumes / snapshoty apod.
Tohle má možnosti jen triviální. Bez nahlédnutí do dokumentace: Každý uživatel smí vytvořit subvolume/snapshot, ale jen root ho smí smazat. Mazání snapshotů lze povolit i pro běžné uživatele přes mount volbu. Myslím, že nic další ani nakonfigurovat nelze (ale do dokumentace jsme nekoukal).
cd /data/virtual/.zfs
root@zfs:/data/virtual/.zfs/snapshot# ls snap_daily-2016-02-23-0002 snap_hourly-2016-02-29-1601 snap_daily-2016-02-24-0002 snap_hourly-2016-02-29-1701 snap_daily-2016-02-25-0002 snap_hourly-2016-02-29-1801 snap_daily-2016-02-26-0002 snap_hourly-2016-02-29-1901 snap_daily-2016-02-27-0002 snap_hourly-2016-02-29-2001 snap_daily-2016-02-28-0002 snap_initial-2014-06-29-0003 snap_daily-2016-02-29-0002 snap_monthly-2015-03-01-0204 snap_hourly-2016-02-28-2101 snap_monthly-2015-04-01-0104 snap_hourly-2016-02-28-2201 snap_monthly-2015-05-01-0104 snap_hourly-2016-02-28-2301 snap_monthly-2015-06-01-0104 snap_hourly-2016-02-29-0001 snap_monthly-2015-07-01-0104 snap_hourly-2016-02-29-0101 snap_monthly-2015-08-01-0104 snap_hourly-2016-02-29-0201 snap_monthly-2015-09-01-0104 snap_hourly-2016-02-29-0301 snap_monthly-2015-10-01-0104 snap_hourly-2016-02-29-0401 snap_monthly-2015-11-01-0204 snap_hourly-2016-02-29-0501 snap_monthly-2015-12-01-0204 snap_hourly-2016-02-29-0601 snap_monthly-2016-01-01-0204 snap_hourly-2016-02-29-0701 snap_monthly-2016-02-01-0204 snap_hourly-2016-02-29-0801 snap_weekly-2016-01-31-0103 snap_hourly-2016-02-29-0901 snap_weekly-2016-02-07-0103 snap_hourly-2016-02-29-1001 snap_weekly-2016-02-14-0103 snap_hourly-2016-02-29-1101 snap_weekly-2016-02-21-0103 snap_hourly-2016-02-29-1201 snap_weekly-2016-02-28-0103 snap_hourly-2016-02-29-1301 snap_yearly-2015-01-01-0305 snap_hourly-2016-02-29-1401 snap_yearly-2016-01-01-0305 snap_hourly-2016-02-29-1501Normalne to funguje. Fakt nechapu, proc v tom clanku pises takove veci. To klade dost vylky otaznik i na ostatni zjisteni.
Ale vždyť to tam napsané je:
existuje skrytý adresář .zfs, který je ale ve výchozí konfiguraci ZFS skrytý více, než by člověk čekal, nevypíše ho ani utilita ls, i když se do adresáře dá vstoupit:# ls -a /tank/test ./ ../ boot.tar text.tar text.tar.2 # cd /tank/test/.zfs/ # ls -a ./ ../ shares/ snapshot/ # zfs set snapdir=visible tank/test # ls -a /tank/test ./ ../ boot.tar text.tar text.tar.2 .zfs/Přes obsah .zfs se tedy asi člověk k jednotlivým souborům dostane, aniž by musel provést vyloženě rollback datasetu k danému snapshotu
Bohužel musím zklamat, žádné pěkné automatické řešení – jen ruční práce + grep & vim pro výběr položek obsahu a jeho naformátování. :-/
btrfs subvolume create
) nebo z jiného souborového systému.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.