wie weiter bei ZFS mit Fehlern ?

pit234a

Well-Known Member
Das FreeBSD auf meinem File-Server ist ein 7.4 und entsprechend alt das ZFS.
Nun ist mir ein Netzteil gestorben und nach Reparatur dann eine der "Alten" Platten kurze Zeit später dramatisch abgeraucht. Von diesen "Alten" Platten hatte ich noch drei in meinem Pool, sie haben über 63.000h auf dem Buckel. Zwei andere Platten sind neuer, wurden bereits im Laufe des Lebens dieses Servers schon mal erneuert.

Nun hatte ich den Plan, die "Alten" Platten alle zu ersetzen und damit meinen Vorrat an 1TB Platten auch aufzubrauchen. Eine weitere der alten Platten zeigt seit einiger zeit schon gelegentliche Read-Errors.

Allerdings hatte das dramatische Ende dieser einen Platte wohl zur Folge, dass ich nun ein ZFS mit einigen Fehlern habe. Es wird mir eine kurze Liste mit betroffenen Dateien vorgelegt. Löschen dieser Dateien ist kein Problem, aber damit verschwinden die Fehler nicht.

Ich zeige mal die Meldung:
Code:
# zpool status -v
  pool: raid1
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver completed after 8h59m with 7 errors on Thu May 26 19:40:04 2016
config:

	NAME            STATE     READ WRITE CKSUM
	raid1           DEGRADED     0     0     0
	  raidz1        DEGRADED     0     0     0
	    ad6         ONLINE       0     0     0  409M resilvered
	    ad8         ONLINE       0     0     0  408M resilvered
	    ad10        ONLINE       0     0     0  409M resilvered
	    replacing   DEGRADED     0     0     0
	      ad12/old  REMOVED      0     0     0
	      ad12      ONLINE       0     0     0  768G resilvered
	    ad14        ONLINE       0     0     0  409M resilvered

errors: Permanent errors have been detected in the following files:
...Liste mit Dateien...

Nun bekomme ich den Zustand meines Pools nicht mehr auf Sauber. Er ist mit der replaceten Platte immer noch DEGRADED und wie gesagt scheint das Löschen der betroffenen Dateien da nichts zu ändern. (Versuchsweise habe ich eine aus der Liste gelöscht, der name verschwindet, ein Eintrag in der Liste bleibt).
Die weiteren Platten zu tauschen traue ich mich da nun nicht. Ich möchte schon erst den Pool wieder aus dem Degraded bringen.

Scrub ist schon gelaufen. Backups habe ich natürlich nicht. zpool clear hat die Read-Errors des erwähnten LW zurückgesetzt aber die Fehler in den erwähnten Dateien bleiben mir erhalten.
 
Ich hatte mal aehnliche Probleme mit sehr fruehen ZFS Pools (Fehler, die nicht wegzubekommen waren...und so wirkten als wenn die Dateistruktur beschaedigt war; Dateien liessen sich nicht loeschen, oder waren nach dem loeschen immer noch da). Ich konnte die Fehler sogar reproduzieren/neu hervorrufen mit High-Volume RSYNC Datentransfers.
Leider hat schlussendlich nur geholfen einen neuen Pool aufzusetzen und die Daten manuel rueberzukopieren (ich hatte alles auf eine externe Disk ausgelagert und dann den internen Pool im Server neu angelegt, und im Prozess auch gleich auf GPT und schoene glabels umgestellt). Seitdem (mit neueren ZFS Versionen (ab FreeBSD 9.x rum) nun keine Probleme mehr.
 
Die Mailingliste der FreeBSD-ZFS -Leute ist sehr freundlich und hilfsbereit in solchen Fällen. Interessiert sind die auch. ;)
 
Code:
# zpool status -v
  pool: raid1
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver completed after 8h59m with 7 errors on Thu May 26 19:40:04 2016
config:

	NAME            STATE     READ WRITE CKSUM
	raid1           DEGRADED     5     0     0
	  raidz1        DEGRADED    10     0     0
	    ad6         ONLINE       0     0     0  409M resilvered
	    ad8         ONLINE       0     0     0  408M resilvered
	    ad10        ONLINE      10     0     0  409M resilvered
	    replacing   DEGRADED     0     0     0
	      ad12/old  REMOVED      0   364     0
	      ad12      ONLINE       0     0     0  768G resilvered
	    ad14        ONLINE       0     0     0  409M resilvered

errors: Permanent errors have been detected in the following files:

        raid1:<0xd0d23>
        raid1:<0x67c89>
        raid1:<0xe2bb>
        raid1:<0x697e2>
        raid1:<0x1101f2>
ad10 ist die Platte, die ich vorsichtshalber eh als nächstes tauschen wollte.

