Kann ich durch Kombinieren von Festplatten einen einzelnen ZFS-Spiegel erstellen?
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
combined
disk3 (1TB)
disk4 (1TB)
Mit anderen Worten sollten Disk3 und Disk4 dieselben Daten enthalten wie Disk3+Disk4 zusammen.
Ist das möglich? Oder ist etwas Ähnliches möglich? Wenn ja, welche Befehle bringen mich aus meiner aktuellen Konfiguration heraus:
mypool
mirror1
disk1 (2TB)
disk2 (2TB)
zur obigen Konfiguration?
Antwort1
Tut mir leid, aber nein, ich glaube nicht, dass das möglich ist.
Aber wenn Sie experimentierfreudig sind,
SICHERN SIE IHREN POOL!
Bei diesem Beitrag handelt es sich um eine akademische Übung, die Ihnen Ideen vermitteln soll. Es gibt keine Garantie dafür, dass er in der realen Welt funktioniert. Es wird ausdrücklich davor gewarnt, dass Sie durch Aktionen, die Sie aufgrund dieser Vorschläge durchführen, Datenverlust erleiden.
Ich weiß mit Sicherheit, dass zpool
Sie dadurch davor gewarnt werden, gespiegelte und Raidz-Vdevs zu mischen. Sehen Sie sich beispielsweise die -f
Flagge von an. Ihr vorgeschlagenes Vdev ist im Wesentlichen ein " " oder verknüpftes Vdev, während es sich offensichtlich um ein Spiegelbild handelt.zpool add
combined
raidz-0
mirror1
Nach alledem,nachdem Sie Ihren Pool gesichert haben,Studieren Sie die Manpage genau und beachten Sie die -n
Flags einiger Befehle. So können Sie sehen, welche Auswirkungen ein Befehl hat, ohne tatsächlich etwas mit Ihrem Pool zu tun.
Weitere Beweise im Fall gegen Ihre Lösungwie vorgeschlagenfindet sich in der zpool
Manpage:
Virtuelle Geräte können nicht verschachtelt werden, daher kann ein virtuelles Mirror- oder Raidz-Gerät nur Dateien oder Datenträger enthalten. Mirrors von Mirrors (oder andere Kombinationen) sind nicht zulässig.
Jedoch, wenn Sie FreeBSD verwenden, können Sie gstripe
zum Verketten disk3
und disk4
zum Erstellen des combined
Geräts verwenden. Sie können das Gerät dann zum Spiegel hinzufügen, da ZFS es als bloße weitere Festplatte betrachtet.
Hier ist ein Vorschlag, wie Sie damit experimentieren können, vorausgesetzt, Sie führen ZFS unter FreeBSD aus. Wir verwenden simulierte Laufwerke mit 2 GB statt TB, aber ansonsten …
# mkdir zfs-test; cd zfs-test
# truncate -s 2G drive1; truncate -s 2G drive2
# truncate -s 1G drive3; truncate -s 1G drive4
Erstellen Sie Pseudogeräte md1 bis md4 entsprechend den Laufwerkdateien[1-4]:
# for N in $(jot 4); do mdconfig -u $N -t vnode -f drive$N; done
# mdconfig -lv
md1 vnode 2048M /home/jim/zfs-test/drive1
md2 vnode 2048M /home/jim/zfs-test/drive2
md3 vnode 1024M /home/jim/zfs-test/drive3
md4 vnode 1024M /home/jim/zfs-test/drive4
Ihr bestehender Spiegel lässt sich ganz einfach erstellen:
# zpool create mypool mirror md1 md2
# zpool status mypool
pool: mypool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
errors: No known data errors
Hier stecken Sie derzeit fest. Mit dieser Sandbox könnten Sie jetzt mit verschiedenen Befehlen experimentieren, die zpool
das -n
Flag verwenden, aber ich glaube nicht, dass irgendetwas davon funktionieren wird, außer diesem:
# gstripe label -h combined md3 md4
# gstripe status
Name Status Components
stripe/combined UP md3
md4
# zpool attach mypool md2 stripe/combined
cannot attach stripe/combined to md2: device is too small
Das wird Ihnen wahrscheinlich auch passieren, wenn Ihre 2TB-Laufwerkegenaudoppelt so groß wie die 1-TB-Laufwerke. Der leichte Platzverlust bei der Verkettung der beiden 1-TB-Laufwerke führt dazu, dass das combined
Laufwerk etwas kleiner ist als die beiden nativen 2-TB-Laufwerke. diskinfo(8)
bestätigt dies md1
und md2
hat jeweils 4194304 Sektoren, stripe/combined
ist aber 256 Sektoren kleiner, nämlich nur 4194048:
# diskinfo -v md1 md2 stripe/combined
md1
512 # sectorsize
2147483648 # mediasize in bytes (2.0G)
4194304 # mediasize in sectors
0 # stripesize
0 # stripeoffset
MD-DEV5473951480393710199-INO24 # Disk ident.
Yes # TRIM/UNMAP support
Unknown # Rotation rate in RPM
md2
512 # sectorsize
2147483648 # mediasize in bytes (2.0G)
4194304 # mediasize in sectors
0 # stripesize
0 # stripeoffset
MD-DEV5473951480393710199-INO24 # Disk ident.
Yes # TRIM/UNMAP support
Unknown # Rotation rate in RPM
stripe/combined
512 # sectorsize
2147352576 # mediasize in bytes (2.0G)
4194048 # mediasize in sectors
65536 # stripesize
0 # stripeoffset
No # TRIM/UNMAP support
Unknown # Rotation rate in RPM
Aber in meiner Spielsandbox kann ich dieses Problem beheben.
combined
Zuerst werde ich den Streifen und seine Pseudogerätekomponenten /dev/md3 und /dev/md4 wegblasen :
# gstripe destroy combined
# mdconfig -d -u3; mdconfig -d -u4
# mdconfig -lv
md1 vnode 2048M /home/jim/zfs-test/drive1
md2 vnode 2048M /home/jim/zfs-test/drive2
Jetzt kann ich disk3 und disk4 neu erstellen, um sie jeweils etwas größer als 1 GB zu machen, die Geräte /dev/md3 und md4 neu erstellen, sie zusammenfassen, um das Gerät /dev/stripe/combined zu erstellen, und dieses Gerät an den Spiegel anschließen:
# truncate -s 1025M drive3
# truncate -s 1025M drive4
# mdconfig -u3 -t vnode -f drive3
# mdconfig -u4 -t vnode -f drive4
# gstripe label -h combined md3 md4
# zpool attach mypool md2 stripe/combined
# zpool status mypool
pool: mypool
state: ONLINE
scan: resilvered 81.5K in 0 days 00:00:04 with 0 errors on Thu May 23 15:27:26 2019
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
md1 ONLINE 0 0 0
md2 ONLINE 0 0 0
stripe/combined ONLINE 0 0 0
errors: No known data errors