補覺鳴詩

學海無涯


  • 首頁

  • archive

  • 關於我

  • 搜尋

Proxmox VE ZFS 更換硬碟

時間: 2019-11-10   |   分類: proxmox VE   | 字數: 1040 字 | 閱讀: 3分鐘 | 閱讀次數:

如果有一顆硬碟故障了

該如何處理

 

首先用

zpool status

查看 pool 的組成模式、硬碟、狀態

正常情況

root@pve:~# zpool status
  pool: RAID1
 state: ONLINE

config:

        NAME        STATE     READ WRITE CKSUM
        RAID1       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sda1    ONLINE       0     0     0
            sdc1    ONLINE       0     0     0

==================================================
異常
root@pve:~# zpool status
  pool: RAID1
 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 5.68M in 0 days 00:00:01 with 0 errors on Sun Nov 10 10:30:25 2019
config:

        NAME        STATE     READ WRITE CKSUM
        RAID1       DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            sda1    ONLINE       0     0     0
            sdc1    UNAVAIL      3   261     0

errors: No known data errors

 

這時候,如果有一顆硬碟離線了

就會發現 HEALTH  變成 DEGRADED

root@pve:~# zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
RAID1   199G   744M   198G        -         -     0%     0%  1.00x  DEGRADED  -

 

這時候你就算更換了硬碟

也不會自動 rebuild 成 online

這是因為 zfs 預設參數問題

 

手動更換

更換流程

1.在更換硬碟之前

先用

zpool status

查看哪一顆硬碟故障 ex. sdc1

root@pve:~# zpool status
  pool: RAID1
 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 5.68M in 0 days 00:00:01 with 0 errors on Sun Nov 10 10:30:25 2019
config:

        NAME        STATE     READ WRITE CKSUM
        RAID1       DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            sda1    ONLINE       0     0     0
            sdc1    UNAVAIL      3   261     0

 

2.移除故障硬碟

3.安裝新硬碟

使用 fdisk 進行初始化

fdisk dev/sdc

g

w

 

4.使用指令更換硬碟

可以先用 fdisk -l 檢查硬碟所在位置

同位置

zpool replace -f RAID1 sdc1

如果是不同硬碟位置

zpool replace -f RAID1 sdc1 sdd1

 

最後再用 zpool status 查看 resilvering 狀態 (rebuilding)

root@pve:~# zpool status
  pool: RAID1
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Nov 10 10:53:33 2019
        15.5G scanned at 2.58G/s, 773M issued at 129M/s, 15.5G total
        776M resilvered, 4.87% done, 0 days 00:01:57 to go
config:

        NAME             STATE     READ WRITE CKSUM
        RAID1            DEGRADED     0     0     0
          mirror-0       DEGRADED     0     0     0
            sda1         ONLINE       0     0     0
            replacing-1  DEGRADED     0     0     0
              old        UNAVAIL      3   261     0
              sdc1       ONLINE       0     0     0  (resilvering)

 

resilver 完成

root@pve:~# zpool status
  pool: RAID1
 state: ONLINE
  scan: resilvered 15.5G in 0 days 00:01:35 with 0 errors on Sun Nov 10 10:55:08 2019
config:

        NAME        STATE     READ WRITE CKSUM
        RAID1       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sda1    ONLINE       0     0     0
            sdc1    ONLINE       0     0     0

errors: No known data errors

 

可以看到 zfs 因為是 file level 儲存,所以只 resilver 有資料的部分

 

使用自動更換

zfs 預設參數是不會自動更換故障硬碟的

這部分可以用

zpool get all  RAID1

找到 autoreplace

autoreplace 官方的定義是

只要在相同的實體位置 (就是同一個硬碟插槽)

找到新硬碟

那就會自動更換

autoreplace 這個參數 Proxmox 5.4 以前是 on

在 Proxmox 6.0 變成 off 了,而即便在 Proxmox 5.4 這個功能也不會起作用,必須要另外裝 zfs-zed 才行

 

zfs-zed   ZFS Event Daemon

就是用來監控 zfs 的狀態

首先要先加入 Proxmox 官方的 Package Repository

詳見 Proxmox VE 更新

安裝套件

apt update

apt install zfs-zed postfix

apt upgrade

* 這邊要注意 Proxmox 跟 debian 的 Repository 都有這個套件
必須使用 Proxmox 的

 

編輯 zed config

nano /etc/zfs/zed.d/zed.rc

## ZED_EMAIL_ADDR 用來發 mail 通知 zfs 狀態的使用者清單,範例發給兩位使用者 root test
ZED_EMAIL_ADDR="root test"

## ZED_EMAIL_PROG 使用 mail 通知功能 
ZED_EMAIL_PROG="mail"

## 設定格式 (參考 postfix)
ZED_EMAIL_OPTS="-s '@SUBJECT@' @ADDRESS@"


## 多久要重新通知 範例 10 分鐘一次
ZED_NOTIFY_INTERVAL_SECS=600


## 不管 pool health 皆發送通知
ZED_NOTIFY_VERBOSE=1

## resilver 完成後,進行 scrub (校驗檔案錯誤)動作
ZED_SCRUB_AFTER_RESILVER=1
重啟 zfs-zed 服務
systemctl restart zfs-zed

 

開啟功能

zpool set autoreplace=on

 

發信測試

echo “Test Email from the new server” | mail -s “Test Subject”

 

可惜實際測試 PVE 6.0

這功能有 BUG ,大概是這樣所以官方預設關掉了

已知問題是,autoreplace 只有在重開機時才會運作

health state 改變也不會發通知

comments powered by Disqus >
Owan

Owan

愛貓如癡

131 日誌
29 分類
37 標籤
GitHub
© 2010 - 2022 補覺鳴詩
Powered by - Hugo v0.96.0 / Theme by - NexT
0%