Portál AbcLinuxu, 16. května 2024 15:05


Dotaz: btrfs raid balancing

13.5.2019 18:04 pou | skóre: 18
btrfs raid balancing
Přečteno: 472×
Odpovědět | Admin
Dobrý den,

pořídil jsem si druhý disk, který chci dát k prvnímu do raidu.

Na prvním disku mám btrfs, postupoval jsem dle návodu dle navodu

Vytvořil jsem btfs oddíl:
mkfs.btrfs /dev/sdb1
Přidal druhý disk:
btrfs device add /dev/sdb1 /
To proběhlo bez problému, potom balancing:
sudo btrfs fi balance start -mconvert=raid1 -sconvert=raid1 -dconvert=raid1 -f /
ERROR: error during balancing '/': Input/output error
dmesg:
pou@wolf:~$ sudo dmesg 
[2112712.190302] BTRFS info (device sda1): relocating block group 10766778368 flags 17
[2112712.527166] BTRFS info (device sda1): relocating block group 9693036544 flags 17
[2112724.780928] BTRFS info (device sda1): found 39295 extents
[2112738.949982] BTRFS info (device sda1): found 39288 extents
[2112739.921742] BTRFS info (device sda1): relocating block group 4324327424 flags 1
[2112759.323408] BTRFS warning (device sda1): csum failed ino 264 off 404922368 csum 1791219600 expected csum 3524111029
[2112759.324131] BTRFS warning (device sda1): csum failed ino 264 off 404922368 csum 1791219600 expected csum 3524111029
První disk má 64G druhý (nově přidaný) má 128G - což myslím, že by vadit nemělo.

Prosím o radu.

Děkuji

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.5.2019 18:42 a1bert | skóre: 23
Rozbalit Rozbalit vše Re: btrfs raid balancing
Odpovědět | | Sbalit | Link | Blokovat | Admin
[2112759.323408] BTRFS warning (device sda1): csum failed ino 264 off 404922368 csum 1791219600 expected csum 3524111029

no tady ti pise ze mu nesedi kontrolni soucet pri cteni z toho originalniho disku....
13.5.2019 19:33 pou | skóre: 18
Rozbalit Rozbalit vše Re: btrfs raid balancing
Ok, díky za reakci co s tím? Když se jedná o "/" root fs a je připojený ?
sudo btrfs check --repair /dev/sda1
enabling repair mode
/dev/sda1 is currently mounted. Aborting.
Jedná se o server na který mám horší fyzický přístup (proto ten druhý založní disk).
13.5.2019 19:37 Zaphod | skóre: 37 | blog: zaphod_blog
Rozbalit Rozbalit vše Re: btrfs raid balancing
Spusti:
sudo btrfs scrub start /
Skontroluj kedy scrub skončí:
sudo btrfs scrub status /
V dmesg by sa mali objaviť chybové výpisy aj s názvami súborov. Opraviť súbory (záloha, vymazať...). Spustiť scrub, keď bude bez chyby pokračovať s raid.
13.5.2019 20:07 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: btrfs raid balancing

A možná taky zkusit ten balance provést v rescue režimu nebo zkrátka v režimu, kdy bude méně programů otravovat se špatným použitím O_DIRECT — pokud by to jinak nešlo. Jak jsem psal níže, tohle opravdu vypadá na chybu, která by s tím mohla souviset.

Identifikace poškozených souborů a jejich mazání je opravdu až to poslední. Dokud je v logu u nějakého souboru warning, nikoliv error, rozhodně to není důvod k jeho smazání!

Řešení 1× (Filip Jirsák)
13.5.2019 20:00 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: btrfs raid balancing
Odpovědět | | Sbalit | Link | Blokovat | Admin

Myslím si, že vysvětlení by mohlo být tady v kapitole Direct IO and CRCs. Odkazovaný E-mail nabízí podrobnější vysvětlení. Ten log skutečně říká warning, nikoliv error. Třeba nějaká aplikace během toho balancování používala ošklivým způsobem direct IO (O_DIRECT). Jenom mi není jasné, proč celý balance kvůli tomu ohlásil chybu.

Kdy na tom oddíle naposledy proběhl scrub? :-) Bohužel tohle v odkazovaném návodě úplně chybí. Před každou takovou větší operací, která mění strukturu filesystému, je rozumné nechat proběhnout scrub, čistě pro jistotu. To bych i teď doporučoval jako úplně první věc.

