Portál AbcLinuxu, 8. května 2025 11:22

Dotaz: btrfs mount failed: No space left on device

11.5.2020 14:03 Jiří Lisický | skóre: 31 | blog: JIL_blog | Olomouc
btrfs mount failed: No space left on device
Přečteno: 543×
Odpovědět | Admin

Ahoj, na mém telefonu Jolla začala chcípat baterka. Párkrát to lehlo natvrdo a teď nenastartuje vůbec. Dostal jsem se do recovery modu, je nějak nakopnutý btrfs. Překopíroval jsem device na kterém je filesystém na normální PC - Centos 7 (zkoušel jsem to i na live Fedora 31). Btrfs na PC nepoužívám, takže se tím prokousávám. Pomocí btrfs restore jde data vykopírovat. Ale zatím jsem nedokázal ten fs opravit.

Tady jsou mé, zatím marné pokusy. Příkazem btrfs zero-log jsem se trochu posunul, už to jde namoutovat, ale pouze RO. Chtěl jsem tedy přidat nějaký prostor, ale to mi zas píše, že je jen pro čtení.

~ # losetup --find --show /home/jirka/tmp/jolla.img
/dev/loop0

~ # btrfs fi show
Label: 'sailfish'  uuid: 86180ca0-d351-4551-b262-22b49e1adf47
	 Total devices 1 FS bytes used 4.73GiB
	 devid    1 size 13.75GiB used 13.75GiB path /dev/loop0

~ # mount -t btrfs /dev/loop0 ~/mnt
mount: /dev/loop0: can't read superblock

~ # mount -t btrfs -o usebackuproot /dev/loop0 ~/mnt
mount: /dev/loop0: can't read superblock

~ # btrfs rescue super-recover /dev/loop0
All supers are valid, no need to recover

/ # btrfs check /dev/loop0
Checking filesystem on /dev/mmcblk0p28
UUID: 86180ca0-d351-4551-b262-22b49e1adf47
checking extents
checking free space cache
checking fs roots
checking csums
checking root refs
checking quota groups
Counts for qgroup id: 264 are different
our:            referenced 876449792 referenced compressed 876449792
disk:           referenced 876449792 referenced compressed 876449792
our:            exclusive 872464384 exclusive compressed 872464384
disk:           exclusive 4096 exclusive compressed 4096
diff:           exclusive 872460288 exclusive compressed 872460288
Counts for qgroup id: 265 are different
our:            referenced 73646080 referenced compressed 73646080
disk:           referenced 73646080 referenced compressed 73646080
our:            exclusive 15380480 exclusive compressed 15380480
disk:           exclusive 4096 exclusive compressed 4096
diff:           exclusive 15376384 exclusive compressed 15376384
found 2841431300 bytes used err is 0
total csum bytes: 4715584
total tree bytes: 235204608
total fs tree bytes: 214499328
total extent tree bytes: 12795904
btree space waste bytes: 70058462
file data blocks allocated: 4970160128
 referenced 4793737216

~ # btrfs rescue zero-log /dev/loop0
parent transid verify failed on 94920704 wanted 2727500 found 2727499
parent transid verify failed on 94920704 wanted 2727500 found 2727499
parent transid verify failed on 94920704 wanted 2727500 found 2727499
parent transid verify failed on 94920704 wanted 2727500 found 2727499
Ignoring transid failure
Clearing log on /dev/loop0, previous log_root 94920704, level 0

~ # btrfs rescue zero-log /dev/loop0
Clearing log on /dev/loop0, previous log_root 0, level 0

~ # mount -t btrfs /dev/loop0 ~/mnt
mount: mount /dev/loop0 on /root/mnt failed: No space left on device

~ # mount -t btrfs -o ro /dev/loop0 ~/mnt

~ # btrfs fi df ~/mnt
Data, single: total=13.08GiB, used=4.51GiB
System, DUP: total=8.00MiB, used=4.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=330.00MiB, used=224.30MiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=512.00MiB, used=406.37MiB

