Rosendoktor
Well-Known Member
Hallo,
ich betreibe auf einem alten Desktop PC ein FreeBSD 10.3 das mit gmirror auf zwei Platten gespiegelt läuft. Auf den beiden Festplatten (jeweils 500 GB sata) ist neben FreeBSD auch noch ein Linux installiert, das ebenfalls auf gespiegelten Partitionen läuft.
Die Partitionstabellen der beiden Platten ada0 und ada1 sehen so aus:
Für ada1 identisch. Auf Partition 1 ist der GRUB2 Bootloader des Linux (der auch FreeBSD bootet), auf 2, 3, 4 und 8, 9 das Linux System und die Daten. Auf 5, 6, 7, 10, 11, 12 ist das FreeBSD System und die Daten.
Gespiegelt werden also die gpt Partitionen einzeln, nicht die gesamten Platten, unter Linux mit mdadm, unter FreeBSD eben mit gmirror.
Das sieht dann so aus:
Ich weiss dass das nicht das übliche Setup ist, aber anders kann ich es nicht machen da FreeBSD und Linux sich eben diese Platten teilen.
Und im Grunde funktioniert es ja auch, die Mirrors werden aufgebaut und laufen soweit.
Leider ist die Spiegelung unter FreeBSD nicht stabil. Es kommt immer wieder vor, in den letzten Tagen etwa 2 bis 3 mal täglich, und auch bei unausgelastetem System, dass einzelne Mirrors in den "DEGRADED" Zustand gehen, oder gleich die ganze ada1 Platte abgemeldet wird. Das sieht dann beispielsweise so aus:
Hier sind einzelne Mirror im "DEGRADED" Zustand, und ja, es fallen wirklich sowohl auf ada0 als auch auf ada1 Partitionen weg.
Wenn dagegen die ganze ada1 Platte abgemeldet wird (also auch unter /dev nicht mehr erscheint), sieht es so aus:
Die SMART Werte der beiden Platten sind soweit in Ordnung, auch habe ich wenn das Linux gebootet ist keinerlei Probleme mit den Festplatten und den mdadm RAIDs. Habe es extra nochmal ausprobiert unter hoher Last.
Beim nächsten Bootvorgang gehen dann einige der Mirrors automatisch in den resync, die verbleibenden (meist root und user1, das bin ich) kann ich mit gmirror forget und gmirror insert manuell wieder aufbauen.
Auch fällt mir beim Booten von FreeBSD auf, dass die Mirrors meist, aber nicht immer, aufgrund eines Timeouts nur mit einer Platte erzwungenermassen ("forcing...") gestartet werden. Ist das System hochgefahren, laufen die Mirrors dann aber korrekt mit zwei Platten.
Ich habe beim googeln nach dem Problem einiges gefunden zu gmirror+timeout+degraded, anscheinend kommt das öfter vor, war aber nichts dabei was mir helfen würde das Problem zu identifizieren oder zu beheben.
Weiss jemand was da passiert, und was ich dagegen machen könnte?
Danke&Grüsse,
Robert
ich betreibe auf einem alten Desktop PC ein FreeBSD 10.3 das mit gmirror auf zwei Platten gespiegelt läuft. Auf den beiden Festplatten (jeweils 500 GB sata) ist neben FreeBSD auch noch ein Linux installiert, das ebenfalls auf gespiegelten Partitionen läuft.
Die Partitionstabellen der beiden Platten ada0 und ada1 sehen so aus:
Code:
root@sirius:~# gpart show ada0
=> 34 976773101 ada0 GPT (466G)
34 2014 - free - (1.0M)
2048 2048 1 bios-boot (1.0M)
4096 1048576 2 efi (512M)
1052672 50331648 3 linux-data (24G)
51384320 8388608 4 linux-data (4.0G)
59772928 1048576 5 freebsd-boot (512M)
60821504 50331648 6 freebsd-ufs (24G)
111153152 8388608 7 freebsd-swap (4.0G)
119541760 377487360 8 linux-data (180G)
497029120 377487360 9 linux-data (180G)
874516480 83886080 10 freebsd-ufs (40G)
958402560 8388608 11 freebsd-ufs (4.0G)
966791168 8388608 12 freebsd-ufs (4.0G)
975179776 1593359 - free - (778M)
Für ada1 identisch. Auf Partition 1 ist der GRUB2 Bootloader des Linux (der auch FreeBSD bootet), auf 2, 3, 4 und 8, 9 das Linux System und die Daten. Auf 5, 6, 7, 10, 11, 12 ist das FreeBSD System und die Daten.
Gespiegelt werden also die gpt Partitionen einzeln, nicht die gesamten Platten, unter Linux mit mdadm, unter FreeBSD eben mit gmirror.
Das sieht dann so aus:
Code:
root@sirius:~# gmirror status
Name Status Components
mirror/boot COMPLETE ada0p5 (ACTIVE)
ada1p5 (ACTIVE)
mirror/root COMPLETE ada0p6 (ACTIVE)
ada1p6 (ACTIVE)
mirror/swap COMPLETE ada0p7 (ACTIVE)
ada1p7 (ACTIVE)
mirror/user1 COMPLETE ada0p10 (ACTIVE)
ada1p10 (ACTIVE)
mirror/user2 COMPLETE ada0p11 (ACTIVE)
ada1p11 (ACTIVE)
mirror/user3 COMPLETE ada0p12 (ACTIVE)
ada1p12 (ACTIVE)
Ich weiss dass das nicht das übliche Setup ist, aber anders kann ich es nicht machen da FreeBSD und Linux sich eben diese Platten teilen.
Und im Grunde funktioniert es ja auch, die Mirrors werden aufgebaut und laufen soweit.
Leider ist die Spiegelung unter FreeBSD nicht stabil. Es kommt immer wieder vor, in den letzten Tagen etwa 2 bis 3 mal täglich, und auch bei unausgelastetem System, dass einzelne Mirrors in den "DEGRADED" Zustand gehen, oder gleich die ganze ada1 Platte abgemeldet wird. Das sieht dann beispielsweise so aus:
Code:
root@sirius:~# gmirror status
Name Status Components
mirror/boot DEGRADED ada0p5 (ACTIVE)
mirror/root DEGRADED ada0p6 (ACTIVE)
mirror/swap COMPLETE ada0p7 (ACTIVE)
ada1p7 (ACTIVE)
mirror/user1 DEGRADED ada1p10 (ACTIVE)
mirror/user2 COMPLETE ada0p11 (ACTIVE)
ada1p11 (ACTIVE)
mirror/user3 COMPLETE ada0p12 (ACTIVE)
ada1p12 (ACTIVE)
Hier sind einzelne Mirror im "DEGRADED" Zustand, und ja, es fallen wirklich sowohl auf ada0 als auch auf ada1 Partitionen weg.
Wenn dagegen die ganze ada1 Platte abgemeldet wird (also auch unter /dev nicht mehr erscheint), sieht es so aus:
Code:
root@sirius:~# gmirror status
Name Status Components
mirror/boot DEGRADED ada0p5 (ACTIVE)
mirror/root DEGRADED ada0p6 (ACTIVE)
mirror/swap DEGRADED ada0p7 (ACTIVE)
mirror/user1 DEGRADED ada0p10 (ACTIVE)
mirror/user2 DEGRADED ada0p11 (ACTIVE)
mirror/user3 DEGRADED ada0p12 (ACTIVE)
Die SMART Werte der beiden Platten sind soweit in Ordnung, auch habe ich wenn das Linux gebootet ist keinerlei Probleme mit den Festplatten und den mdadm RAIDs. Habe es extra nochmal ausprobiert unter hoher Last.
Beim nächsten Bootvorgang gehen dann einige der Mirrors automatisch in den resync, die verbleibenden (meist root und user1, das bin ich) kann ich mit gmirror forget und gmirror insert manuell wieder aufbauen.
Auch fällt mir beim Booten von FreeBSD auf, dass die Mirrors meist, aber nicht immer, aufgrund eines Timeouts nur mit einer Platte erzwungenermassen ("forcing...") gestartet werden. Ist das System hochgefahren, laufen die Mirrors dann aber korrekt mit zwei Platten.
Ich habe beim googeln nach dem Problem einiges gefunden zu gmirror+timeout+degraded, anscheinend kommt das öfter vor, war aber nichts dabei was mir helfen würde das Problem zu identifizieren oder zu beheben.
Weiss jemand was da passiert, und was ich dagegen machen könnte?
Danke&Grüsse,
Robert