兩個糾纏的 ZFS 池?

兩個糾纏的 ZFS 池?

我正在嘗試使用 ZFS 清理 Ubuntu 12.04 LTS 伺服器系統上的混亂。這是 zpool 狀態顯示的內容:

  pool: TB2
 state: UNAVAIL
status: One or more devices could not be used because the label is missing
        or invalid.  There are insufficient replicas for the pool to continue
        functioning.
action: Destroy and re-create the pool from
        a backup source.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    TB2         UNAVAIL      0     0     0  insufficient replicas
      sdd       ONLINE       0     0     0
      sde       ONLINE       0     0     0
      sdf       ONLINE       0     0     0
      sdg       ONLINE       0     0     0
      sdh       ONLINE       0     0     0
      sdi       ONLINE       0     0     0
      sdj       ONLINE       0     0     0
      sds       ONLINE       0     0     0
      sdt       UNAVAIL      0     0     0

  pool: TB4
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb  6 09:27:46 2018
config:

    NAME                                              STATE     READ WRITE CKSUM
    TB4                                               DEGRADED     0     0     0
      raidz2-0                                        DEGRADED     0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T    ONLINE       0     0     0
        spare-4                                       DEGRADED     0     0     0
          ata-Hitachi_HDS724040ALE640_PK2311PAG614MM  UNAVAIL      0     0     0
          ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV  ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V    ONLINE       0     0     0
        ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM    ONLINE       0     0     0
    spares
      ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV      INUSE     currently in use

errors: No known data errors

我想做兩件事: 1. 更換池 TB4 中的故障磁碟機。這我知道該怎麼做。 2. 完全銷毀並重新建立池 TB2。

通常,我只會執行 zpool 銷毀 TB2 並重新開始。但是,先前的管理員對 TB2 使用 sd* 名稱,對 TB4 使用磁碟 ID。在查看 /dev/disk/by-id 時,我發現兩個 TB4 硬碟(...71M 和 ...EAV)分別符號連結到 /dev/sdj 和 /dev/sds。但這些 sdj 和 sds 都被列為 TB2 池的一部分。我擔心執行 zpool destroy TB2 會損壞 TB4 池中的驅動器,因為文件說銷毀會寫入成員磁碟。有什麼方法可以讓 ZFS 簡單地忘記 TB2 而無需實際寫入嗎?

我問前管理員為什麼他用兩種不同的方法(/dev/sd* 和 by-id)。他說,對特定硬碟的驅動器號分配似乎從啟動到啟動都不可重複,因此當他創建 TB4 時,他使用了 by-id。我想TB2和TB4的糾葛就是這個結果。

我目前的想法是這樣做:

  1. 關閉機器
  2. 拉出所有驅動器。
  3. 重啟。
  4. zpool 銷毀 -f TB2
  5. 關閉並重新安裝 TB4 硬碟
  6. 在另一台機器上重新格式化 TB2 硬碟
  7. 重新安裝 TB2 磁碟機並使用磁碟 ID(不是 sd*)建立新池

這樣看起來合理嗎?有更容易的方法嗎?

感謝任何能幫助我擺脫困境的人。

麥可

答案1

您提出的方法似乎可行。然而,它也不必要地複雜。相反,我建議:

  1. zpool export TB2。這將卸載與池關聯的所有資源,除非您先運行,否則您的系統不會嘗試重新安裝它們(並可能寫入它們)zpool import
  2. 修復TB4。 (或者您可以稍後再執行此操作。)
  3. zpool create <new pool> ...(透過 ID 引用磁碟以避免再次重疊)。您可能必須強制創建,因為它可能會注意到這些磁碟正在被未匯入的池使用。

如果您想試運行該過程,我認為您可以在 TB4 ( zfs create -V 5gb TB4/volume1) 上建立一些卷,並從這些 ( zpool create testpool1 ...) 中建立兩個具有重疊卷的「嵌套池」。其他一切都應該與上面相同。

相關內容