mounting from zfs:tank/root failed with error 2 ... und ein dummes Gesicht

peterle

Forenkasper
Irgendwo schein bei einem Festplattenwechsel mal was schief gegangen zu sein ...
Nachdem sich eine Platte aus dem Pool verabschiedet hat, kommt nun diese Fehlermeldung:
Code:
trying to mount root from zfs:tank/root
...
mounting from zfs:tank/root failed with error 2

Es ist ein FreeBSD 9.1 installiert.
Den Bootcode habe ich über ein chroot mal neu auf die Platte gepackt.

Ich komme nur noch über eine Rescue Console an das System.

Hat einer von Euch noch einen netten Tip, wie ich den Fehler eingrenzen oder besser noch beheben kann?
 
Wie sieht dein ZFS denn aus, was hast du beim Wechsel genau gemacht? Seit dem Wechsel bootet er nicht mehr oder lief das System zwischendurch mal?
 
Mein ZFS ist wunderhübsch mit braunen Augen und langem wallenden Haar ... :D

Das System lief problemlos, wurde aber länger nicht rebootet. ada1 war defekt und wurde ausgetauscht. Beim Versuch des Starts kommt der Startschirm von FreeBSD und dann kommt der Fehler.
Der Pool ist da, der Pool scheint soweit fehlerfrei - von der fehlenden Platte mal abgesehen.
 
Was er meint mit "wie sieht dein Pool aus" ist die Struktur... zum Beispiel zpool status mal ausgeben.
 
Meinst Du?

Er sah mal so aus:
Code:
# zpool status
  pool: tank
 state: ONLINE
  scan: resilvered 477G in 4h51m with 0 errors on Wed Jul 29 21:00:48 2015
config:

   NAME  STATE  READ WRITE CKSUM
   tank  ONLINE  0  0  0
    mirror-0  ONLINE  0  0  0
    ada0p3  ONLINE  0  0  0
    ada1p3  ONLINE  0  0  0

errors: No known data errors

Jetzt ist er DEGRADED und es fehlt ada1p3.

Das sieht dann so aus:
Code:
# zpool import
  pool: tank
  id: 4917330039580989312
  state: DEGRADED
 status: One or more devices are missing from the system.
 action: The pool can be imported despite missing or damaged devices.  The
   fault tolerance of the pool may be compromised if imported.
  see: http://illumos.org/msg/ZFS-8000-2Q
 config:

   tank  DEGRADED
    mirror-0  DEGRADED
    ada0p3  ONLINE
    12319067667301124840  UNAVAIL  cannot open

Was ich ncht verstehe:

ada1 hatte sich zuletzt im Juni "verabschiedet" und wurde ausgetauscht. Er muß also zwangsläufig damals noch von ada0 aus zu starten gewesen sein müssen und nun ist er das nicht mehr. Ich bin mir sehr sicher, daß ich keine Updates gemacht habe oder am Bootcode gefummelt habe.

Nehmen wir an, es ist der Bootcode, der sich verabschiedet hat oder ich mich täusche und ich habe doch irgendwann dazwischen mal etwas geändert:
Wie finde ich heraus, woran genau es jetzt scheitert und was kann ich dann daran ändern?

Ich habe mittlerweile mal den Pool gemountet, ein chroot ausgeführt und den bootcode von dort aus neu auf die Platte geschrieben, das brachte nichts.
 
Lara läßt grüßen, da huscht ganz am Anfang des Bootvorgangs die folgende Meldung auf den Schirm:
Code:
ZFS: unsupported ZFS version 5000 (should be 28)
 
ein chroot ausgeführt und den bootcode von dort aus neu auf die Platte geschrieben
Kannst du mal beschreiben, wie du das gemacht hast?

edit: ^^ Kannst du mal von einer FreeBSD 9.1 Version booten und nicht über die Rettungskonsole? Sieht so aus, als wäre da irgend ein Versionsunterschied von deinem System und der Rettungskonsole.
 
Code:
#zpool import -R /mnt tank
#chroot /mnt
#cd /mnt
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

Mit einem 9.1 kann ich leider nicht mehr starten.
Ich vermute aber auch etwas, wie Du, aber ich weiß nicht, wie das gehen sollte.
Auf der Platte ist ein 9.1 und der Pool paßt zu einem 9.1 mit seiner Version (28), nur booten kann das Ding plötzlich nicht mehr.