~ # truncate --size=2GB ~/tmp/space
~ # losetup --find --show ~/tmp/space
/dev/loop1

~ # btrfs device add /dev/loop1 ~/mnt/
Performing full device TRIM /dev/loop1 (1.86GiB) ...
ERROR: error adding device '/dev/loop1': Read-only file system
Za veškeré rady přede díky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 11.5.2020 15:36 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opravit nejde. Je to vlastnost btrfs. Pokud se o opravu pokusíš, tak se ten filesystém rozpadne úplně.

Vyrob nový filesystém, data překopíruj, starý zahoď a nový nahrej do telefonu.
Hello world ! Segmentation fault (core dumped)
13.5.2020 09:54 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Drsný. Než se do toho pustím, našel by se ještě někdo, kdo by to mohl potvrdit? Že to jinak nejde vyřešit? Díky.
13.5.2020 10:45 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Psal jsem ti na to odpověď už v pondělí, ale měli jsme problém se switchem, tak to neodešlo a pak už jsem se k tomu nedostal.

Pokud tomu dobře rozumím, udělal sis zálohu disku z toho telefonu, kterou ses pokusil mountnout přes loop.

1, pokoušel bych se to mountovat nikoliv rovnou přes loop zařízení, ale přes label nebu uuid

2, Option usebackuproot jsem nikdy nepoužil, používal jsem jen recovery, které tím bylo nahrazeno až od jádra 4.5 Nevím co máš za jádro.

Pak jsi dělal nějaké opičky, které mi dost dobře nejsou jasné. Nicméně ti t o napsalo, že je vše ok.

Potom jsi vynuloval log, a podařilo se ti to konečně namountovat v režimu readonly. Jenomže do readonly systému těžko přidáš nové zařízení.

Zkusil jsi alespoň vylistovat, co tam je? A co udělat remount na rw?
13.5.2020 13:38 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device

1, no zkoušel jsem mount -t btrfs LABEL=sailfish mnt, ale to nejde. Ty labely jde použít jen na bloková zařízení, ne? V nějakém souboru, to jádro přece samo od sebe nemůže vidět.

2, na Centosu7 je 3.10 a ne Fedoře31 je 5.6.6. Jo to, že je to nahrazeno jsem četl na wiki btrfs.

Psalo to, že nemůže přečíst superblock, tak jsem tam dal příkaz, který zas říká, že superblock je v pořádku. Nedělal jsem check --repair, protože někde psali, že je to až poslední možnost. Zero-log to trošku někam posunulo, protože do té doby nešel mount vůbec. Jenže teď jde jen readonly.

Vylistovat to jde, rw jsem zkoušel a nešlo mi to taky. Teď jsem to zkusil znova a ta chyba mi připadne divná:

/home/jirka/tmp # mount -t btrfs -o remount,rw mnt
mount: cannot remount /dev/loop0 read-write, is write-protected

13.5.2020 14:15 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device

Teda abych byl přesný, ten check --repair jsem taky zkoušel. Mám to přece jako kopii image, tak můžu experimentovat. Proběhlo to, opravilo ty dva problémy s qgroup. Teď jsem si to ověřoval a vidím tohle:

btrfs check /dev/loop0
Checking filesystem on /dev/loop0
UUID: 86180ca0-d351-4551-b262-22b49e1adf47
checking extents
checking free space cache
block group 144703488 has wrong amount of free space
failed to load free space cache for block group 144703488
checking fs roots
checking csums
checking root refs
checking quota groups
found 5075169280 bytes used err is 0
total csum bytes: 4715584
total tree bytes: 235204608
total fs tree bytes: 214499328
total extent tree bytes: 12795904
btree space waste bytes: 70058774
file data blocks allocated: 4970029056
 referenced 4793606144

A když zkouším ten mount, tak v logu najdu:

