Wie kann ich eine BTRFS-Partition wiederherstellen, die nicht bereitgestellt wird?


13

Die Installation für 12.04 schlug weiterhin fehl, und die Lösung bestand darin, dass das Installationsprogramm die btrfs-Partition ignorierte, die ich zuvor für / home verwendet hatte.

Jetzt, da es installiert ist, habe ich versucht, es dazu zu bringen, die btrfs-Partition zu mounten, damit ich auf meine 70 GB Dateien zugreifen kann. Es wird nicht gemountet und btrfsck macht Fehler mit den folgenden drei Zeilen:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

Kann mir bitte jemand sagen, wie diese Partition funktioniert? Ich habe online gelesen, dass ich die Daten wahrscheinlich mit btrfs-restore wiederherstellen kann, aber ich kann dieses Programm nirgendwo finden.

Antworten:


10

Einfachster Weg

btrfs-zero-log /dev/sda5

Sie erhalten dieses Problem, weil eine Transaktion (Schreiben oder Löschen) im Journalprotokoll steckt und die Festplatte nicht mit dieser übereinstimmt.

Wie es funktioniert:

Wenn also Daten zuerst geschrieben werden, werden sie in das Journal und dann auf die Festplatte geschrieben (oder gleichzeitig, aber das Journal speichert nur Metadaten über das bevorstehende Schreiben - nicht sicher ... muss in diesem Teil weiter recherchiert werden) ...

Wie auch immer , wenn das System in der Mitte dieses Schreib deaktivieren / löschen oder etwas hickups das System (absteigen den USB , dass Ihre Btrfs - Mount - Punkt hält), dann , wenn es zurückkehrt , das wird nicht funktionieren montieren wird es (fail dmesg und btrfsck Wille zeige dir die Fehler genauer) ...

Wenn Sie sich dmesg ansehen, werden Sie dieselben transiden Nachrichten sehen.

Sie werden so etwas sehen:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Dies bedeutet, dass btrfs Transif 1826 (das war im Journal) wollte, aber auf der Festplatte sah es 1821. Die Festplatte war also 2 Transaktionen von der Synchronisierung mit dem Journal entfernt. Ich persönlich würde hier ein brtfs-zero-log riskieren, nur weil es nur 2 Transaktionen sind. Aber um 100% sicher zu sein, wenn dies Ihre einzigen Daten sind (übrigens, wenn Sie kritische Daten haben, sollten Sie NIEMALS nur eine Kopie davon haben, immer eine Kopie / Sicherung an einem sicheren anderen Ort haben - die Urheber von btrfs würden dies nicht tun Rechtfertigen Sie gegen die mangelnde Verantwortung der Person, kein Backup zu haben - btrfs ist keine Backup-Lösung, es ist ein Dateisystem - nichts ist eine echte Backup-Lösung, außer eine Kopie davon zu haben, wo - nicht einmal Parität oder gespiegelte Laufwerke, ein echtes Backup ist irgendwo unter der Erde in den Alpen sitzen, während sich die aktive Kopie in Ihrem Büro in Texas befindet)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Hier will das Journal 62455, aber die Festplatte ist bei 62456 eins voraus, also würde ich in Ihrem Fall nur das Journal löschen. Das Journal wurde dieses Mal nicht aktualisiert. Wieder sagte ich Ihnen, dass Sie sicher sind, wenn es Ihre einzigen Daten sind und dass es mega kritisch ist (Schande über Sie), und ich würde die folgenden Operationen zuerst ausführen, um sicher zu sein.

Wenn Sie ein btrfsck / dev / sda5 ausführen (das übrigens nur eine schreibgeschützte Überprüfung durchführt, damit es absolut sicher ist, die einzigen btrfsck-Optionen, über die Sie sich Sorgen machen müssen), werden Ihnen auch diese Meldungen angezeigt.

Aber Vorsicht, wenn diese Daten kritisch sind, würde ich zuerst tun (wie die anderen Herren sagten)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Dann cp oder rsync alle Ihre Dateien an einen sicheren Ort, dann, wenn sicher, das btrfs-zero-log, wenn es ein erfolgreicher Vorgang ist, haben Sie nur viel Zeit mit dem Sichern Ihres Systems verschwendet (aber wenn es nicht erfolgreich ist, haben Sie nur Ihre gespeichert Arsch)

Wenn die Mounts fehlgeschlagen sind, führen Sie eine btrfs-Wiederherstellung durch (Speicherauszug des Systems, wie ich verstehe, ist eine wiederaufnehmbare Operation, fragt jedoch immer wieder nach Y oder y, beobachten Sie also die Ausgabe).

btrfs restore /dev/sda5 /USB

Wenn es sicher ist (wenn die Wiederherstellung von btrfs abgeschlossen ist), führen Sie das btrfs-Null-Protokoll durch. Wenn es ein erfolgreicher Vorgang ist, haben Sie nur viel Zeit damit verschwendet, Ihr System zu sichern (aber wenn es nicht erfolgreich ist, haben Sie nur Ihren Arsch gerettet).

