Hard-Drive

ZFS“自動替換”何時生效?

  • September 3, 2020

背景

autoreplace記錄如下:

自動替換=打開 | off 控制自動設備更換。如果設置為“off”,則必須由管理員使用“zpool replace”命令啟動設備更換。如果設置為“on”,則在與以前屬於池的設備相同的物理位置找到的任何新設備都會自動格式化和替換。預設行為是“關閉”。此屬性也可以通過其縮短的列名“replace”來引用。

以下是我感興趣的池中該設置的目前狀態:

root@[...]:/# zpool get autoreplace zfs-pool
NAME      PROPERTY     VALUE    SOURCE
zfs-pool  autoreplace  on       local

所以它似乎已啟用。

觀察

由於與 SMART 相關的錯誤,一個磁碟已被移除,並且 ZFS 正確地辨識出該設備不再可用。使用過磁碟的鏡像改為DEGRADEDetc。因為我有多個備用磁碟,所以我曾經zpool replace zfs-pool FAULTY_DISK SPARE_DISK臨時放置一個備用磁碟。這是必要的,因為對於我正在使用的 UB 16.04,自動使用備件無法正常工作,甚至根本無法正常工作

在鏡像再次同步並且新磁碟已物理連接後,我重新啟動了系統,否則使用的控制器會阻止訪問新磁碟。在啟動過程中,控制器會辨識新磁碟,詢問是否應啟用這些磁碟,在前一種情況下,新磁碟隨後可供作業系統使用。磁碟已初始化,分區已創建等,並且完全可用,就像之前在同一物理插槽中的故障磁碟一樣。重要的是作業系統也像以前一樣對磁碟使用相同的命名:/dev/sdf/dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part*

儘管如此,ZFS 並沒有自動使用新磁碟來替換以前的磁碟。儘管池的狀態輸出提到了舊磁碟的序列號失去以及它過去的路徑,這與新磁碟同時獲得的相同。我需要使用zpool replace zfs-pool pci-0000:15:00.0-scsi-0:1:0:1-part3. 這使得 ZFS 將新磁碟放入正確的鏡像中,因為路徑相同,並且在重新同步後,備用磁碟也已自動刪除。

NAME                                         STATE     READ WRITE CKSUM
zfs-pool                                     DEGRADED     0     0     0
 mirror-0                                   ONLINE       0     0     0
   pci-0000:05:00.0-scsi-0:1:0:0-part3      ONLINE       0     0     0
   pci-0000:15:00.0-scsi-0:1:0:0-part3      ONLINE       0     0     0
 mirror-1                                   DEGRADED     0     0     0
   pci-0000:05:00.0-scsi-0:1:0:1-part3      ONLINE       0     0     0
   spare-1                                  DEGRADED     0     0     0
     replacing-0                            DEGRADED     0     0     0
       11972718311040401135                 UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part3/old
       pci-0000:15:00.0-scsi-0:1:0:1-part3  ONLINE       0     0     0  (resilvering)
     pci-0000:15:00.0-scsi-0:1:0:3-part3    ONLINE       0     0     0
 mirror-2                                   ONLINE       0     0     0
   pci-0000:05:00.0-scsi-0:1:0:2-part3      ONLINE       0     0     0
   pci-0000:15:00.0-scsi-0:1:0:2-part3      ONLINE       0     0     0
spares
 pci-0000:05:00.0-scsi-0:1:0:3-part3        AVAIL
 pci-0000:15:00.0-scsi-0:1:0:3-part3        INUSE     currently in use

問題

雖然使用的命令是文件以這種方式工作,但我想知道為什麼autoreplace啟用它是必要的?新磁碟分區成功後不應該立即完成這一步驟嗎?還是所autoreplace發出的命令完全需要該屬性?沒有記錄依賴該設置:

zpool 替換$$ -f $$池 old_device$$ new_device $$

$$ … $$ 如果池不是冗餘的,則需要 new_device。如果未指定 new_device,則預設為 old_device。這種替換形式在現有磁碟發生故障並被物理替換後很有用。在這種情況下,新磁碟可能與舊設備具有相同的 /dev/dsk 路徑,即使它實際上是不同的磁碟。ZFS 認識到這一點。

ZFS 依靠ZED來處理自動更換故障/斷開連接的磁碟,因此您必須確保 ZED 正在執行。但是,最新的 0.8.x ZED 版本存在一個錯誤,該錯誤會阻止 ZFS 正確地對替換的磁碟進行自動分區。請注意,此錯誤在 0.7.x ZFS/ZED 版本中不存在。

編輯:根據您在下面的評論的一些答案:

  • ZED 是否以某種方式“內部”自動替換,或者是否需要使用熱備件和其他操作的腳本?ZED 在其 FMA(故障管理代理)內部處理自動替換。換句話說,代理目錄中不需要腳本。這些腳本通常在 FMA之後執行,並且應該啟動相應的操作,例如啟動清理、記錄到 syslog 等
  • *在自動替換的情況下,我在哪裡可以找到有關應用自動分區的詳細資訊?我將單個分區而不是整個磁碟轉發到 ZFS。*自動分區僅在將整個磁碟傳遞給 ZFS 時才有效(請注意,它是 ZFS 本身,而不是 ZED,對受影響的磁碟進行分區)。將現有分區傳遞給 ZFS(即:sda1用作 vdev)時,根本不會觸及分區表。

引用自:https://serverfault.com/questions/1032419