Wie behebe ich btrfs? [geschlossen]

9

Ich habe Mailinglisten durchsucht und bin schließlich auf Ubuntus btrfsSeite gelandet. Ich habe das Gefühl, dass es btrfs immer noch kein vollständiges Fixing-Dienstprogramm gibt (wie auf der Homepage angegeben ). Obwohl es vor Monaten als Standard für Oracle Linux vorgesehen war und in vielen Distributionen enthalten ist.

Gibt es stattdessen irgendwo eine Anleitung zur Fehlerbehebung, wie man das Problem behebt btrfs?

Wenn dies nicht gelingt, werden durch das Kopieren meiner Backups über meinen FS Probleme behoben? (Beim Löschen von Snapshots, falls für Speicherplatz erforderlich? Oder zum Löschen von Beschädigungen?) Sollte ich stattdessen versuchen, zu einem vorherigen Snapshot zurückzukehren und dann fehlende Dateien aus der Sicherung wiederherzustellen? Oder fehlende Dateien aus meinen @ und @ home-Snapshots wiederherstellen?

Hinweis : Dies ist eine allgemeine Frage. Ich habe meine genauen FS-Probleme (im Moment) absichtlich weggelassen. Ich möchte einen allgemeinen / kanonischen Workflow und eine Anleitung zur Fehlerbehebung finden.

(Ok, ok - hier einige weitere Details;)) :

Ich habe mich während eines blockierten Herunterfahrens ausgeschaltet und wurde daher mit einer Systeminstabilität konfrontiert. Das System startet und läuft einige Zeit, bis es genügend Daten schreibt und einfriert. Das letzte Mal hatte ich gerade Thunderbird geöffnet. Diese erfordern mehr Hard-Resets und vermutlich mehr Korruption. sudo btrfsck /dev/sda1pendelt zwischen einigen Fehlern - oft beim ersten Mal der Form

root 338 inode 7861227 errors 1000
root 338 inode 7904568 errors 1000
root 338 inode 7955174 errors 400
found 46242054144 bytes used err is 1
total csum bytes: 43112400
total tree bytes: 2074640384
total fs tree bytes: 1889853440
btree space waste bytes: 547680627
file data blocks allocated: 110756974592
 referenced 68393684992
Btrfs Btrfs v0.19

oooo, jetzt ist es richtig fruchtig (ich habe nur erwartet, parent transid verify failedhier zu sehen ...)

parent transid verify failed on 14266105856 wanted 464223 found 464221
parent transid verify failed on 14266105856 wanted 464223 found 464221
Extent back ref already exists for 14261530624 parent 0 root 256 
leaf parent key incorrect 14261751808
bad block 14261751808
Extent back ref already exists for 66455355392 parent 0 root 2 
Extent back ref already exists for 66455257088 parent 0 root 2 
Extent back ref already exists for 14257274880 parent 0 root 2 
block 14262571008 rec extent_item_refs 2, passed 2
block 14262575104 rec extent_item_refs 1, passed 1
block 14262579200 rec extent_item_refs 1, passed 1
Extent back ref already exists for 14262579200 parent 0 root 257 
leaf 14263906304 items 50 free space 132 generation 464224 owner 2
fs uuid 7d049403-cf6e-4b52-a624-32051e1f5b2a
chunk uuid be6f8f93-320c-4465-85d6-f53907698c32
item 0 key (14263341056 EXTENT_ITEM 4096) itemoff 3944 itemsize 51
    extent refs 1 gen 464168 flags 2
    tree block key (8332576 1 0) level 0
    tree block backref root 257
item 1 key (14263345152 EXTENT_ITEM 4096) itemoff 3893 itemsize 51
    extent refs 1 gen 464168 flags 2
    tree block key (8332586 c 8332543) level 0
    tree block backref root 257
failed to find block number 14263525376

(Alles natürlich stark zusammengefasst; ich wollte dich nie mit diesen Details überwältigen :))

Und jetzt lässt mich meine endgültige Hinrichtung mit dem Vertrauten zurück:

parent transid verify failed on 14265458688 wanted 464230 found 464221
parent transid verify failed on 14265458688 wanted 464230 found 464221
parent transid verify failed on 14265458688 wanted 464230 found 464223
btrfsck: root-tree.c:46: btrfs_find_last_root: Assertion `!(path->slots[0] == 0)' failed.

, einschließlich des optionalen Zufallsfehlers am Ende. Oh glückliche Freude. Beachten Sie, dass sich diese verify failedändern, wenn Daten auf das Laufwerk geschrieben werden.

Ein weiterer zufälliger Fehler:

btrfsck: disk-io.c:412: find_and_setup_root: Assertion `!(!root->node)' failed.
Stephen
quelle
2
Dies scheint zu offen. Veröffentlichen Sie Ihr aktuelles Problem. Es zu verschleiern hilft niemandem.
Chris Down
Ich habe mich kürzlich entschlossen, es auszuprobieren und es als Root für ein neues System zu verwenden. Der Macine wurde hart zurückgesetzt (nicht fragen) und kam nie wieder vollständig hoch. Damals fand ich heraus, dass der fsck für btrfs nicht vollständig ist! Wow, ich kann nicht glauben, dass es eine Option für ein Root-Dateisystem war, so cool es auch sein mag
Barrymac
Ich benutze meine seit ungefähr 7 Monaten erfolgreich. Ich dachte, es muss fast ein ordentliches fsck sein, als ich tatsächlich auf dieses Problem stieß (was unvermeidlich war, wenn ich "experimentiere" ...)
Stephen
1
Ach komm schon. Ist es zu weit, "Probleme" mit Aktivitäten gleichzusetzen (entweder unter Linux, btrfs oder externen Aktionen a-la-Stromausfälle), die zu Korruption führen? Welches andere wichtige Problem würde ein unglücklicher Benutzer beim Umgang mit einem Dateisystem haben? Ja, nicht die 100% beste Wortwahl, aber einen Kommentar mit dem Wort "leer" zu rechtfertigen, ist nicht der Fall. Denken Sie daran, dass Linux immer mehr zum Mainstream wird (wie auch btrfs) und es Neulinge geben wird (was ich nicht bin). Also lasst uns mit "@ChrisDown" fortfahren. Ich vermute also, dass es keine vernünftige Anleitung zur Fehlerbehebung für btrfs gibt
Stephen
1
Wenn Sie eine Anleitung zur Fehlerbehebung wünschen, sollten Sie danach fragen (das ist nicht vage). Nach einem Leitfaden zu fragen, der darauf basiert, ob ein unglücklicher Benutzer einen solchen Wortlaut verwenden würde, scheint eine schlechte Methode zu sein, um eine Frage zu stellen ...
Chris Down