Also, das ist die Ausgabe, die ich nun habe, nachdem ich die Dateien mit Fehlern entfernt habe. Die hatten ein paar Probleme, aber keine Fehler und ich habe sie an anderen Orten gespeichert, aber auf dem ZFS-Pool entfernt.
Darüber starte ich nun nochmal einen scrub, der ja dauern wird. Weil danach diese Information ja vielleicht weg ist, wollte ich das hier zuvor noch einstellen.

Mit Mailing Listen habe ich so meine Probleme. Offenbar bin ich dazu viel zu dumm. Das scheint eher nicht mein Ding zu sein.
 
Du wirst doch eine Mail an eine Adresse schreiben können?

Hier wäre vielleicht ein Anfang zu machen:
http://lists.freebsd.org/mailman/listinfo/freebsd-fs

Was sagt dem smartctl zu deinen ganzen alten Platten?

Generell bin ich kein Freund von "alle alten Platten in einen Pool stopfen und wichtige Daten darauf speichern" - diese Daten sind immer besser auf neueren Geräxten aufgehoben und selbstverständlich auf einer zweiten Maschine gespiegelt, wenn nicht auf Bändern gesichert werden kann.
 
@pit234a
Ich würde folgende Schritte machen:
  1. Backup
  2. Backup
  3. Backup
Wenn du das gemacht hast, kann du weiter basteln :)

Für mich schaut es so aus, als wäre ad12 def. hinüber und muss ersetzt werden.
 
Ich hatte mal dem Fall, dass die Fehler erst nach mehrmaligem Scrub weg waren. Nachdem ad10 auch schon Lesefehler hat, kanns natürlich sein, dass du gar keine Chance mehr hast.

Du kannst vermutlich nix löschen, weil ZFS ein copy-on-write Dateisystem ist. Bevor da was verändert wird, wird eine Kopie des betroffenen Superblock angelegt. Auf ein Degraded Filesystem darf aber nicht mehr geschrieben werden, wenn ich mich nicht täusche.
 
Die Platten sind alt, weil sie im Pool alt geworden sind. Ich habe also keine alten Platten gesammelt, nur jene, die von Anfang drin waren auch drin gelassen, wenn sie keine Probleme zeigten. Um jedoch gerüstet zu sein, hatte ich von Anfang an und dann bei Gelegenheit immer mal wieder eine Platte gleichen Typs gekauft. Deshalb kann ich nun auf zwei weitere, neue Ersatzplatten zugreifen, die sofort verfügbar sind.
ad10 hatte im Laufe der letzten Monate immer mal wieder einen Lesefehler produziert. Im Laufe des Jahres vielleicht fünf und deshalb war es für mich ein Wackelkandidat.
ad12 hatte nun eher unerwartet und ohne Vorzeichen den Geist aufgegeben. Dabei hing der PC komplett und war auch über ssh nicht mehr erreichbar. Nach einem Neustart stand ad12 auf REMOVED, ich konnte sie also gar nicht mehr offline nehmen, sie war bereits als defekt markiert.
In diesem Zustand war der Pool nun DEGRADED, aber vollkommen betriebsfähig, einschließlich der Schreib- und Löschfunktion von neuen Dateien.
Die ad12 gab auch keinen Mucks mehr von sich, blieb auch für smartctl unsichtbar.
Wie gewohnt und mit anderen Platten im Pool bereits einige Male durchgeführt, baute ich ad12-alt aus und eine neue an der gleichen Stelle ein, die auch gleich erkannt wurde. Dann warf ich nun einen REPLACE an, zpool replace raid1 ad12.
Während des replace wurden offenbar die Fahler in den Dateien gefunden.

Der Server ist als "Datengrab" für unseren Haushalt im Gebrauch. Jeder ist für eigene Backups seiner Daten verantwortlich, der Server bringt nur ein bequemes Leben im Alltag, weil Daten darauf von überall erreichbar sind und nicht erst der richtige Stick gesucht werden muss etc. Meist lagern Filme und Musik auf dem Server, aber auch schon mal Dokumente, die man gerade von mehreren Rechnern aus bearbeiten möchte.
Ein Backup der Daten auf dem Server erschien mir nie sinnvoll. Es sollten andere Backups existieren, die jeder Nutzer selbst herstellt. Filme sind nicht so wichtig, es werden täglich neue gedreht.

Nachdem ich die Dateien nun gelöscht hatte, blieben zwar Einträge erhalten, wie ich sie oben gezeigt habe. Doch ein neuerlicher SCRUB war fehlerfrei und der Pool steht nun korrekt auf ONLINE, mit einigen Fehlern der ad10, die ich nun als nächstes ersetzen werde.
 
Zurück
Oben