(Následující je jen kontext, který pravděpodobně nesouvisí s tímto konkrétním případem: Kdyby tam byl místo warning error, jmenovalo by se to silent data corruption. Btrfs chrání proti silent data corruption jednoduše tím, že nikdy nevrátí poškozená data. Má checksumy dat i metadat a jakmile checksum nesedí, příslušný blok se nedá přečíst. To je sice na první pohled kruté, ale hned na druhý pohled je to mnohem lepší, než kdyby se poškozená data dál šířila a kopírovala (jako u většiny jiných souborových systémů). U jednodiskového filesystému s jednou replikou dat to znamená, že příslušný blok je ztracený. U dvou replik dat na jednom disku nebo u RAID1/5/6 konfigurace přes více disků se naštěstí blok obvykle dá opravit; buď se načte z druhé repliky, nebo se dopočte z parity — samozřejmě jen pokud checksum u druhé repliky či checksumy u dostatku "paritních" bloků sedí.)

Zpět k tématu: Tady je popsaný příkaz, který umožňuje identifikovat soubor (nebo adresář), který se četl, když ten kontrolní součet neseděl (podle čísla inodu):

sudo btrfs inspect-internal inode-resolve 264 /

Na jednom z mých strojů je pod tímto inodem vedený adresář /dev, na jiném je tam adresář /var. Je to samozřejmě individuální podle toho, jak proběhla instalace toho systému; takhle nízká čísla inodů dostanou obvykle soubory a adresáře vytvořené na filesystému jako jedny z prvních.

Kdyby byl poškozený adresář /dev, jeho smazání a nahrazení (pomocí live média) je celkem triviální záležitost. Kdyby byl ovšem poškozený adresář /var, běhal by mi z toho mráz po zádech. :-D Jak ovšem naznačuje fakt, že jde o warning, nikoliv error, nemusí tohle nic zásadního znamenat. Doporučuji prostě spustit scrub a pak se uvidí, co a jak.

13.5.2019 21:34 pou | skóre: 18
Rozbalit Rozbalit vše Re: btrfs raid balancing
Děkuji za vyčerpávající vysvětlení!!

Opravdu jsem měl pár chyb, některé se podařily opravit, některé ne (8 souborů).

Pomocí

sudo btrfs inspect-internal inode-resolve 264 /

jsem zjistil, který soubor je poškozen a smazal ho (byly to soubory zálohy logů).

Poté jsem znovu spustil
 sudo btrfs scrub start /

Stále tam však trčí 5chyb -
sudo btrfs scrub  status /
scrub status for f214bc43-6382-4157-b80a-54f6f6f7a8af
	scrub started at Mon May 13 21:06:18 2019 and finished after 00:02:23
	total bytes scrubbed: 4.37GiB with 5 errors
	error details: csum=5
	corrected errors: 0, uncorrectable errors: 5, unverified errors: 0
 sudo dmesg 
[2124093.659350] BTRFS warning (device sda1): checksum error at logical 4069195776 on dev /dev/sda1, sector 10061184, root 263, inode 159281, offset 9424896, length 4096, links 1 (path: var/lib/influxdb/wal/_internal/monitor/6/_00001.wal)
[2124093.659382] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 29, gen 0
[2124093.659404] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069195776 on dev /dev/sda1
[2124093.667186] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 30, gen 0
[2124093.667211] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
[2124093.668069] BTRFS warning (device sda1): checksum error at logical 4069216256 on dev /dev/sda1, sector 10061224, root 263, inode 160032, offset 0, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124093.668098] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 31, gen 0
[2124093.668117] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069216256 on dev /dev/sda1
[2124093.668743] BTRFS warning (device sda1): checksum error at logical 4069220352 on dev /dev/sda1, sector 10061232, root 263, inode 160032, offset 4096, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124093.668759] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 32, gen 0
[2124093.668769] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069220352 on dev /dev/sda1
[2124093.669341] BTRFS warning (device sda1): checksum error at logical 4069224448 on dev /dev/sda1, sector 10061240, root 263, inode 160032, offset 8192, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124093.669356] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 33, gen 0
[2124093.669367] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069224448 on dev /dev/sda1
[2124293.937484] BTRFS warning (device sda1): checksum error at logical 4069195776 on dev /dev/sda1, sector 10061184, root 263, inode 159281, offset 9424896, length 4096, links 1 (path: var/lib/influxdb/wal/_internal/monitor/6/_00001.wal)
[2124293.937516] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 34, gen 0
[2124293.937538] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069195776 on dev /dev/sda1
[2124293.945168] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 35, gen 0
[2124293.945189] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
[2124293.945928] BTRFS warning (device sda1): checksum error at logical 4069216256 on dev /dev/sda1, sector 10061224, root 263, inode 160032, offset 0, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124293.945951] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 36, gen 0
[2124293.945966] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069216256 on dev /dev/sda1
[2124293.946667] BTRFS warning (device sda1): checksum error at logical 4069220352 on dev /dev/sda1, sector 10061232, root 263, inode 160032, offset 4096, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124293.946690] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 37, gen 0
[2124293.946705] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069220352 on dev /dev/sda1
[2124293.947398] BTRFS warning (device sda1): checksum error at logical 4069224448 on dev /dev/sda1, sector 10061240, root 263, inode 160032, offset 8192, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
[2124293.947420] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 38, gen 0
[2124293.947434] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069224448 on dev /dev/sda1
Jenže soubor/y neexistuje/í:
 sudo btrfs inspect-internal inode-resolve 160032 /
