Nun, es hängt wirklich davon ab, wie schreibgeschützt der Pool sein soll. Und nein, das ist kein Scherz.
Zunächst ein bisschen Terminologie: In ZFS importieren Sie einen Pool und mounten optional die (beliebigen) Dateisysteme darin. Sie können einen Pool importieren , ohne indem alle Dateisysteme Montage -N
an zpool import
und hängen Sie dann später auf beliebige Dateisysteme mit zfs mount
. (Dies ist ein absolut gültiges Szenario, wenn Sie beispielsweise nur auf ein einziges Dateisystem von vielen zugreifen möchten oder wenn Sie etwas tun möchten, das einem Offline-Scrub des Pools ähnelt.)
ZFS ist kein großer Fan von wirklich schreibgeschütztem Zugriff. Wenn ZFS beispielsweise einen Fehler feststellt, den es reparieren kann, wird der Fehler meines Erachtens behoben und die reparierten Daten werden auf die Festplatte geschrieben, selbst wenn Sie den Pool schreibgeschützt importiert haben. Nach meinem Verständnis gilt in ZFS-Parlace "schreibgeschützt" nur für den vom Benutzer sichtbaren Status des Pools und seiner Datensätze. Wenn Sie andererseits eine Binärkopie der Festplatte in eine Datei (oder einen Satz von Dateien) erstellen, diese Dateien wirklich schreibgeschützt machen und versuchen, den Pool von dort zu importieren, kann ZFS den nicht importieren Pool überhaupt, egal wie sehr Sie es versuchen. Wenn Sie die Dateien beschreibbar machen, funktioniert es einwandfrei. (Ich habe es tatsächlich erst vor ein paar Wochen versucht, obwohl ich ein zvol verwendet habe, und ZFS lehnte dies vehement abum den Pool zu importieren. Wenn ich das zvol auf "Lesen / Schreiben" anstatt "Nur Lesen" eingestellt habe, wurde der Pool einwandfrei importiert.) Andere Dateisysteme wie (unter Linux) ext4 und wahrscheinlich andere behandeln diese Situation etwas elegant, aber ZFS scheut sich.
Wenn Sie Pech haben und auf dem System, auf das Sie den Pool importieren , kein ECC-RAM installiert ist, kann der Versuch von ZFS, auftretende Fehler zu korrigieren, die Situation tatsächlich verschlimmern , obwohl die Meinungen darüber, ob dies tatsächlich ein echtes Risiko darstellt, unterschiedlich sind in der Praxis. Persönlich bin ich der Meinung, dass alle Daten, die mir wichtig genug sind, um sie mit ZFS und Snapshots sowie Redundanz und Backups auf Speicherebene zu schützen, und was nicht den Schutz verdient, den auch der ECC-RAM bietet, aber viele PCs haben keinen ECC-RAM.
So können Sie den Pool in Nur - Lese-Modus importieren, mit einem bestimmten alternativen Root - Verzeichnis , damit er nicht treten auf etwas anderes ist Zehen, aber Sie müssen sich bewusst sein , dass es nicht unbedingt wirklich schreibgeschützt in einer forensischen Sinne. (Es wird jedoch sicherstellen, dass Sie nicht versehentlich etwas im Pool ändern sich.) Eine Nur - Lese-Import zu tun, unter der Annahme , dass der Pool genannt wird , tank
und dass die Geräteknoten (en) ist / sind in /dev
, würden Sie Verwenden Sie einen Befehl wie:
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
Dies sucht /dev
nach allem, was einen ZFS-Pool mit dem Namen enthält tank
, importiert ihn, setzt die Pool-Eigenschaft vorübergehend readonly
auf on
(was bedeutet, dass alle vom Benutzer initiierten Schreibvorgänge abgelehnt werden) und setzt seine altroot
Eigenschaft vorübergehend auf /mnt/someplace
. (Diese Eigenschaftswerte sind "temporär" in dem Sinne, dass sie nicht als aktuelle Eigenschaftswerte auf den Datenträgern gespeichert werden. Wenn Sie also den Pool ohne sie exportieren und erneut importieren, sind die Werte wieder normal Möglicherweise wird jedoch in den Poolverlauf geschrieben, den Sie nach dem Importieren des Pools anzeigen könnenzpool history tank
Wenn Sie dazu neigen.) Sobald der Pool importiert wurde, sehen Sie Ihre Dateien unter / mnt / irgendwo und haben normalen schreibgeschützten Zugriff darauf, einschließlich aller Snapshots, die bereits für die Datensätze im Pool erstellt wurden.
In Anbetracht Ihres Beispiels vermute ich, dass Sie etwas in der Art von:
# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint
Wenn Sie fertig sind, denken Sie daran, den Pool sauber zu exportieren:
# zpool export tank
oder vielleicht
# zpool export zroot02
Dadurch werden alle Dateisysteme und andere Datensätze innerhalb des Pools ausgehängt, alle Puffer geleert (in dem Maße, in dem überhaupt ein Löschen erforderlich ist), der Pool als nicht auf allen Geräten der einzelnen Komponenten importiert markiert und alle anderen erforderlichen Verwaltungsaufgaben ausgeführt, um dies sicherzustellen dass der Pool sicher auf ein anderes System verschoben und später dort importiert werden kann.