20 Apr 2020
FreeBSD Boot: Dirbad Panic / Mangled Entry / Endless reboot
Auch unter FreeBSD gibt es ernsthafte Dateisystem-Fehler, die dazu führen, dass der Server nicht mehr bootet, oder in einem Endlos-Reboot-Intervall verharrt.
Ursache: Stromausfall?
Deshalb schildere ich jetzt hier ein Szenario, und wie ich das behoben habe. Das kommt nur in sehr seltenen Fällen vor, meist liegt eine Kombination von Stromausfall und/oder Harddisk-Problemen zugrunde. Genauer kann ich das aber nicht eingrenzen. Es ist nur mit UFS+Softupdates bisher passiert.
defekten Inode lokalisieren
Wenn der Server immer wieder von selbst rebootet, muss man einen Montior anschließen, und den Boot-Prozess filmen. Diesen Film kann man dann gegen Ende Frame für Frame ansehen, und die Stelle mit der Panic identifizieren. Hier war es diese:
- Wichtig sind diese Zeilen:
find: /var/spool/postfix/defer/A/AD5F892446CA: Bad file descriptor panic: ufs_dirbad: / : bad dir ino 153375075 at offset 512: mangled entry
Analysieren
- Eine Datei des Mail-Servers postfix im Spooling-Directory ist defekt. Und es handelt sich genau um den Inode 153375075. Diesen müssen wir jetzt löschen, es gibt keine andere möglichkeit, das System zum booten zu bringen.
Fehler beheben
- Dazu gehen wir beim nächsten Boot in den Single-User-Mode. Dort starten wir den File System Debugger auf das korrekte Device:
# fsdb /dev/ad0s1a ** /dev/ad0s1a Editing file system '/dev/ad1s1a' [...]
- Dort kucken wir uns den schlechten Inode an:
fsdb (inum: 2)> inode 153375075 current inode: directory [...]
- Egal wie sehr es uns betrüben mag, wir müssen ihn löschen, und dann können wird den debugger verlassen.
fsdb (inum:153375075)> clri 153375075 fsdb (inum:153375075)> quit
- es wird uns jetzt mitgeteilt, dass das Filesystem immer noch dirty ist, usw. Das kann ja später gecheckt werden, ein
# reboot
sollte erst mal wieder möglich sein.