ERROR: ino paths ioctl: No such file or directory
sudo ls /var/backups/dpkg.status.1.gz
ls: nelze přistoupit k '/var/backups/dpkg.status.1.gz': Adresář nebo soubor neexistuje

Díky
13.5.2019 21:54 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: btrfs raid balancing

Tady se tentokrát objevuje root 263.

Jestli si to dobře pamatuju, tohle číslo by mohlo být ID nějaké subvolume. Ukazuje se číslo 263 někde ve výpisu btrfs subvolume list /?

Jestli jo a jestli příslušná subvolume není přímo přístupná z `/var` (třeba proto, že je k ní úplně jiná cesta; může jít třeba o snapshot namountovaný kdovíkam, jestli vůbec někam), pak by to vysvětlovalo, proč ten soubor v kořenovém souborovém systému není.

U mě například ten výpis subvolume vypadá takto:

ID 259 gen 824284 top level 5 path arch_root
ID 260 gen 824317 top level 5 path arch_home
ID 261 gen 824317 top level 5 path arch_var
ID 262 gen 824210 top level 259 path etc
ID 263 gen 29 top level 261 path arch_var/lib/machines
ID 891 gen 601725 top level 261 path arch_var/lib/portables

Samozřejmě tam toho bude mnohem víc (ba spousta) u někoho, kdo používá automatické periodické snapshoty a/nebo atomické aktualizace systému pomocí snapshotů.

Chtělo by to podívat se, která subvolume má ID 263 a případně kam je namountovaná. Ono se taky dá takhle do té subvolume přímo explicitně podívat:

mount -o subvolid=263 UUID=f214bc43-6382-4157-b80a-54f6f6f7a8af /mnt

Takhle^^^ se ta příslušná subvolume objeví v /mnt a dá se zkontrolovat, jestli je tam /mnt/var/backups/dpkg.status.1.gz nebo ne (a jestli se dá smazat). No a jestli ne, pak mi nezbývá než konstatovat, že v tomhle případě nechápu, co se děje. :-)

13.5.2019 22:10 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: btrfs raid balancing