Sie können zuerst den Bildschirm ausführen

screen /bin/bash

btrfs restore /dev/sda5 /USB

BILDSCHIRMSEITE HINWEIS

Zum Trennen (Befehl wird weiterhin ausgeführt): CONTROL-a Geben Sie ": trennen" ohne Anführungszeichen ein und drücken Sie die EINGABETASTE

Eine andere Möglichkeit zum Trennen: Schließen Sie dann Putty oder Ihr Terminal und es wird sich lösen (der Befehl / die Wiederherstellung wird weiterhin ausgeführt).

Um dies zu überprüfen, kehren Sie einfach zurück:

screen -x

Bildschirm -x wird an Sitzungen angehängt, auch wenn er getrennt ist, und im Gegensatz zu -h wird er angehängt, auch wenn er bereits angehängt ist.

Wenn Sie mehrere Bildschirme haben, zeigt Bildschirm -x an, dass Sie spezifischer sein müssen, um eine Verbindung zur Sitzung herzustellen:

screen -ls

ls für die Auflistung aller Sitzungen, leicht zu merken, dass.

Um die PID zu sehen, können Sie auch Folgendes tun:

ps aux | grep screen

Wenn Sie Ihre PID herausgefunden haben, führen Sie den Bildschirm folgendermaßen aus:

screen -x PID

Das wird an eine bestimmte Sitzung angehängt. Sie können mehrere Sitzungen / Puttys an denselben Bildschirm anhängen (sie geben denselben Text aus, Sie können Befehle in einen eingeben und sie werden auf dem anderen Putty gespiegelt).


7

Beim Booten mit Root-Mount-Optionen einbinden:

rootflags=recovery,nospace_cache

oder

rootflags=recovery,nospace_cache,clear_cache

Die vollständige Liste der btrfs-Mount-Optionen sollte hier zu finden sein: https://btrfs.wiki.kernel.org/index.php/Mount_options und andere Dinge können ebenfalls nützlich sein, z Chance, meine Dateien zu kopieren).

Fügen Sie es Ihrer grub.cfg / menu.lst hinzu oder geben Sie es beim Booten ein.

Das nospace_cache-Zeug wird die Dinge furchtbar langsam machen. Einfach hochfahren, warten (lange), herunterfahren und normal hochfahren.

Ich hatte vor ein paar Tagen das Gleiche und das oben Gesagte hat es behoben. Aber auch danach gab es einige Platzprobleme ... Der gemeldete Platz ist nicht 100%, aber es kann immer noch nicht genügend Platz angegeben werden.

==

Ich denke, Sie können auch die gleichen Optionen in Ihre fstab hinzufügen, zum Beispiel:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Wenn Sie versucht haben, ein / home-Verzeichnis wiederherzustellen, das über eine Partition mit gemountet wurde UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.


Warum zwei nospace_cache?
ein CVn

Es war ein Tippfehler, sollte clear_cache sein
Peter

:) Du hast gerade durch Backup gespeichert!
Derflocki

1

Peters Antwort löste das Problem für mich, allerdings nicht unter Ubuntu. Ich hatte eine /homePartition btrfs'd, die natürlich beschädigt wurde. Das System konnte nicht gestartet werden, da es eingeschaltet war fstab. Ich bin in den Wartungsmodus gegangen, habe die Leitung mit dieser Partition gehasht und normal gestartet (ich hatte eine Ersatz-ext4-Partition, als die ich verwenden konnte /home).

Ich habe die Partition manuell mit dem folgenden Befehl gemountet:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3und konnte tatsächlich meine Daten speichern. Obwohl es nicht so lange dauerte, es zu montieren. Also DANKE Peter.


3
Vielleicht möchten Sie das einfach als Kommentar zu Peters Antwort posten und sagen: "Das hat funktioniert", und das dann einfach als die wahre Antwort markieren. Andernfalls erhält Peter keine "echte" Gutschrift (Wiederholungspunkte)
Thomas Ward

1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = schreibgeschützt

Diese Arbeit für mich


1
Haben Sie den Kommentar von @The Lord of Time zu einem ähnlichen Kommentar gelesen, der als Antwort hinzugefügt wurde? Hier ist es wieder, wenn Sie es nicht getan haben - "Vielleicht möchten Sie das einfach als Kommentar zu Peters Antwort posten und" Das hat funktioniert "sagen und dann einfach als die wahre Antwort markieren. Andernfalls wird Peter keine" wahre "Antwort erhalten. Kredit (
Wiederholungspunkte

1

Ich hatte das gleiche Problem. Nach einem Neustart konnte ich meine btrfs-Partition nicht mehr mounten. Keine der hier genannten Lösungen konnte dies jedoch lösen.

Was es für mich behoben hat, war das Upgrade des Kernels von 3.10 auf 3.12. Nach einem Neustart konnte die btrfs-Partition erneut gemountet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.