ZFS snapshot Problem! Dateien werden nicht wieder hergestellt

pbtraveller

Well-Known Member
Hi,

Ich habe ein Problem mit ZFS snapshots oder verstehe einfach nicht wie das gehen soll:

Meine Maschine:
HP Server mit drei Platten im Raid-Verbund per ZFS. FreeBSD 8.2.

Root liegt auf dem ZFS pool, ich habe zum einrichten die folgende Anleitung verwendet:
https://www.dan.me.uk/blog/2010/02/08/booting-from-zfs-raid0156-in-freebsd/

Mein Problem.

Der Server dient als Netzwerkserver für Mac-Clients (afp). Gleichzeitig benutze ich ihn aber um zu basteln und FreeBSD besser kennen zu lernen.

Vor dem basteln lege ich jedes Mal einen Snapshot an mit folgendem Befehl:

zfs snapshot -r zroot@name

Die Idee ist, dass wenn ich etwas zerstöre oder ausversehen lösche, es mit einem Rollback wieder herstellen kann.

Ich bin bisher davon ausgegangen, das mit einem Rollback alles wieder so hergestellt wird, wie zum Zeitpunkt des anlegens des Snapshots war, d.h. alle Ordner sind wieder so da und die Dateien haben wieder den Inhalt den sie zum Zeitpunkt des Erstellens des Snapshots hatten. So jedenfalls kenne ich Snaphots. Ist dieses Verständnis falsch?

Gestern habe ich Ordner in eine jail verschoben, weil ich zukünftig den Dienst (afp) dort betreiben will. Heute morgen sind die files nicht mehr da!

Also wollte ich wieder zum letzten Snapshot zurück mittels

zfs rollback -r zroot@name

Aber siehe da, weder die Ordner noch sonstige Inhalte sind wieder da vor sie zum Zeitpunkt des Erstellens des Snapshots lagen. Was mach ich falsch?:grumble:

Vielen Dank für Eure Hilfe!

pbtraveller

PS. Leider ist das ganze ziemlich nervig, da in den scheinbar nicht wiederherstellbaren Veränderungen extrem viel Arbeit steckt. Ja, ich weiß, man sollte Backups machen, aber ich dachte snapshots würden hier einiges an Sicherheit bieten und außerdem hatte ich gerade keine ausreichend große Back-up Platte zur Hand.
 
" Heute morgen sind die files nicht mehr da!"

Hier liegt wohl schon das erste Problem...warum sind die Dateien nicht mehr da?

Welche Snapshots hast du denn alle? "zfs list -t snapshot" zeigt dir wie erwartet alle Snapshots an?

Snapshots sind im ZFS System vorhanden als unsichtbare .zfs Ordner. Wenn du also "cd /zroot/.zfs/" (respektive anpassen für die anderen ZFS Dateisysteme unterhalb von zroot) machst solltest du alle Snapshots als Verzeichnis sehen und dann auch in Snapshot "name" reingehen können und die benötigten Dateien per Hand rauskopieren können.
 
Hallo cla,

also ein zfs list -t snapshot zeigt mir folgendes an:

