Forum: PC Hard- und Software ZFS Pool nach DD Image und Rückspielung: I/O Error


von Rene K. (xdraconix)


Lesenswert?

Ich habe hier einen Proxmox Server.

Darin waren 2x 600GB Platten als Raid1 verbaut, welche an ihr Lifetime 
Ende kommen - für Das Stammsystem.

Nun wollte ich, Kraft meiner Wassersuppe, neue Platten einsetzen. Backup 
dieses Raids wurde immer mit DD gemacht, auch auf einen anderen Rechner. 
Also diese Backups liegen vor.

Nun die neuen Platten in den Rechner und mit DD das Image wieder 
aufgespielt. Soweit so gut. Der Rechner bootet in Grub und bootet 
weiter. Bis dann der Punkt kommt, an dem er das ZFS Volume booten will.

Dort bricht ab und sagt:
1
   pool: rpool
2
     id: 1858269358818362832
3
  state: FAULTED
4
 status: The pool metadata is corrupted.
5
 action: The pool cannot be imported due to damaged devices or data.
6
        The pool may be active on another system, but can be imported using
7
        the '-f' flag.
8
   see: http://zfsonlinux.org/msg/ZFS-8000-72
9
 config:
10
11
        rpool                  FAULTED  corrupted data
12
          sda3                 ONLINE

und bringt mich auf die initramfs commandline. Mit der Flag -f oder -F 
sagt er es liege ein I/O Error vor.

Ich lasse gerade mit zpool import -X rpool -F die Platte nochmal suchen.

Gibt es sonst noch einen Tipp, wie ich an die Daten in diesem Pool 
komme?
Es gibt zwar noch einen zweiten Server, auf denen das selbe System 
gespiegelt wird, dieses wird aber nur einmal im Monat gemacht. Zum 15. 
liegt also nun auch wieder vier Wochen zurück.

Für die Zukunft: Wie kann ich ein ZFS Volume sichern um später darauf 
wieder ohne Probleme zugreifen zu können? Wäre da ein rsync auf die 
Verzeichnissstruktur die bessere Wahl gewesen? Wie kann ich dies in 
Zukunft vermeiden?

von Tobias P. (hubertus)


Lesenswert?

Rene K. schrieb:
> Für die Zukunft: Wie kann ich ein ZFS Volume sichern um später darauf
> wieder ohne Probleme zugreifen zu können? Wäre da ein rsync auf die
> Verzeichnissstruktur die bessere Wahl gewesen? Wie kann ich dies in
> Zukunft vermeiden?

ZFS mit "zfs send" und "zfs receive" sichern.

von Rene K. (xdraconix)


Lesenswert?

Tobias P. schrieb:
> ZFS mit "zfs send" und "zfs receive" sichern.

Danke dir.


Im übrigen hat zpool -FX rpool auch nichts genutzt.

von Motopick (motopick)


Lesenswert?

Die alten Platten wieder in Betrieb zu nehmen waere wohl zu einfach?

von Motopick (motopick)


Lesenswert?

> Backup dieses Raids wurde immer mit DD gemacht

Scheinbar fehlen dem Backup die Metadaten.
Men koennte den Verbund zum Backup auch um eine Platte erweitern.
Dann wuerden wohl auf der nicht nur ein weiterer Mirror sondern
auch gleich die Metadaten mit abgelegt.

von Gustl B. (gustl_b)


Lesenswert?

DD geht schon, aber man muss es wirklich vom Device selbst machen und 
nicht von der Partition.

von Rene K. (xdraconix)


Lesenswert?

Motopick schrieb:
> Die alten Platten wieder in Betrieb zu nehmen waere wohl zu
> einfach?

Wenn dies ginge, stünde ich nicht vor dem Problem. :-) Das Raid wurde 
schon aus dem Verbund genommen. Eine Wiederherstellung war nicht 
erfolgreich.

von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Motopick schrieb:
> Scheinbar fehlen dem Backup die Metadaten.

Ja dies kann sein, aktuell schiebe ich die Sicherung über eine Ubuntu 
Live CD noch einmal über die HDD.

Ich weiß das man diese Metadaten auslesen kann.