Ještě k těm cestám k subvolume: Některé systémy jsou nastavené tak, že bootují z jiné subvolume než kořenové. Třeba zrovna já to tak mám. Takže například arch_root je můj kořenový filesystém a subvolume arch_var je namountovaný do /var, což z pohledu kořenové subvolume je /arch_root/var. (Adresáře, kde se mají implicitně objevovat subvolume, se dají určit pomocí btrfs subvolume set-default ... nebo postaru a tradičně (byť méně elegantně) pomocí /etc/fstab a optionů subvol nebo subvolid.

Protože seznam subvolume a (někdy; nejsem si jistý jak přesně to je) i cesty k poškozeným souborům se generují podle toho set-default nastavení, nikoliv podle toho, jak věci uspořádá /etc/fstab, může se hodit nakouknout do kořenové subvolume. To se dá zařídit jednoduše namountováním filesystému (opakovaně), třeba do /mnt:

mount UUID=f214bc43-6382-4157-b80a-54f6f6f7a8af /mnt

Podle toho, co se tam^^^ objeví, můžou pak cesty k subvolume nebo k souborům v dmesg dávat lepší smysl. Například u mě bude po takovém mountu (v souladu se seznamem subvolumes zmíněným výše) vidět toto:

# ls /mnt
arch_home  arch_root  arch_var
14.5.2019 07:38 pou | skóre: 18
Rozbalit Rozbalit vše Re: btrfs raid balancing
Děkuji za radu, bylo to přesně jak píšete, soubory byly na snapshotu.Soubory jsem tedy odstranil a spustil znovu scrub.

Stále se ale nemohu zbavit posledního erroru:
pou@wolf:~$ sudo dmesg -c
pou@wolf:~$ sudo btrfs scrub start /
scrub started on /, fsid f214bc43-6382-4157-b80a-54f6f6f7a8af (pid=6588)
pou@wolf:~$ ERROR: there are uncorrectable errors

pou@wolf:~$ sudo btrfs scrub status /
[sudo] heslo pro pou: 
scrub status for f214bc43-6382-4157-b80a-54f6f6f7a8af
	scrub started at Tue May 14 07:04:58 2019 and finished after 00:02:23
	total bytes scrubbed: 4.38GiB with 1 errors
	error details: csum=1
	corrected errors: 0, uncorrectable errors: 1, unverified errors: 0
pou@wolf:~$ sudo dmesg 
[2160221.182631] BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 41, gen 0
[2160221.182657] BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
pou@wolf:~$ sudo btrfs scrub status /
scrub status for f214bc43-6382-4157-b80a-54f6f6f7a8af
	scrub started at Tue May 14 07:04:58 2019 and finished after 00:02:23
	total bytes scrubbed: 4.38GiB with 1 errors
	error details: csum=1
	corrected errors: 0, uncorrectable errors: 1, unverified errors: 0
pou@wolf:~$ 

14.5.2019 11:57 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: btrfs raid balancing
jakou odpověď dá?
journalctl --output cat | grep '4069212160' | uniq 
14.5.2019 13:47 pou | skóre: 18
Rozbalit Rozbalit vše Re: btrfs raid balancing
Výstup je zde....

pou@wolf:~$ sudo journalctl --output cat | grep '4069212160' | uniq 
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
pou@wolf:~$ 
Ještě doplním:
pou@wolf:~$ sudo journalctl --output cat | grep -i btrf |tail -n 30
BTRFS warning (device sda1): checksum error at logical 4069220352 on dev /dev/sda1, sector 10061232, root 263, inode 160032, offset 4096, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 37, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069220352 on dev /dev/sda1
BTRFS warning (device sda1): checksum error at logical 4069224448 on dev /dev/sda1, sector 10061240, root 263, inode 160032, offset 8192, length 4096, links 1 (path: var/backups/dpkg.status.1.gz)
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 38, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069224448 on dev /dev/sda1
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs inspect-internal inode-resolve 160032 /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs subvolume list /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs device stat /dev/sda
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub start /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 39, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub start /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 40, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub start /
BTRFS error (device sda1): bdev /dev/sda1 errs: wr 0, rd 0, flush 0, corrupt 41, gen 0
BTRFS error (device sda1): unable to fixup (regular) error at logical 4069212160 on dev /dev/sda1
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
     pou : TTY=pts/1 ; PWD=/home/pou ; USER=root ; COMMAND=/bin/btrfs scrub status /
pou@wolf:~$ 
14.5.2019 15:32 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: btrfs raid balancing

Tak u toho čísla bloku by se mělo dát zjistit, ze kterého souboru pochází:

btrfs inspect-internal logical-resolve 4069220352 /

Ovšem tohle^^^ má zase ten samý problém kolem hledání cest — zase to vyžaduje implicitní kořenový subvolume. Když se nabootuje z jiného subvolume, říká mi to: ERROR: logical ino ioctl: No such file or directory.

Takže, pokud tomu dobře rozumím, workaround by asi byl:

mount UUID=f214bc43-6382-4157-b80a-54f6f6f7a8af /mnt
btrfs inspect-internal logical-resolve 4069220352 /mnt
btrfs inspect-internal logical-resolve 4069224448 /mnt
btrfs inspect-internal logical-resolve 4069212160 /mnt

Toto^^^ by mělo (snad, možná) říct, kterých souborů se problém týká. No a jestli ani tohle nepřinese kloudný výsledek, já osobně bych pak asi vyzkoušel příkaz btrfs restore .... To už je ale těžké kladivo a musí se to provést na odmountovaném filesystému.

Tento blogpost shrnuje možné postupy v různých situacích (včetně této) a zmiňuje taky btrfs restore .... Možná by se hodilo něco z toho zkusit, ale nikdy jsem podobnou situaci v praxi neviděl, takže nevím, co doporučit.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.