NAME USED AVAIL REFER MOUNTPOINT
zroot@mit Alias IP 50.9M - 609M -
zroot@07072011 254K - 559M -
zroot@16072011 204K - 559M -
zroot@22072011 151K - 559M -
zroot@test 77K - 559M -
zroot@test2 32K - 559M -
zroot@test3 32K - 559M -
zroot/tmp@zwei 0 - 3.14M -
zroot/tmp@mit Alias IP 0 - 3.14M -
zroot/tmp@07072011 30K - 3.14M -
zroot/tmp@16072011 24K - 3.14M -
zroot/tmp@22072011 0 - 3.14M -
zroot/tmp@22072011_2 0 - 3.14M -
zroot/tmp@test3 0 - 3.14M -
zroot/usr@zwei 125K - 2.04G -
zroot/usr@mit Alias IP 125K - 2.04G -
zroot/usr@07072011 119M - 2.45G -
zroot/usr@16072011 1.42G - 4.44G -
zroot/usr@22072011 2.52M - 3.66G -
zroot/usr@22072011_2 3.26M - 3.79G -
zroot/usr@test3 903K - 84.8G -
zroot/usr/home@zwei 0 - 540G -
zroot/usr/home@mit Alias IP 0 - 540G -
zroot/usr/home@07072011 7.18G - 551G -
zroot/usr/home@16072011 4.50G - 551G -
zroot/usr/home@22072011 360M - 556G -
zroot/usr/home@22072011_2 11.2M - 556G -
zroot/usr/home@test3 9.50M - 397G -
zroot/usr/ports@zwei 0 - 225M -
zroot/usr/ports@mit Alias IP 0 - 225M -
zroot/usr/ports@07072011 480K - 225M -
zroot/usr/ports@16072011 498K - 225M -
zroot/usr/ports@22072011 0 - 225M -
zroot/usr/ports@22072011_2 0 - 225M -
zroot/usr/ports@test3 0 - 225M -
zroot/usr/ports/distfiles@zwei 0 - 57.2M -
zroot/usr/ports/distfiles@mit Alias IP 0 - 57.2M -
zroot/usr/ports/distfiles@07072011 0 - 57.2M -
zroot/usr/ports/distfiles@16072011 0 - 57.2M -
zroot/usr/ports/distfiles@22072011 0 - 57.2M -
zroot/usr/ports/distfiles@22072011_2 0 - 57.2M -
zroot/usr/ports/distfiles@test3 0 - 57.2M -
zroot/usr/ports/packages@zwei 0 - 18K -
zroot/usr/ports/packages@mit Alias IP 0 - 18K -
zroot/usr/ports/packages@07072011 0 - 18K -
zroot/usr/ports/packages@16072011 0 - 18K -
zroot/usr/ports/packages@22072011 0 - 18K -
zroot/usr/ports/packages@22072011_2 0 - 18K -
zroot/usr/ports/packages@test3 0 - 20K -
zroot/var@zwei 19K - 132K -
zroot/var@mit Alias IP 19K - 132K -
zroot/var@07072011 172K - 262K -
zroot/var@16072011 61.5K - 154K -
zroot/var@22072011 31K - 130K -
zroot/var@22072011_2 31K - 129K -
zroot/var@test3 20K - 130K -
zroot/var/crash@zwei 0 - 18.5K -
zroot/var/crash@mit Alias IP 0 - 18.5K -
zroot/var/crash@07072011 0 - 18.5K -
zroot/var/crash@16072011 0 - 18.5K -
zroot/var/crash@22072011 0 - 18.5K -
zroot/var/crash@22072011_2 0 - 18.5K -
zroot/var/crash@test3 0 - 21.5K -
zroot/var/db@zwei 59K - 492M -
zroot/var/db@mit Alias IP 60K - 492M -
zroot/var/db@07072011 6.84M - 627M -
zroot/var/db@16072011 6.81M - 627M -
zroot/var/db@22072011 60K - 631M -
zroot/var/db@22072011_2 60K - 631M -
zroot/var/db@test3 67K - 631M -
zroot/var/db/pkg@zwei 0 - 437K -
zroot/var/db/pkg@mit Alias IP 0 - 437K -
zroot/var/db/pkg@07072011 44K - 439K -
zroot/var/db/pkg@16072011 42K - 439K -
zroot/var/db/pkg@22072011 0 - 439K -
zroot/var/db/pkg@22072011_2 0 - 439K -
zroot/var/db/pkg@test3 0 - 439K -
zroot/var/empty@zwei 0 - 18K -
zroot/var/empty@mit Alias IP 0 - 18K -
zroot/var/empty@07072011 0 - 18K -
zroot/var/empty@16072011 0 - 18K -
zroot/var/empty@22072011 0 - 18K -
zroot/var/empty@22072011_2 0 - 18K -
zroot/var/empty@test3 0 - 18K -
zroot/var/log@zwei 62K - 415K -
zroot/var/log@mit Alias IP 62.5K - 416K -
zroot/var/log@07072011 162K - 396K -
zroot/var/log@16072011 98.5K - 394K -
zroot/var/log@22072011 51.5K - 410K -
zroot/var/log@22072011_2 53K - 412K -
zroot/var/log@test3 75.5K - 414K -
zroot/var/mail@zwei 0 - 1.66M -
zroot/var/mail@mit Alias IP 0 - 1.66M -
zroot/var/mail@07072011 81.5K - 1.70M -
zroot/var/mail@16072011 67K - 1.74M -
zroot/var/mail@22072011 0 - 1.78M -
zroot/var/mail@22072011_2 0 - 1.78M -
zroot/var/mail@test3 0 - 1.78M -
zroot/var/run@zwei 19K - 51K -
zroot/var/run@mit Alias IP 19K - 51K -
zroot/var/run@07072011 48.5K - 52.5K -
zroot/var/run@16072011 36K - 51.5K -
zroot/var/run@22072011 31K - 53.5K -
zroot/var/run@22072011_2 31K - 53.5K -
zroot/var/run@test3 31K - 51.5K -
zroot/var/tmp@zwei 0 - 21K -
zroot/var/tmp@mit Alias IP 0 - 21K -
zroot/var/tmp@07072011 15K - 21K -
zroot/var/tmp@16072011 0 - 21K -
zroot/var/tmp@22072011 0 - 21K -
zroot/var/tmp@22072011_2 0 - 21K -
zroot/var/tmp@test3 0 - 21K -