Da muss ich mich noch belesen. Aktuell läuft der andere Server nun - 
halt mit veralteten Daten. Ich bräuchte ja halt wirklich auch nur eine 
einzigste Datei aus diesem Pool. :-D

Motopick schrieb:
> Men koennte den Verbund zum Backup auch um eine Platte erweitern.
> Dann wuerden wohl auf der nicht nur ein weiterer Mirror sondern
> auch gleich die Metadaten mit abgelegt.

Wie kann ich dies anstellen? Platten habe ich ja auch noch da. Aber wie 
kann ich diese Platte mit zu einem Verbund nehmen?

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

> Wie kann ich dies anstellen?

zpool add

von Rene K. (xdraconix)


Lesenswert?

Motopick schrieb:
>> Wie kann ich dies anstellen?
>
> zpool add

Ich kann ja leider nur über initramfs darauf zugreifen. Wenn ich eine 
zweite Platte dazu stecke dann mit dort folgendes tue:
1
zpool create rpool /dev/SDB
2
3
#pool auf der zweiten Platte wird erstellt
4
5
zpool add rpool /dev/sda3 -f

Wird diese Platte zwar zu dem Pool hinzugefügt, aber dieser ist 
scheinbar dann leer. Zumindest finde ich nichts, oder habe auch aktuell 
keine Ahnung wie ich auf diese Daten dann zugreifen oder mounten kann.

: Bearbeitet durch User
von Kevin M. (arduinolover)


Lesenswert?

Warum so kompliziert?

Du hättest die beiden neuen Platten einfach mit "zpool add" zum Mirror 
hinzufügen und sobald der Pool fertig synchronisiert hat die beiden 
alten mit "zpool remove" entfernen können.

Edit: Alternativ "zpool replace"
https://docs.oracle.com/cd/E19253-01/819-5461/gazgd/index.html

: Bearbeitet durch User
von Foobar (asdfasd)


Lesenswert?

Kann es sein, dass du einen dd des laufenden Systems gemacht hast?

von Rene K. (xdraconix)


Lesenswert?

Kevin M. schrieb:
> Du hättest die beiden neuen Platten einfach mit "zpool add" zum Mirror
> hinzufügen und sobald der Pool fertig synchronisiert hat die beiden
> alten mit "zpool remove" entfernen können.

Ja, nach meinem jetzigen Wissenstand weiß ich dies nun auch. ☺️ Vorher 
dachte ich, ein dd reicht völlig aus. Bei meinen anderen Linux Geräten 
ohne ZFS sondern mit EXT4 Dateisystem funktioniert diese vorgensweise 
sehr gut.

Foobar schrieb:
> Kann es sein, dass du einen dd des laufenden Systems gemacht hast?

Jup, habe ich.

von Tilo (Gast)


Lesenswert?

Dann darfst du dich wirklich nicht wundern.
Dd darf man nur dann nehmen, wenn die Partition nur lesend oder gar 
nicht eingebunden ist. Das gilt für jedes Dateisystem

von Norbert (der_norbert)


Lesenswert?

Tilo L. schrieb:
> Dd darf man nur dann nehmen, wenn die Partition nur lesend oder gar
> nicht eingebunden ist.

> Das gilt für jedes Dateisystem

Also ich habe hier ein ganz Spezielles mit dem es ganz wunderbar geht. 
Nennt sich EXT4. Hat ein Journal. Ein einfaches ›sync‹ vor dem ›dd‹ 
reicht aus. Nur das, was noch offen ist oder während des ›dd‹ erstellt 
wird, ist für's Image verloren.
Ein einfaches ›e2fsck -f‹ nach dem ›dd‹ säubert das Image, entfernt das 
›dirty‹ Flag und fertig.

Funktioniert hier regelmäßig, seit vielen Jahren!

von Jim M. (turboj)


Lesenswert?

Norbert schrieb:
> Also ich habe hier ein ganz Spezielles mit dem es ganz wunderbar geht.
> Nennt sich EXT4. Hat ein Journal.

Leider totaler Blödsinn.

