Kann ein ZFS-Spiegel kombinierte Festplatten enthalten?

Kann ein ZFS-Spiegel kombinierte Festplatten enthalten?

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 zpoolSie dadurch davor gewarnt werden, gespiegelte und Raidz-Vdevs zu mischen. Sehen Sie sich beispielsweise die -fFlagge von an. Ihr vorgeschlagenes Vdev ist im Wesentlichen ein " " oder verknüpftes Vdev, während es sich offensichtlich um ein Spiegelbild handelt.zpool addcombinedraidz-0mirror1

Nach alledem,nachdem Sie Ihren Pool gesichert haben,Studieren Sie die Manpage genau und beachten Sie die -nFlags 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 zpoolManpage:

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 gstripezum Verketten disk3und disk4zum Erstellen des combinedGerä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 zpooldas -nFlag 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 combinedLaufwerk etwas kleiner ist als die beiden nativen 2-TB-Laufwerke. diskinfo(8)bestätigt dies md1und md2hat jeweils 4194304 Sektoren, stripe/combinedist 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.

combinedZuerst 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

verwandte Informationen