BTRFS info (device loop0): disk space caching is enabled
BTRFS info (device loop0): creating UUID tree
BTRFS warning (device loop0): block group 144703488 has wrong amount of free space
BTRFS warning (device loop0): failed to load free space cache for block group 144703488, rebuilding it now
BTRFS warning (device loop0): failed to create the UUID tree: -28
BTRFS: open_ctree failed
13.5.2020 15:00 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Tady někdo řešil podobný problém. A vyřešil to tak, že to překlopil na větší disk. Tedy vlastně to co jsem ti už napsal, pouze s tím rozdílem, že nepoužil send-receive, ale restore.
Josef Kufner avatar 13.5.2020 17:08 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Pokud pomůže větší disk, nemohlo by stačit přidat další disk (tj. RAID0)? Třeba jen malou flashku, nebo zahozený swapovací oddíl – cokoliv, co je zrovna po ruce, aby se to opravilo a byla příležitost něco smazat.
Hello world ! Segmentation fault (core dumped)
13.5.2020 17:45 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
To zkoušel hned na začátku. Viz původní text.
13.5.2020 14:52 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Ta cesta asi není v pořádku. Existoval mountpoint /home/jirka/tmp/mnt ?

A není náhodou nějakým způsobem blokovaný ten soubor jolla.img? Sice to mountuješ jako root přes loop, ale nebrání tomu nějaká věc? Co vypíše df? Je to zaplácnuté, nebo ukazuje, že tam je nějaké místo?

Osobně bych to zkopíroval raději z uživatelského adresáře jinam. A na tu kopii zkusil aplikovat ten truncate, abych tomu Btrfs dal prostor. Zkusil bych to taky namountovat s volbou clear_cache a případně i nodatacow, aby se nepokoušel ty data převalovat.

Pokud to lze číst, tak by to mělo jít vyexportovat do jiného Btrfs filesystému. Takže bych si udělal nový image o trochu větší velikosti, namountoval přes loop, naformátoval na Btrfs, namountoval a pak to do něj pustil přes send-receive.
13.5.2020 11:20 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Mimochodem, příkaz truncate lze použít i na soubor s daty. Takže si můžeš zvětšit rovnou ten "disk" a udělat resize toho btrfs, aniž bys přidával další virtuální disk.
13.5.2020 13:45 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
To mě nenapadlo. Ale já jsem zatím nepřišel na způsob, jak to přimountovat jinak než RO. A jestli to mu správně rozumím, tak dokud to nenamountuju RW, tak s tím moc neudělám :-(
Josef Kufner avatar 13.5.2020 12:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Na těch pár GB, které v telefonu máš, bych to vůbec neřešil a překopíroval to. Ale pokud se ti to povede opravit, tak se těším na podrobnosti pro případ až se mi rozpadne ten můj FS s terabajtem fotek ;-)
Hello world ! Segmentation fault (core dumped)
13.5.2020 12:49 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Podle toho co popisuje, bych tipoval, že to crashlo ve chvíli, kdy se zapisoval nějaký soubor. FAQ a mountovací volby btrfs nabízí přehršel možných řešení vzniklé situace. Jenže tyhle dohady bez přístupu k tomu obrazu disku, se kterým má problém jsou o ničem.

Z toho výpisu je zřejmé, že ten FS byl nejspíš na nějaké MicroSD kartě. Třeba už začala jít do kopru a odešel na ní kus, kde byl nějaký důležitý soubor. S tím nic nenadělá ani kdyby to kropil svěcenou vodou, ale data z toho vykopírovat půjdou, pokud taky zrovna nebyly v místech co se už nedaly přečíst.
13.5.2020 14:25 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: btrfs mount failed: No space left on device
Jo ten crash vidím stejně. Ty stránky jsem našel a zkoušel - netvrdím, že všechno.

Není to na SD kartě, je to interní paměť telefonu.

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.