wenn ich nach /.zfs/snaphot/22072011 gehe, dann kann ich dort zwar in das verzeichnis /home, dort sind aber keine Unterverzeichnisse oder Dokumente vorhanden. Ein ls -a gibt mir folgendes aus:
.cshrc .history .k5login .login .profile .ssh


Meine gesuchten Dokumente befanden sich unter /home/username

Was mir aber immer noch ein Rätsel ist. Ich habe die Dokumente per mv /home/username nach /usr/jail/jailname/home/username kopiert. Was soll daran falsch sein?

Irgend eine Idee?

Danke und Gruß

pbtraveller

PS. Witzigerweise befindet sich ein Teil der Ordner tatsächlich im Zielordner. Bin sprachlos..
 
Snapshots sind ein sehr einfaches Backup. Wenn Du experimentierst, ob Snapshots so funktionieren, wie Du Dir das denkst, dann ist es vielleicht von Vorteil ein restaurierbares Backup zu haben.

Ich mache leider nur zfs send von Snapshots und habe noch nie rollback ausprobiert. Aber schau bitte mal was mit den Mountpoints passiert, wenn man Rollback macht.
 
Hi,

Ich habe ein Problem mit ZFS snapshots oder verstehe einfach nicht wie das gehen soll:

Meine Maschine:
HP Server mit drei Platten im Raid-Verbund per ZFS. FreeBSD 8.2.

Root liegt auf dem ZFS pool, ich habe zum einrichten die folgende Anleitung verwendet:
https://www.dan.me.uk/blog/2010/02/08/booting-from-zfs-raid0156-in-freebsd/

Mein Problem.

Der Server dient als Netzwerkserver für Mac-Clients (afp). Gleichzeitig benutze ich ihn aber um zu basteln und FreeBSD besser kennen zu lernen.

Vor dem basteln lege ich jedes Mal einen Snapshot an mit folgendem Befehl:

zfs snapshot -r zroot@name

Die Idee ist, dass wenn ich etwas zerstöre oder ausversehen lösche, es mit einem Rollback wieder herstellen kann.

Ich bin bisher davon ausgegangen, das mit einem Rollback alles wieder so hergestellt wird, wie zum Zeitpunkt des anlegens des Snapshots war, d.h. alle Ordner sind wieder so da und die Dateien haben wieder den Inhalt den sie zum Zeitpunkt des Erstellens des Snapshots hatten. So jedenfalls kenne ich Snaphots. Ist dieses Verständnis falsch?

Gestern habe ich Ordner in eine jail verschoben, weil ich zukünftig den Dienst (afp) dort betreiben will. Heute morgen sind die files nicht mehr da!

Also wollte ich wieder zum letzten Snapshot zurück mittels

zfs rollback -r zroot@name

Aber siehe da, weder die Ordner noch sonstige Inhalte sind wieder da vor sie zum Zeitpunkt des Erstellens des Snapshots lagen. Was mach ich falsch?:grumble:

Vielen Dank für Eure Hilfe!

pbtraveller

PS. Leider ist das ganze ziemlich nervig, da in den scheinbar nicht wiederherstellbaren Veränderungen extrem viel Arbeit steckt. Ja, ich weiß, man sollte Backups machen, aber ich dachte snapshots würden hier einiges an Sicherheit bieten und außerdem hatte ich gerade keine ausreichend große Back-up Platte zur Hand.


Bitte sei so gut und setze ein
Code:
zpool history

ab.

Damit kann man dann wirklich erst mal nachverfolgen was zfs und der User gemacht haben.

So wird ein Schuh draus.

Danke im voraus.
 
ist /home nicht normalerweise ein symlink zu /usr/home? guck dort mal nach... das ist auch ein anderes fs als /.
 
/hmoe ist nur dann ein Symlink nach /usr/home, wenn kein /home existierte als der erste User mit adduser angelegt wurde. Mit ZFS bietet es sich allerdings an einen eigenen Mountpoint als "/hom" und einen pro User zu verwenden. Das macht Quotas deutlich einfacher und erlaubt bequeme Backups.
 
