ZPOOL/ZFS und Laufwerk Device

hessijens

Well-Known Member
Ich habe hier vor mir einen Computer mit einem SiliconImage (siis) und einem JMicron (ahci) SATA Controller. Der SIIS hat zwei externe Anschlüsse für Wechselplatten zum Sichern oder für Testumgebungen, der AHCI zwei interne für Betriebssysteme und Daten, macht zusammen vier Disks (/dev/ada0 - /dev/ada3).

Leider sind die beiden Externen nicht immer angeschlossen, sodass die beiden internen Platten entweder /dev/ada0+1 oder /dev/ada2+3 sind. Das ist Dank geom Labels für FreeBSD auch kein Problem und das habe ich wunderbar gelöst, selbst für den swap geli. Was ich mich gerade aber frage ist, woher weiß zfs auf welcher Platte sich das zpool befindet. Ich lege das Zpool "export" ja mit dem Befehl (alle vier Festplatten angeschlossen) an:

Code:
zpool create export /dev/ada3p2

Erst mal ganz simpel kleine Brötchen bachen, spater dann vielleicht mit Raid und Verschlüsselung.

Wenn nun aber beim nächsten Start die beiden externen Platten nicht angeschlossen sind, weiß zfs dann dass sich der Pool nun auf /dev/ada1p2 befindet? Kann mir jemand hierzu eine Antwort geben wie FreeBSD den Devices des zpool findet. Muss oder kann man das auch mit Labels lösen oder werden die Partitionen und Disk nur entsprechende markiert?
 

Yamagi

Possessed With Psi Powers
Teammitglied
Ja, das weiß er. Der zpool legt auf jedem in ihm enthaltenem Gerät Metadaten ab. Da stehen diverse Dinge drin, unter anderem eben auch die Zugehörigkeit zum Pool. Beim Systemstart prüft zpool diese Metadaten auf allen Geräten, sind sie vorhanden liest er sie aus und baut damit die einzelnen Poole auf. Er weiß also immer, was zu einem Pool gehört und welche Rolle es in diesem hatte. Er erkennt sogar, wenn ein Pool unvollständig ist. Ob deine externen an- oder abgesteckt sind, ist für zpool also völlig egal.

Es gibt dazu allerdings eine Ausnahme: zpool mag es nicht, wenn zur Laufzeit die Geräte eines importierten Pools geändert werden. Es gibt einige wenige, recht exotische Controller, die genau das tun. Dazu ein Beispiel. Du hast zwei Platten an einem solchen Controller, ada0 und ada1. Sie bilden zusammen einen Mirror. Nun steckst du eine dritte Platte ein, sie wird zu ada0 und die anderen umbenannt. ada0 -> ada1 ; ada1 -> ada2. Und *zack* hast du mit ein wenig Pech den Pool zerdeppert. Daher sollten Besitzer solcher Controller glabel(8) nutzen oder eben nichts zur Laufzeit einstecken.
 

cat1510

Well-Known Member
Yep der ZFS ist schon ne ganz coole Sau.

Das geht sogar mit einem Raid, dass sich gerade rebuildet. Ich habe bis jetzt nur ICH9 und ICH10 Bridges gehabt im AHCI Mode und da war das kein Problem.
Man braucht keine Paritionen und keine Labels, macht alles ZFS von allein.
4 leere Platten anschliessen, sagen wie die verbandelt werden sollen, fertig.
Daten draufspielen, muss nichtmal formatiert werden... :) Der Hammer in Tueten.
 
Oben