Portál AbcLinuxu, 30. dubna 2025 10:13
scrub
Vyvoláme btrfs scrub start /mount-point-of-btrfso běhu a o konci běhu se přesvědčíme
btrfs scrub status /mount-point-of-btrfspokud status zobrazi nenulový počet nenapravitelných chyb např.
total bytes scrubbed: 2.21TiB with 2 errors error details: csum=2 corrected errors: 0, uncorrectable errors: 2, unverified errors: 0tak je také zajímavé (a potřebné) zjistit v jakých souborech je problém. A pokud jako v mém příkladu jsou na FS 2 chyby error details: csum=2 tak z dmesg zjistíme kde jsou.
dmesg | grep "checksum error at" | tail -2 | cut -d\ -f24- | sed 's/.$//'případně zapipujeme do souboru
> chyby.txt
Co s tím závísí na tom, jak jsou ta data nutné, jsou-li v záloze nebo je-li potřeba obnovy. V každém případě btrfs chybná data nedá. Tedy sektor s chybou součtu skončí s chybou čtení a není dodán. V krajním případě lze použít ddrescue
, které nakopiruje soubor bez poškozeného sektoru. To má smysl jen v případě nějakých streamů, kdy data za chybou mají smysl a lze je rozumně interpretovat.
Tiskni
Sdílej:
pokud status zobrazi nenulový počet nenapravitelných chyb…Tak to znamená, že jsem někde něco nedomyslel a měl bych okamžitě uvažovat o nápravě.
Už se to tady nesčetněkrát omílalo, že Btrfs v single módu jedině nad nějakým raidem. Není to sice všemocné, ale lepší než drátem do oka. Optimální minimum je Btrfs v raid1 nad třemi disky.
A teď ještě poraď, jak do toho zakomponovat šifrování. Pokud bude pod RAIDem, tak se vše bude muset šifrovat dvakrát, což zpomalí zápisy. A pokud bude nad, tak Btrfs nemůže těžit z toho, že má dvě kopie dat a pokud je někde chyba, tak je velká pravděpodobnost, že ta druhá kopie je dobrá.
Tzn. použil bys EncFS? Nebo něco jiného nad Btrfs?
Já zatím vždy používal LUKS (a až nad ním LVM a pak FS), protože pak mám jistotu, že je šifrované všechno včetně metadat, swapu nebo dočasných adresářů, takže by nikde nemělo nic unikat.
Asi nejlepší by bylo transparentní šifrování v rámci FS…
Logicky bych očekával šifrování jako transparentní vrstvu nad FS.Takže NAD FS. V principu se používají asi 3 hlavní typy šifrování. Na úrovni blokového zařízení. -> šifrují se sektory. LUKS. Na úrovni souborů -> šifrují se soubory. EncFS. Na úrovni kontejneru. -> Ve FS je velký soubor, který obsahuje jiný zašifrovaný FS -> Truecrypt/Veracrypt. Při použití šifrování NAD FS múže utočník vidět vlastnosti jednotlivých souborů (velikost, čas zápisu atd) i když obsah a jméno bude zašifrované. Protože k zašifrovnému FS se dostane vždy a protože tam už to je roseparová na soubory, tak je vidí. Běžně se používá LUKS. Typicky tak, že je RAID v něm je LUKS a v něm je FS. Tím se data vytvořené ve FS zpracují v LUKSu a v Raidu se počítá parita/duplicita již ze zašifrovaných bloků. Tím se šifruje blok jednou. Protože btrfs má RAID v sobě, tak použití LUKSu pod ním musí se musí provést zašifrování na každém blokovém zařízení zvlášť. Jediná rozumná cesta do budoucna je mít uvnitř btrfs také šifrování.
Jediná rozumná cesta do budoucna je mít uvnitř btrfs také šifrování.
+1
Neříkám, že EncFS je nepoužitelný, ale IMHO je to vhodné tak na uživatelská data, dokumenty. Jinak použiji raději ten LUKS.
Ano, dovedu si představit situace, kde má šifrování dat smysl, ale rozhodně to není úroveň lokálního fs.
Pokud mám v lokálním desktopu více disků, na kterých mám raid, tak z fyzickou bezpečností jsem na tom skoro stejně jako s jedním diskem.Já bych tedy řekl, že o řád lépe. Jeden fyzický disk představuje riziko, jaké bch už dnes podstupovat nechtěl. Proto mám ostatně i v notebooku Btrfs v raid1. Pokud jde o data. Nepovažuji žádná svoje data za tak citlivá, aby se mi vůbec vyplatilo řešit. Resp. citlivá data třetích stran podle mě nemají na osobním notebooku vůbec co dělat. Když už bych do podobné situace byl postaven, že bych je přeci jen musel někde udržovat, tak bych to vyřešil — jak jsem naznačil výše – velkým souborem (u kterého bych v případě Btrfs nastavil atribut 'nocow'), který bych připojil přes loop. A na ten bych aplikoval kryptování na úrovni blokového zařízení. A pak ať se na tom disku hrabe kdo chce. I když z mého pohledu – dávat k reklamaci zařízení s datovým diskem… No. Někdo to tak asi dělá. Záleží na tom, jaký má problém. Já jsem dosud reklamoval pouze chcíplé disky. U strojů to nebylo nikdy zapotřebí. Pokud něco chcíplo, tak to bylo po několika letech provozu a definitivně.
A další dobrý důvod k šifrování jsou reklamace – nikdy nevíš, kdo si bude chtít na vráceném „rozbitém“ disku zkoušet, co vše lze obnovit, a kam tvoje data pak budou putovat. Nikdo ti nezaručí, že reklamovaný disk jen zkontrolují a pak bezpečně zničí.
pokud status zobrazi nenulový počet nenapravitelných chyb např.Ono i když btrfs reportuje, že se mu podařilo chybu opravit, asi bych měl i tak zkontrolovat stav disku, typ chyby, důležitost dat na tom disku a zamyslet se nad tím, zda nechci ten disk vyměnit. Např. pokud by v případě popsaném v blogu byly ty 2 chyby jako na potvoru v btrfs metadatech, které mají ve výchozím nastavení 2 násobnou duplikaci, tak by btrfs vypsal, že nalezl 2 chyby, ale že se mu je podařilo opravit (z té druhé kopie). Na druhou stranu, taková chyba nemusí být vždy způsobená přímo diskem.
mkfs.btrfs -d dup ...
. A jak píšu víše, takto se ve výchozím nastavení ukládají akorát metadata. Viz Btrfs Glossary:
DUP: A form of "RAID" which stores two copies of each piece of data on the same device. This is similar to RAID-1, and protects against block-level errors on the device, but does not provide any guarantees if the device fails. DUP is btrfs default RAID level for metadata on a single, non-rotational device. Regular data can also be assigned the DUP profile.Ale sám jsem to nikdy nepoužíval, protože btrfs mám jen na ssd disku a tam je to s velkou pravděpodobností stejně k ničemu (smysl by to mělo jen s rotačním diskem), viz: DUP PROFILES ON A SINGLE DEVICE
The mkfs utility will let the user create a filesystem with profiles that write the logical blocks to 2 physical locations. Whether there are really 2 physical copies highly depends on the underlying device type. For example, a SSD drive can remap the blocks internally to a single copy thus deduplicating them. This negates the purpose of increased redundancy and just wastes filesystem space without the expected level of redundancy. The wear levelling techniques can also lead to reduced redundancy, even if the device does not do any deduplication. The controllers may put data written in a short timespan into the same physical storage unit (cell, block etc). In case this unit dies, both copies are lost. BTRFS does not add any artificial delay between metadata writes.
Dekuji, zajimave. Zfs funguje asi podobne s tim, ze tech kopii mohu definovat vicero v ramci jednoho poolu.Ale ne v rámci jednoho blokového zařízení, jak by si mohl někdo myslet.
[root@makoto ~]# journalctl -u scrub-btrfs.service -- Logs begin at Sun 2018-04-15 19:00:34 CEST, end at Sun 2018-04-29 09:43:13 CEST. -- dub 22 01:00:00 makoto systemd[1]: Starting Scrub BTRFS filesystems... dub 22 01:00:04 makoto scrub-btrfs.sh[6746]: Running scrub on /mnt/maintenance/makoto_data_btrfs/ dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: scrub device /dev/mapper/makoto_data3_luks (id 3) done dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: scrub started at Sun Apr 22 01:00:04 2018 and finished after 06:19:13 dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: total bytes scrubbed: 1.30TiB with 0 errors dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: scrub device /dev/mapper/makoto_data4_luks (id 4) done dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: scrub started at Sun Apr 22 01:00:04 2018 and finished after 06:32:22 dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: total bytes scrubbed: 1.30TiB with 0 errors dub 22 07:32:26 makoto scrub-btrfs.sh[6746]: Running scrub on /mnt/maintenance/makoto_ssd_btrfs/ dub 22 07:32:41 makoto scrub-btrfs.sh[6746]: scrub device /dev/vda (id 1) done dub 22 07:32:41 makoto scrub-btrfs.sh[6746]: scrub started at Sun Apr 22 07:32:26 2018 and finished after 00:00:15 dub 22 07:32:41 makoto scrub-btrfs.sh[6746]: total bytes scrubbed: 4.64GiB with 0 errors dub 22 07:32:42 makoto systemd[1]: Started Scrub BTRFS filesystems. -- Reboot -- dub 29 01:00:00 makoto systemd[1]: Starting Scrub BTRFS filesystems... dub 29 01:00:04 makoto scrub-btrfs.sh[18795]: Running scrub on /mnt/maintenance/makoto_data_btrfs/ dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: scrub device /dev/mapper/makoto_data3_luks (id 3) done dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: scrub started at Sun Apr 29 01:00:04 2018 and finished after 02:23:39 dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: total bytes scrubbed: 1.30TiB with 0 errors dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: scrub device /dev/mapper/makoto_data4_luks (id 4) done dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: scrub started at Sun Apr 29 01:00:04 2018 and finished after 02:27:53 dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: total bytes scrubbed: 1.30TiB with 0 errors dub 29 03:27:57 makoto scrub-btrfs.sh[18795]: Running scrub on /mnt/maintenance/makoto_ssd_btrfs/ dub 29 03:28:12 makoto scrub-btrfs.sh[18795]: scrub device /dev/vda (id 1) done dub 29 03:28:12 makoto scrub-btrfs.sh[18795]: scrub started at Sun Apr 29 03:27:57 2018 and finished after 00:00:15 dub 29 03:28:12 makoto scrub-btrfs.sh[18795]: total bytes scrubbed: 5.62GiB with 0 errors dub 29 03:28:12 makoto systemd[1]: Started Scrub BTRFS filesystems. [root@makoto ~]# uname -a Linux makoto 4.16.4-1-ARCH #1 SMP PREEMPT Tue Apr 24 13:21:29 UTC 2018 x86_64 GNU/Linux
BTW: neumí to cesty k chybným souborům ukládat v nějakém strojově čitelném formátu? V man btrfs-scrub
jsem to nenašel. Tzn. je potřeba prohledávat log a tahat to z něj?
Mohl by být dostupný třeba přes /proc
jako seznam oddělený nulovým bajtem nebo jako symbolické odkazy na dané soubory. Případně by parametrem příkazu btrfs scrub
mohl být soubor, kam se má zapisovat nebo by to šlo prostě na standardní výstup (při použití parametru -B
). Případně by si BTRFS mohl do svých metadat ukládat seznam poškozených souborů a pak by sis je příkazem btrfs scrub něco
vypsal.
Mohl by být dostupný třeba přes /procV /proc asi ne, protože tam informace z konkrétního filesystému nepatří. Ale i kdybychom uvažovali, že to narveme do sysfs informací, co jsou v /sys/fs/btrfs, tak to není zcela dobrý nápad vzhledem k potenciální velikosti a provázanosti takových dat.
Případně by parametrem příkazu btrfs scrub mohl být soubor, kam se má zapisovat nebo by to šlo prostě na standardní výstup (při použití parametru -B).To by byl trochu problém, protože to běží v kernelu.
Případně by si BTRFS mohl do svých metadat ukládat seznam poškozených souborů a pak by sis je příkazem btrfs scrub něco vypsal.Tohle už je trochu lepší nápad, ale pořád je to něco co by mohlo udělat víc škody než užitku. Ideálně bych chtěl, aby scrub na filesystém nešahal mimo případy opravy dat.
/proc
se (pokud vím) při restartu zahazuje, takže v případě kdy by chyba vedla ke zhrouzení jádra byste akorát žili v blažené nevědomosti, že vám hnije blokové zařízení pod FS, protože by chyba nebyla ani tam, ani ve standardním logu.
Ale popravdě řečeno. Proč takové opičárny? Když hledám chybu, hledám ji především v syslogu. A stačí mi na to grep a less.
Koukám, že už nějaké práce na standardizaci/sjednocení probíhají, dokonce pro různé FS :-)
Btrfs podporuje „drhnutí“ za chodu a ext4 se má časem přidat. Wonga zajímalo, zda by nešlo vytvořit společné rozhraní v uživatelském prostoru. Ted Ts'o řekl, že by se hodilo ujasnit si, co je cílem a jaké jsou požadavky na takový nástroj. Zeptal se, jestli jediná úloha v cronu má drhnout všechny souborové systémy, nebo by ext4 a XFS měly mít samostatné záznamy v crontabu. Cílem by samozřejmě mělo být usnadnit správcům systémů život.
Chris Mason vznesl téma kontrol CRC, který souborové systém provádějí dnes. Když tyto kontroly selhají, každý souborový systém zaznamená svá vlastní oznámení do dmesg. Není v tom žádná konzistence. Wong doporučil, aby Btrfs uživatelskému prostoru vracel chybový stav „souborový systém poškozen“ (filesystem corrupt), jako to dělají ext4 a XFS, ale Mason namítl, že chyby CRC se najdou i jindy než při „drhnutí“ souborového systému.
Zdroj: Jaderné noviny – 17. 5. 2018: „Drhnutí“ a oprava souborového systému XFS za chodu
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.