bei pbtraveller ist es aber definitiv in /usr/home:

zroot/usr/home@zwei 0 - 540G -
zroot/usr/home@mit Alias IP 0 - 540G -
zroot/usr/home@07072011 7.18G - 551G -
zroot/usr/home@16072011 4.50G - 551G -
zroot/usr/home@22072011 360M - 556G -
zroot/usr/home@22072011_2 11.2M - 556G -
zroot/usr/home@test3 9.50M - 397G -
 
Liebe alle,

ich habe die Daten wieder!!!! Also hier ist die Lösung (auch wenn ich sie nicht ganz verstehe).

Wenn ich per

cd /.zfs/snapshot/22072011

in das dortige Verzeichnis wechsel und von dort weiter per cd in /usr/home/ und dort ein
ls
absetze, bekomm ich nichts angezeigt.

Wenn ich ich außerdem per

zfs rollback -r zroot@22072011

zurückgehe, wird in /home nichts zurückgespielt. Lege ich also per mkdir in home einen Ordner, mache dann ein snapshot, und will diesen snapshot per

zfs rollback -r zroot@name

zurückspielen, taucht das Verzeichnis nicht wieder auf. Wenn ich aber genau das Gleiche im Verzeichnis /etc/ mache, funktioniert es. D.h. ich lege in /etc/ einen Unterordner an, mache ein Snapshot per "zfs snapshot -r zroot@name2", lösche dann den ordner per "rm -r testordner" und gehe dann per "zfs rollback -r zroot@name2" zum letzten Stand zurück, ist der Ordner wieder da.

Woher verdammt kommt der Unterschied?

zpool history gibt mir über den Erstellungsvorgang folgendes aus:

2011-06-15.21:12:47 zpool create -f zroot raidz1 /dev/gpt/disk0 /dev/gpt/disk1
2011-06-15.21:13:07 zfs set checksum=fletcher4 zroot
2011-06-15.21:13:46 zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
2011-06-15.21:14:46 zfs create zroot/usr
2011-06-15.21:14:57 zfs create zroot/usr/home
2011-06-15.21:15:40 zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
2011-06-15.21:16:23 zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
2011-06-15.21:17:02 zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
2011-06-15.21:17:17 zfs create zroot/var
2011-06-15.21:17:47 zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
2011-06-15.21:18:16 zfs create -o exec=off -o setuid=off zroot/var/db
2011-06-15.21:18:55 zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
2011-06-15.21:19:25 zfs create -o exec=off -o setuid=off zroot/var/empty
2011-06-15.21:20:09 zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
2011-06-15.21:20:59 zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/mail
2011-06-15.21:21:24 zfs create -o exec=off -o setuid=off zroot/var/run
2011-06-15.21:21:52 zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
2011-06-15.21:43:04 zfs set readonly=on zroot/var/empty
2011-06-15.21:47:31 zpool export zroot
2011-06-15.21:47:44 zpool import zroot
2011-06-15.21:50:52 zfs set mountpoint=legacy zroot
2011-06-15.21:51:12 zfs set mountpoint=/tmp zroot/tmp
2011-06-15.21:51:27 zfs set mountpoint=/usr zroot/usr
2011-06-15.21:51:40 zfs set mountpoint=/var zroot/var


Meine Daten habe ich ganz einfach über folgenden Befehl wieder bekommen:

zfs rollback -r zroot/usr/home@name

Warum das mit zfs rollback -r zroot@name nicht ging, bleibt mir ein Rätsel.

Wenn mir jemand sagen kann, woran das liegt, bin ich für jede Erklärung dankbar. Ansonsten bin ich erst mal froh, dass meine Daten wieder da sind!

Gruß an Euch alle, vielen Dank für Eure Anmerkungen und eine gute (und jetzt auch entspannte) Nacht!

pbtraveller
 
Dir ist schon klar, dass "-r" nicht rekursiv heißt, sondern lokal operiert und zerstört neuere Snapshots im gleichen Dateisystem. Man kann nämlich nicht rollback zu einem Status machen, wenn dieser Status Nachfolger hat (Snapshots aus der Zukunft gibt es nicht!).
 
Ja, das war meine große Erkenntnis gestern Abend, kurz nachdem ich meinen Post oben abgesetzt hab. Wer lesen ist (und dabei nachdenkt) ist klar im Vorteil.

Vielen Dank für Eure Hilfe!

pbtraveller
 
Zurück
Oben