zfs 鏡像可以包含組合磁碟嗎?

zfs 鏡像可以包含組合磁碟嗎?

我可以透過組合磁碟來建立單一 zfs 鏡像嗎?

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)
        combined
            disk3 (1TB)
            disk4 (1TB)

換句話說,disk3 和disk4 應該包含與disk3+disk4 組合相同的資料。

這可能嗎?或者類似的事情可能嗎?如果是這樣,哪些命令可以讓我擺脫目前的配置:

mypool
    mirror1
        disk1 (2TB)
        disk2 (2TB)

到上面的配置?

答案1

抱歉,但不,我認為你不能。

但如果你熱衷於嘗試,首先

備份您的池子!

這篇文章是一項學術練習,旨在為您提供想法,不保證它在現實世界中有效,並且明確警告您不要因根據這些建議採取的操作而導致數據丟失。

我確實知道這zpool會警告您不要混合鏡像和 raidz vdev。例如,參見-f旗幟。zpool add您建議的 vdevcombined本質上是一個「raidz-0」或串聯的 vdev,而mirror1顯然是一個鏡像。

話雖如此,備份池後,仔細研究手冊頁並注意-n某些命令上的標誌。這將使您能夠看到命令的效果,而無需對池進行任何實際操作。

針對您的解決方案的進一步證據按照提議在手冊頁中找到zpool

虛擬設備不能嵌套,因此鏡像或 raidz 虛擬設備只能包含檔案或磁碟。不允許使用鏡子的鏡子(或其他組合)。

然而,如果您使用的是 FreeBSD,則可以使用它gstripe來連接disk3disk4建立combined裝置。然後您可以將該裝置新增至鏡像中,因為 ZFS 會將其視為另一個磁碟。

這裡有一個關於如何進行試驗的建議,假設您在 FreeBSD 上執行 ZFS。我們將使用 2GB 的類比硬碟而不是 TB,但除此之外...

# mkdir zfs-test; cd zfs-test
# truncate -s 2G drive1; truncate -s 2G drive2
# truncate -s 1G drive3; truncate -s 1G drive4

建立對應drive[1-4]檔案的偽設備md1到md4:

# 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

您現有的鏡像創建起來很簡單:

# 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

這就是你目前陷入困境的地方。有了這個沙箱,您現在可以使用zpool's標誌嘗試各種命令-n,但我認為除了以下命令之外,其他命令都不起作用:

# 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

如果您的 2TB 硬碟是確切地1TB 硬碟大小的兩倍。連接兩個 1TB 硬碟會造成輕微的空間損失,導致combined硬碟比兩個本機 2TB 硬碟中的任何一個都稍小。 diskinfo(8)確認md1每個md2扇區都有 4194304 個扇區,但stripe/combined小了 256 個扇區,只有 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

但在我的遊戲沙箱中,我可以解決這個問題。

首先,我將吹掉combined條帶及其元件 psuedo-devices /dev/md3 和 /dev/md4:

# 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

現在我可以重新建立 disk3 和 disk4 以使它們各自略大於 1GB,重新建立 /dev/md3 和 md4 設備,將它們條帶在一起以建立 /dev/stripe/combined 設備,並將該裝置附加到鏡子:

# 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

相關內容