Antworten:

6

Um bei der Antwort zu helfen:

Überprüfung der übergeordneten Transid fehlgeschlagen am 14265458688 gesucht 464230 gefunden 464221

Kann behoben werden mit:

$ btrfs-zero-log DEVICE

HINWEIS: Daten können verloren gehen! Versuchen Sie zuerst, mit zu montieren:

$ mount -t btrfs -o recovery,nospace_cache,clear_cache DEVICE MOUNTPOINT

Wenn Daten nicht gemountet werden können, heißt es "bad fs":

$ btrfs restore DEVICE DIRECTORY_TO_DUMP_DATA_TO

Hier ist eine echte, wenn auch schwer zu verfolgende E-Mail, die ich gesendet habe, um seine Lösung zu klären. Hoffentlich können Sie diese kryptische Erklärung erkennen:

Auszug aus der E-Mail

Betreff: Frage: Wie kann ich diese Partition wiederherstellen? (logisch $ hugenum len 4096 nicht gefunden)

Hugo Mills carfax.org.uk> schreibt:

Am Montag, den 26. August 2013 um 13:10:54 Uhr -0600 schrieb Chris Murphy:

Am 26. August 2013 um 11:41 Uhr schrieb Nick Lee nickle.es>:

Vor einigen Tagen gab es im IRC eine Diskussion darüber, dass das Problem mit dem Block der Baumwurzel wahrscheinlich auf ein Problem mit der Festplatte selbst oder auf die Blockbaum- / logischen Zuordnungen zurückzuführen ist. Ich ließ den Chunk wiederherstellen, sah mir die gefundenen Fehler an und drückte auf Schreiben. (Wenn es fehlschlug, würde ich etwas Photorec ausführen, Organisationsverlust als Nebeneffekt.)

Ich kann etwas klarer schreiben, nachdem mein Flug morgen gelandet ist, wenn Sie wollen.

Ich bin nur neugierig, wann ich verschiedene Techniken anwenden soll: -o Wiederherstellung, btrfsck, Chunk-Wiederherstellung, Null-Protokoll.

Nehmen wir an, Sie haben keinen physischen Gerätefehler (dies ist eine andere Gruppe von Tools - mount -degraded, btrfs dev del fehlt).

Als erstes nehmen Sie ein btrfs-image -c9 -t4 des Dateisystems und behalten eine Kopie der Ausgabe, um josef anzuzeigen. :) :)

Beginnen Sie dann mit -orecovery und -oro, Wiederherstellung für so ziemlich alles.

Wenn diese fehlschlagen, suchen Sie in dmesg nach Fehlern im Zusammenhang mit dem Protokollbaum. Wenn diese beschädigt sind und nicht gelesen werden können (oder einen Absturz verursachen), verwenden Sie btrfs-zero-log.

Wenn es Probleme mit dem Blockbaum gibt - der einzige, den ich kürzlich gesehen habe, war die Meldung von "Adresse kann nicht zugeordnet werden" -, kann die Blockwiederherstellung hilfreich sein.

Danach ist btrfsck wahrscheinlich das nächste, was Sie versuchen sollten. Wenn die Optionen -s1, -s2, -s3 erfolgreich sind, hilft btrfs-select-super, indem der Superblock durch einen funktionierenden ersetzt wird. Wenn dies nicht sinnvoll ist, greifen Sie auf btrfsck --repair zurück.

Schließlich kann btrfsck --repair --init-Extent-Tree erforderlich sein, wenn ein beschädigter Extent-Baum vorhanden ist. Wenn die Prüfsummen beschädigt sind, gibt es schließlich --init-csum-tree.

Hugo.

Kossboss
quelle
Transid-Probleme treten auch auf, wenn eine TRANSAKTION (Schreiben oder Löschen) auftritt, wenn das Gerät abrupt ausgeschaltet wird. Beim Booten wird ein bestimmter Wert erwartet. Wenn diese TRANSAKTION jedoch nicht auf die Festplatte geschrieben wurde (sondern nur zum Protokollieren, das sich manchmal auch auf der Festplatte befindet), treten diese Fehler auf. Beachten Sie, wie es 464230 erwartet hat, aber ein älteres 464221 wie 9 Transaktionen vor 9 bekommen hat. 9 ist viel, so dass Sie möglicherweise Datenverlust haben (oder wenn Löschen war, könnte die Übertragung mehr Daten haben). Ich fühle mich normalerweise sicher, wenn es nur 1 oder 2 aus ist .
Kossboss
Ich muss für die Bereitstellung einer Antwort belohnen, obwohl ich keine Ahnung habe, ob sie gültig ist. Seitdem bin ich von btrfs weggezogen, da ich einfache Anforderungen habe (Zuverlässigkeit und die Möglichkeit, so viele Medien wie möglich auf einer Festplatte zu stopfen).
Stephen