Stellen Sie den ZFS-Pool wieder her, nachdem Sie ihn darüber erstellt haben

Stellen Sie den ZFS-Pool wieder her, nachdem Sie ihn darüber erstellt haben

Ich habe mein Ubuntu 14.04-System neu installiert und versucht, mein vorhandenes ZFS-Laufwerk zu mounten. Es ist ein einzelnes Laufwerk mit allen Daten darauf. Das Betriebssystem befindet sich auf einem anderen Laufwerk, das ZFS-Laufwerk enthält nur Daten.

Der Poolname ist crystal.

In meiner Eile (ja.) habe ichzpool create crystal /dev/disk-by-id/...etc...

Der Pool ist jetzt leer.

Gibt es eine Möglichkeit, den ursprünglichen Pool wiederherzustellen und/oder die Daten abzurufen?

Antwort1

Bedauerlicherweise:Nein nicht wirklich.

Es gibt, etwas unintuitiv, hauptsächlich zwei destruktive Operationen in ZFS: zfs destroyund zpool create. Insbesondere der Befehlzpool destroy Istnichtdestruktiv und tatsächlich ganz einfach umkehrbar, wenn Sie Ihren Fehler nur schnell erkennen;es setzt einfach eine Flagge, in diesem Fall zpool import -Dist es Ihr Freund.

Diese Befehle sind aus ähnlichen, aber leicht unterschiedlichen Gründen destruktiv:

  • zfs destroyist destruktiv, da es die Verweise auf den zu zerstörenden Datensatz entfernt, sodass es keine Möglichkeit gibt, ihn mit Standardtools auf der Festplatte zu finden. (Siehe aber auchdiese Frage.)
  • zpool createist destruktiv, da es alle Überblöcke des Pools überschreibt, was bedeutet, dass der ZFS-Code die Anfänge der Merkle-Baum-Datenstrukturen auf der Festplatte nicht finden kann. Sobald die Wurzel des Baums nicht mehr gefunden werden kann, sind die restlichen Daten nicht mehr zugänglich.

Beide Probleme werden durch das komplexe On-Disk-Format von ZFS noch verschärft, das alle Wiederherstellungsversuche zusätzlich erschwert. Bei den meisten anderen Dateisystemen werden Dateienallgemeinzusammenhängend oder an einer kleinen Anzahl unterschiedlicher Standorte liegen. Mit ZFS ist es durchaus möglich, dass Daten buchstäblich über die ganze Festplatte verteilt sind, sodass nach den obigen Befehlen nichts mehr übrig bleibt, das darauf hinweist, welche Teile wohin gehören. Um die Sache noch schlimmer zu machen, suchen Sie sicherlich nach komprimierten Datenblöcken und möglicherweise auch nach Dingen wie deduplizierten Daten. (Deduplizierung ist in Ihrem Szenario unwahrscheinlich, aber im Allgemeinen durchaus möglich.)

EskönnteEs ist möglich, einige ZFS-Experten für die Wiederherstellung Ihrer Daten zu engagieren, aber normale Datenrettungsdienste werden Ihnen an diesem Punkt wahrscheinlich nicht helfen können, und allgemein verfügbare Dateisystem-Wiederherstellungssoftware versteht ZFS nicht einmal. Vorausgesetzt, Sie finden Leute, die bereit sind, mit Ihnen zusammenzuarbeiten, wird es auchsehrteuer; ich habe Erwähnungen von Preisen gesehenbeginnendim fünfstelligen Dollarbereich für ähnliche Szenarien.

Ihre beste Wahl an diesem Punkt ist wahrscheinlich, eine aktuelle Sicherung Ihrer Daten wiederherzustellen und mit Ihrem Leben weiterzumachen.

Ich bin ehrlich gesagt ein wenig verwirrt, warum Sie den Pool mit einem Befehl überschreiben konnten, der dem in Ihrer Frage angegebenen ähnelt. Auf meinem System mit ZFS unter Linux 0.6.4, nachdem ich ein ähnliches Szenario erstellt hatte, wird zpoolder createVorgang mit einem Fehler „ungültige vdev-Spezifikation“ abgelehnt, der besagt, dass das zugrunde liegende Gerät is part of exported pool '...'… Sie hätten einen ähnlichen Fehler erhalten sollen, es sei denn, Sie haben ausdrücklich -fan zpool übergeben, um den Vorgang zu erzwingen. In diesem Fall sagen Sie ZFS, dass Sie tatsächlich wirklich …wollenum dies zu tun. Welchebesondersim Fall von ZFS ist in der Regelnichtwas willst du tun.

verwandte Informationen