Das Ext4 haut Dir bloss nicht sofort einen Fehler um die Ohren wenn Du 
es im laufenden Betrieb mit DD kopierst - aber die Daten können trotzdem 
auf interessante Weise kaputt sein sobald jemand während des DD Laufs 
aufs Laufwerk schreibt.

Das hier ist sogar der fiesere Fall, denn Du bekommts das erst später 
mit wenn es schief ging.

von Εrnst B. (ernst)


Lesenswert?

Norbert schrieb:
> Nennt sich EXT4. Hat ein Journal.

Hat nur ein Metadata-Journal. Mit deiner Methode geht das Dateisystem 
selbst bei dem Vorgang nicht direkt kaputt, aber was mit deinen Daten 
passiert steht in den Sternen.

Wenn du sowas unbedingt machen willst, LVM nehmen, sync&snapshot, dann 
dd vom snapshot, anschließend snaphot auflösen.
Ist auch nicht 100%ig, aber minimiert den Zeitraum in dem was schief 
gehen kann.

Bei ZFS und BTRFS brauchst du den LVM-Snapshot nicht, da können das die 
Dateisysteme selber. Auslesen des Snapshots per (zfs|btrfs) send.

Und, besonders elegant: Du kannst dir nur die Änderungen zwischen zwei 
Snapshots rausschreiben lassen. Perfekt für inkrementelle Backups.

von Norbert (der_norbert)


Lesenswert?

Na, dann habe ich ja wohl die vergangenen 10+ Jahre richtig fieses Glück 
gehabt und auch die ganzen Journal- und Commit-Optionen völlig 
fehlinterpretiert.

von Rene K. (xdraconix)


Lesenswert?

Das was mich gerade nur etwas ärgert ist halt einfach die Tatsache - das 
ich an keinsterlei Daten mehr gelange. Das Volume ist einfach nur weg - 
irreparabel.

Bei einem reinen Dateisystem wie EXT4 wäre dieses Problem nie 
aufgetreten.

Gut, da können selbstverständlich einige Daten auch verloren gehen - 
welche während des lesens geklonnt werden, aber nicht das komplette 
Laufwerke. Ich möchte mir garnicht ausmalen was passiert wenn der 
Raid-Controller den Geist aufgibt und ein ganzes Cluster weg wäre - 
irreparabel obwohl einzeln abgelegt.

Fakt eins: Der Server ist nun neu aufgesetzt und ich habe kein ZFS mehr 
genommen, sonder wieder EXT4.

von Εrnst B. (ernst)


Lesenswert?

Norbert schrieb:
> Na, dann habe ich ja wohl die vergangenen 10+ Jahre richtig fieses Glück
> gehabt und auch die ganzen Journal- und Commit-Optionen völlig
> fehlinterpretiert.

Ja. Das Journal sichert nur Metadaten-Operationen aus der Vergangenheit 
ab. Da dein "dd" nicht atomar läuft (wie's bei einem Read-Only-Snapshot 
der Fall wäre): Alle Änderungen am Dateisystem, die passieren nachdem 
dein dd über den Journal-Bereich drübergelaufen ist, sind natürlich 
nicht in deiner Journal-Kopie erfasst.

Wenn es anders wäre, müsste das Journal in die Zukunft sehen können:
Ich starte ein "dd", halte es mit Ctrl-Z an, nehme mir fest vor, nächste 
Woche eine Datei mit den Lottozahlen als Dateiname anzulegen, und 
extrahiere heute den Dateinamen schonmal vorab aus der mit dd angelegten 
Journal-Kopie.

von Norbert (der_norbert)


Lesenswert?

Εrnst B. schrieb:
> Ich starte ein "dd", halte es mit Ctrl-Z an, nehme mir fest vor, nächste
> Woche

Ernsthaft jetzt? Ich weiß ja nicht wie es mit Granitplatten und 
Keilschrift geht…

Hier geht's mit den Optionen:
›journal‹, ›journal_dev=‹, ›journal_ioprio=‹, ›commit=‹

von Foobar (asdfasd)


Lesenswert?

Norbert schrieb:
> Na, dann habe ich ja wohl die vergangenen 10+ Jahre richtig fieses Glück
> gehabt

Das weißt du ja erst, wenn du versuchst, eine Sicherung wieder 
einzuspielen.