Ich habe mir mal die History angeschaut:
Code:
# zpool history tank
History for 'tank':
2013-06-08.23:38:00 zpool create -f -m none -o altroot=/mnt -o cachefile=/boot/zfs/zpool.cache -o version=28 tank ada0p3
2013-06-08.23:38:01 zfs create -o mountpoint=/ tank/root
2013-06-08.23:38:01 zfs create tank/root/var
2013-06-08.23:38:01 zfs create tank/root/tmp
2013-06-08.23:38:02 zpool set bootfs=tank/root tank
2013-06-08.23:38:13 zpool export tank
2013-06-08.23:38:20 zpool import -o altroot=/mnt -o cachefile=/boot/zfs/zpool.cache tank
2013-07-25.17:39:03 zpool attach tank ada0p3 ada1p3
2013-10-03.11:57:02 zpool online tank ada0p3
2013-10-03.11:57:39 zpool replace tank 1367742489374326262 ada0p3
2013-10-03.21:02:45 zpool scrub tank
2013-10-04.11:30:13 zpool clear tank
2013-10-27.22:31:17 zpool online tank ada0p3
2013-10-27.22:31:55 zpool replace tank 5598829567687722124 ada0p3
2013-10-28.11:05:23 zpool scrub tank
2013-10-28.22:23:55 zpool scrub tank
2013-10-29.19:21:15 zpool clear tank
2013-10-29.19:21:32 zpool scrub tank
2013-10-31.15:40:15 zpool online tank ada0p3
2013-10-31.15:41:13 zpool replace tank 16431799753303348071 ada0p3
2013-11-03.20:03:55 zpool clear tank
2013-11-04.00:02:02 zpool import -o altroot=/mnt/tank tank
2015-06-30.19:37:37 zpool clear tank
2015-10-02.23:57:46 zpool import -R /mnt tank
2015-10-03.00:31:18 zpool import -R /mnt tank
2015-10-03.08:32:25 zpool import tank
2015-10-05.05:47:52 zpool import -R /mnt tank

Ich finde das soweit alles unverdächtig.
 
Kannst du mal schauen, ob du folgendes hast?

/boot/loader.conf
Code:
# --- zfs
zfs_load="YES"

/etc/rc.conf
Code:
zfs_enable="YES"

Bitte noch die Ausgabe von zpool get all <POOL>. "bootfs" ist interessant.

Gruss
 
Was macht "bootfs" eigtl. genau? Ich boote bei mir über PXE und TFTP und hab nur vfs.root.mountfrom="zfs:..." in der loader.conf. Das System hat mehrere Pools. bootfs hab ich noch nie gesetzt.
 
Code:
# cat boot/loader.conf | grep zfs
zfs_load="YES"

# cat etc/rc.conf | grep zfs   
zfs_enable="YES"

# zpool get all tank
NAME  PROPERTY  VALUE  SOURCE
tank  size  1.36T  -
tank  capacity  90%  -
tank  altroot  /mnt  local
tank  health  DEGRADED  -
tank  guid  4917330039580989312  local
tank  version  28  local
tank  bootfs  tank/root  local
tank  delegation  on  default
tank  autoreplace  off  default
tank  cachefile  none  local
tank  failmode  wait  default
tank  listsnapshots  off  default
tank  autoexpand  off  default
tank  dedupditto  0  default
tank  dedupratio  1.00x  -
tank  free  131G  -
tank  allocated  1.23T  -
tank  readonly  off  -
tank  comment  -  default
tank  expandsize  466G  -
tank  freeing  0  local
tank  fragmentation  -  -
tank  leaked  0  local
tank  feature@async_destroy  disabled  local
tank  feature@empty_bpobj  disabled  local
tank  feature@lz4_compress  disabled  local
tank  feature@multi_vdev_crash_dump  disabled  local
tank  feature@spacemap_histogram  disabled  local
tank  feature@enabled_txg  disabled  local
tank  feature@hole_birth  disabled  local
tank  feature@extensible_dataset  disabled  local
tank  feature@embedded_data  disabled  local
tank  feature@bookmarks  disabled  local
tank  feature@filesystem_limits  disabled  local
 
Hoi,

der tank Health Status mit DEGRADED ist Dir aufgefallen ?
Evtl. versuchst Du von der HDD zu booten wo ned ok isch von denen zwei - so mal als Idee.

Gruß Bummibär
 
So isch det. :D
Aber eigentlich müßte die halt funktionieren, denn ich habe schon von ihr gebootet, aber irgendwas werde ich vermutlich irgendwann mal versaut haben und habe es nicht gemerkt. Das scheint aber nicht einfach im nachhinein eingrenz- und behebbar zu sein, denn eigentlich empfinde ich die Resonanz hier auf Fragen immer als extrem versiert und professionell und bei diesem Problem habe ich schon öfters im Dunkeln gestochert.

Vielleicht sollte ich das nächste mal die Mailingliste probieren.
 
Ich habe mittlerweile mal den Pool gemountet, ein chroot ausgeführt und den bootcode von dort aus neu auf die Platte geschrieben, das brachte nichts.
Noch eine Idee welche ich gelesen habe. Und zwar die Datei /boot/zfs/zpool.cache neu erstellen:
Code:
zpool import -f -o cachefile=/tmp/zpool.cache -o altroot=/mnt <POOL>
cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
zpool export <POOL>
 
Was macht "bootfs" eigtl. genau? Ich boote bei mir über PXE und TFTP und hab nur vfs.root.mountfrom="zfs:..." in der loader.conf. Das System hat mehrere Pools. bootfs hab ich noch nie gesetzt.

Aktuell scheint bootfs funktionslos zu sein, auch bei boot environments ist es egal ob das flag gesetzt ist oder nicht. Könnte sein, das grub2 damit arbeitet, da es ja irgendwie erkennen muss welches FS bootfähig ist, das ist aber nur geraten da ich grub2 nicht nutze.
 
Wenn man das vfs.root.mountfrom Tuneable nicht setzt, soll bootfs der Rootmount-Logik sagen, welches Dataset nach / gemountet wird. Ob es das wirklich tut, ist eine andere Frage. :)
 
Zurück
Oben