Proxmox VE 更換 rpool 硬碟

因 BUBU 公司裡面剛好收到警告的通知信,說 PVE 裡面有硬碟異常,因此通知廠商進行更換硬碟,問題訊息如下

The number of I/O errors associated with a ZFS device exceeded acceptable levels. ZFS has marked the device as faulted.

 impact: Fault tolerance of the pool may be compromised.
    eid: 43424
  class: statechange
  state: FAULTED
   host: PVE-08
   time: 2020-12-17 08:44:36+0800
  vpath: /dev/disk/by-id/scsi-35000c50054b90b8f-part3
  vguid: 0x030AC4CF7B12899B
   pool: 0x73036093A30D2BC8

從後台查看硬碟資訊狀態

pve-hdd-bad-05.jpg

解決程過


解決方式如下

  • 首先確認一下是那顆硬碟異常,可以下一段指令來查看硬碟的燈號,這樣子就可以預防拔錯硬碟
針對該硬碟的代號
dd if=/dev/sda  of=/dev/null
針對該硬碟的ID
dd if=/dev/disk/by-id/scsi-drive-that-is-dying of=/dev/null
  • 確認完之後直接把問題的硬碟拔出來更換新的硬碟上去

  • 更換上去之後下一段指令更換硬碟,指令說明

zpool replace pool名稱 故障硬碟的序號 正常新硬碟的序號

                            異常硬碟序號          正常硬碟序號
 zpool replace rpool scsi-35000c50054b90b8f scsi-350
  • 下完指令如果有出現以下的訊息的話

pve-hdd-bad-04.jpg

  • 這一段是在說明找尋不到問題的硬碟資訊,下一段指令是 zdb ,將舊的 GUID 給找尋出來
rpool:
    version: 5000
    name: 'rpool'
    state: 0
    txg: 2256051
    pool_guid: 8287573
    errata: 0
    hostid: 2
    hostname: ''
    com.delphix:has_per_vdev_zaps
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 8
        create_txg: 4
        children[0]:
            type: 'mirror'
            id: 0
            guid: 76
            metaslab_array: 256
            metaslab_shift: 32
            ashift: 12
            asize: 59
            is_log: 0
            create_txg: 4
            com.delphix:vdev_zap_top: 129
            children[0]:
                type: 'disk'
                id: 0
                guid: 219203927282977179
                path: '/dev/disk/by-id/scsi-35000c50054b90b8f-part3'
                whole_disk: 0
                DTL: 134
                create_txg: 4
                com.delphix:vdev_zap_leaf: 130
                faulted: 1
            children[1]:
                type: 'disk'
                id: 1
                guid: 826
                path: '/dev/disk/by-id/scsi-'
                whole_disk: 0
                DTL: 133
                create_txg: 4
                com.delphix:vdev_zap_leaf: 131
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
  • 查看舊的 GUID 之後將舊的 GUID 記錄下來再重新下一次更換硬碟的指令
 zpool replace rpool 219203927282977179 scsi-350
  • 更新成功會有這樣子的訊息如下

pve-hdd-bad-06.png

  • zpool status rpool 查看該 pool 目前的狀態

pve-hdd-bad-01.png

  • 查看前目同步的狀況 zpool iostat -v rpool

pve-hdd-bad-02.png

  • 再次確認 zpool status rpool 同步成功的狀態

pve-hdd-bad-03.png

補充說明


109.12.24 今天剛好更新系統結果重啟服務發現到無法開機,結果是因為之前沒有完整的修復好,造成系統無法正常進入,遇到這樣子的問題無法使用上面方式,上面的方式只能適合一般資料區用,在 rpool 不建議使用這樣子的方式,正確處理方式如下:

  • 複製分割區資訊
                     目的      來源
sgdisk --replicate=/dev/sdb /dev/sda

執行結果:The operation has completed successfully.

  • Randomize GUIDs to ensure uniqueness after cloning (隨機GUID以確保克隆後的唯一性)
sgdisk --randomize-guids /dev/sdb

執行結果:The operation has completed successfully.

  • 安裝 Grub
grub-install /dev/sda

執行結果如下:

Installing for i386-pc platform.
Installation finished. No error reported.
  • 取代 zpool 錯誤硬碟
zpool replace rpool  /dev/sdb2  /dev/new_disk_id

備註


如果你已經先照上面的做法的話,那可能會建議重新建之後再來執行一次,那我順便記一下我的流程

  • 先將那顆做錯訊的硬碟先踢除陣列
              pool-name   要踢的名稱
zpool detach   mypool     ada2p3
  • 踢完之後將該顆硬碟上的分割資訊都刪除掉變成空的硬碟
  • 再重新將剛剛上面補充流程跑一次之後,再重新把剛剛做好的硬碟加入 rpool 裡面
                        原本在裡面的硬碟             要加入硬碟資訊
zpool attach rpool scsi-35000c50068a7cfc7-part3 scsi-35000c500b83fb21b-part3

執行結果:Make sure to wait until resilver is done before rebooting.

再下查詢指令看目前該 pool 的狀態 zpool status,同步完成後確認沒有問題,試著在將設備重新啟動看會不會正常進入系統。




參考相關網頁