> und auch die ganzen Journal- und Commit-Optionen völlig fehlinter-
> pretiert.

Nicht nur das.  Auch wenn Daten mit im Journal wären, würde das nicht 
helfen.  Diese absturzsicheren Dateisysteme sind sehr pingelig, was die 
Reihenfolge der Schreibzugriffe angeht.  Man darf diesen Strom zwar an 
einer beliebigen Stelle unterbrechen (Absturz, Stromausfall) und hat 
trotzdem noch ein konsistentes Dateisystem, man darf aber nicht wahllos 
Zugriffe entfernen.  Genau das passiert aber bei einem dd, der eine 
Weile dauert.

Beispiel: der dd hat zu einem Zeitpunkt die erste Hälfte der Platte 
gesichert.  Jetzt wird eine neue Datei angelegt.  Erstmal werden die 
Daten geschrieben, zufälligerweise in die erste Hälfte der Platte (der 
dd bekommt davon nichts mit, diese Schreibzugriffe gehen verloren).  Nun 
wird das Verzeichnis (liegt in der zweiten Hälfte der Platte) 
aktualisiert - zeigt nun auf die neuen Daten.  Das wird vom dd später 
auch noch gesichert.  Ergebnis: das gesicherte Verzeichnis zeigt auf 
alten Schrott.

Ernst schrieb:
> Wenn du sowas unbedingt machen willst, LVM nehmen, sync&snapshot, dann
> dd vom snapshot, anschließend snaphot auflösen.

Snapshots, egal ob LVM oder auf Filesystemebene bieten auf unterster 
Blockebene auch keine Konsistenz.  Die Sicherung muß jeweils eine Ebene 
höher stattfinden.  Bei LVM mag ein dd der Snapshot-Volume gehen, bei 
Filesystemsnapshots (z.B. btrfs, zfs) entsprechend auf Dateisystemebene 
(rsync/tar/cpio/send).


Noch mein Standardhinweis: Dieses Gehampel mit Snapshots im laufenden 
Betrieb ist nur Schlangenöl!  Snapshots garantieren keine konsistenten 
Anwendungsdaten.  Sie stellen nur die Konsistenz des Dateisystems 
sicher, nicht die der Anwendungsdaten.  Triviales Beispiel: während 
gerade ein Archiv erstellt wird, wird mittendrin ein Snapshot gemacht 
und der gesichert.  Die Sicherung enthält dann ein halb erstelltes und 
vermutlich kaputtes Archiv - merkt man aber erst, wenn man versucht, es 
zu benutzen.

Ein sicherer Backup geht nur, wenn man das System runterfährt (also alle 
Anwendungen stoppt), den Backup macht und dann wieder hochfährt.  Mit 
Snapshots kann man allerdings die Downtime drastisch reduzieren 
(runterfahren, snapshot, hochfahren, backup des snapshots).

von (prx) A. K. (prx)


Lesenswert?

Foobar schrieb:
> Noch mein Standardhinweis: Dieses Gehampel mit Snapshots im laufenden
> Betrieb ist nur Schlangenöl!

Snapshots auf Storage-Ebene beinhalten ein gewisses Risiko auf Ebene der 
Daten, sind aber fast immer nutzbar, soweit es die Bootfähigkeit des 
Betriebssystem angeht. Technisch unterscheidet sich das nur gering von 
Power Loss, und das können Systeme heute ganz gut wegstecken. Eine Image 
Kopie des laufenden Inhalts ohne Snapshot, wie es hier ja wohl der Fall 
war, ist etwas völlig Anderes.

Das hat auch etwas mit Aufwand zu tun. Ein Storage Snapshot dauert keine 
nennenswerte Zeit. Getrennte Datensicherungen ersetzt das nicht, aber 
nicht immer sind sie notwendig. Etwa wenn ein System nur durchlaufend 
verarbeitet, aber nicht selbst signifikant speichert.

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

Ich hatte mal so eine ähnliche Situation. 2 Partitionen waren in einem 
mdadm Raid 1. Dann ist mir aufgefallen, ich wollte da ja noch eine Swap 
Partition da drauf machen. Also habe ich erst mal das Dateisystem auf 
dem md verkleinert, und dann mit mdadm noch den Bereich den es nutzt 
verkleinert. Dann das raid gestoppt, und die Partition verkleinert. 
Wurde nicht mehr erkannt, waren wohl Metadaten irgendwo noch am Ende der 
Partition oder so. Aber mdadm --detail sah alles sauber aus... Also alte 
Partitionstabelle wieder eingespielt, ging wieder. Aber Partition 
grösser / kleiner machen, wollte es einfach nicht. Ich weiss nicht mehr, 
welche magischen Optionen ich "mdadm --grow" in welcher Reihenfolge 
mitgegeben habe, ich weiss nur noch, ich brauchte mehrere Aufrufe in 
unterschiedlicher Reihenfolge, aber irgendwie habe ich es dann doch 
hinbekommen, dass es die Metadaten an den richtigen Ort schreibt, und 
konnte die Partition dann doch verkleinern.

Ich weiss nicht, wie das mit ZFS ist, aber vielleicht hat das ja auch 
Probleme, wenn sich plötzlich die Grösse seines Speicherbereichs 
verändert, auch wenn es gross genug wäre?

Bezüglich dd, das während der Verwendung zu nehmen ist natürlich 
wirklich schlecht, das stimmt schon. Aber aus FS Sicht das sollte ja 
nicht gross anders sein, als ein plötzlicher PC Absturz oder so, wo 
nicht alles geschrieben wurde. In so einem Fall würde ich schon 
mindestens erwarten, dass man es noch RO mounten kann, immer noch besser 
als wenn man gar nicht mehr an die Daten kommt. Einem FS, das gleich 
komplett dicht macht, würde ich meine Daten nicht anvertrauen.

von (prx) A. K. (prx)


Lesenswert?

Daniel A. schrieb:
> Bezüglich dd, das während der Verwendung zu nehmen ist natürlich
> wirklich schlecht, das stimmt schon. Aber aus FS Sicht das sollte ja
> nicht gross anders sein, als ein plötzlicher PC Absturz oder so, wo
> nicht alles geschrieben wurde.

Nein, das ist völlig anders. Heutige Filesysteme sind darauf 
eingerichtet, einen schlagartigen Ausfall zu überleben. Nicht aber mit 
einer Disk-Kopie eines lebenden Systems zu arbeiten, die hinten eine 
halbe Stunde neuer ist vorne.

: Bearbeitet durch User
von Kevin M. (arduinolover)


Lesenswert?

Rene K. schrieb:
> Fakt eins: Der Server ist nun neu aufgesetzt und ich habe kein ZFS mehr
> genommen, sonder wieder EXT4.

ZFS ist nicht ohne Grund ein sehr verbreitetes und gerne genutztes 
Dateisystem im Serverbereich. Es kann nichts dafür das du es nicht 
richtig verwenden kannst.

Ich benutze es schon seit Jahren ohne Probleme bei meinem Home Server 
und bei meinem Root.

von (prx) A. K. (prx)


Lesenswert?

Foobar schrieb:
> Ein sicherer Backup geht nur, wenn man das System runterfährt (also alle
> Anwendungen stoppt), den Backup macht und dann wieder hochfährt.  Mit
> Snapshots kann man allerdings die Downtime drastisch reduzieren
> (runterfahren, snapshot, hochfahren, backup des snapshots).

Windows enthält im Rahmen der Volume Shadow Copy Infrastruktur einen 
Mechanismus, bei dem ein Snapshot auf Storage-Ebene sich dem 
Betriebssystem sowie darauf laufenden Anwendungen ankündigen kann. Damit 
können beispielsweise Anwendungen wie Datenbanksysteme sicherstellen, 
dass ein Snapshot auch auf deren Ebene konsistent ist. Downtime ist dann 
nicht erforderlich.

Dies kennzeichnet quiesced Snapshots in VMware, insoweit die 
Anwendungssoftware sich in den VSS einklinkt. Ein Backup-System für 
VM-Images, oder ein NAS-System auf dem die Images liegen, kann mit 
VMware kommunizieren, um temporäre Snapshots auf diese Art einzurichten.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.