Freebsd

ZFS:i/o 錯誤 - 所有塊副本不可用 -zpool 不可用

  • April 26, 2022

伺服器重新啟動在控制台上產生了以下輸出:

ZFS: i/o error - all block copies unavailable
ZFS: failed to read pool zroot directory object
qptzfsboot: failed to mount default pool zroot

FreeBSD/x86 boot
ZFS: i/o error - all block copies unavailable
ZFS: can't fild dataset 0
Default: zroot/<0x0>
boot:

我從 usb livecd 啟動主機並在 /tmp 下掛載 /etc 目錄以啟用 ssh 訪問:

ifconf -a # get available i/f names
ifconf em0 inet 192.168.216.46
route add default 192.168.216.1
hostname vhost06.internal
mkdir /tmp/etc
mount_unionfs /tmp/etc /etc
echo 'PermitRootLogin yes' >> /etc/sshd_config
passwd
Changing local password for root
New Password:
Retype New Password:
service sshd onestart

沒有可導入的 zfs 池:

root@vhost06:~ # zpool status
no pools available
root@vhost06:~ # zpool list
no pools available
root@vhost06:~ # zfs list
no datasets available

gpart顯示這個幾何:

gpart 顯示

=>         40  15628053088  ada0  GPT  (7.3T)
          40         1024     1  freebsd-boot  (512K)
        1064          984        - free -  (492K)
        2048     16777216     2  freebsd-swap  (8.0G)
    16779264  15611273216     3  freebsd-zfs  (7.3T)
 15628052480          648        - free -  (324K)

=>         40  15628053088  ada1  GPT  (7.3T)
          40         1024     1  freebsd-boot  (512K)
        1064          984        - free -  (492K)
        2048     16777216     2  freebsd-swap  (8.0G)
    16779264  15611273216     3  freebsd-zfs  (7.3T)
 15628052480          648        - free -  (324K)

=>         40  15628053088  ada2  GPT  (7.3T)
          40         1024     1  freebsd-boot  (512K)
        1064          984        - free -  (492K)
        2048     16777216     2  freebsd-swap  (8.0G)
    16779264  15611273216     3  freebsd-zfs  (7.3T)
 15628052480          648        - free -  (324K)

=>         40  15628053088  ada3  GPT  (7.3T)
          40         1024     1  freebsd-boot  (512K)
        1064          984        - free -  (492K)
        2048     16777216     2  freebsd-swap  (8.0G)
    16779264  15611273216     3  freebsd-zfs  (7.3T)
 15628052480          648        - free -  (324K)

=>         40  15628053088  diskid/DISK-VAGWJ6VL  GPT  (7.3T)
          40         1024                     1  freebsd-boot  (512K)
        1064          984                        - free -  (492K)
        2048     16777216                     2  freebsd-swap  (8.0G)
    16779264  15611273216                     3  freebsd-zfs  (7.3T)
 15628052480          648                        - free -  (324K)

=>         40  15628053088  diskid/DISK-VAGWV89L  GPT  (7.3T)
          40         1024                     1  freebsd-boot  (512K)
        1064          984                        - free -  (492K)
        2048     16777216                     2  freebsd-swap  (8.0G)
    16779264  15611273216                     3  freebsd-zfs  (7.3T)
 15628052480          648                        - free -  (324K)

=>         40  15628053088  diskid/DISK-VAHZAD2L  GPT  (7.3T)
          40         1024                     1  freebsd-boot  (512K)
        1064          984                        - free -  (492K)
        2048     16777216                     2  freebsd-swap  (8.0G)
    16779264  15611273216                     3  freebsd-zfs  (7.3T)
 15628052480          648                        - free -  (324K)

=>         40  15628053088  diskid/DISK-VAH3PXYL  GPT  (7.3T)
          40         1024                     1  freebsd-boot  (512K)
        1064          984                        - free -  (492K)
        2048     16777216                     2  freebsd-swap  (8.0G)
    16779264  15611273216                     3  freebsd-zfs  (7.3T)
 15628052480          648                        - free -  (324K)

=>       1  30240767  da0  MBR  (14G)
        1      1600    1  efi  (800K)
     1601   2012560    2  freebsd  [active]  (983M)
  2014161  28226607       - free -  (13G)

=>      0  2012560  da0s2  BSD  (983M)
       0       16         - free -  (8.0K)
      16  2012544      1  freebsd-ufs  (983M)

=>       1  30240767  diskid/DISK-00241D8CE51BB011B9A694C1  MBR  (14G)
        1      1600                                     1  efi  (800K)
     1601   2012560                                     2  freebsd  [active]  (983M)
  2014161  28226607                                        - free -  (13G)

=>      0  2012560  diskid/DISK-00241D8CE51BB011B9A694C1s2  BSD  (983M)
       0       16                                          - free -  (8.0K)
      16  2012544                                       1  freebsd-ufs  (983M)

我該如何從這裡恢復?

<——–原始問題結束

我已經取得了一些進展,並設法導入和掛載了一個根數據集——iocage。這是*zfs 系統上的啟動,*但我找不到包含根文件系統的數據集,因此我無法訪問 /var/log 以查看是否有任何內容:

mkdir /tmp/zroot                       # /tmp is a writable file system
zpool -f zroot                         # force the zpool import
zfs set mountpoint=/tmp/zroot  zroot   # mount the imported pool in a writable fs
zfs mount -a                           # find and mount all the datasets
ll /tmp/zroot
total 12
drwxr-xr-x  9 root  wheel  11 Feb 27 13:09 iocage/

幸運的是,所有絕對關鍵的東西都在裡面/zroot/iocage,因為主機只是充當監獄的平台。但是,缺少根數據集對我來說很麻煩。

Azpool status顯示 zroot 沒有錯誤。

接下來,我使用zfs send.

zfs snapshot -r zroot/iocage@vh6iocsend1
zfs send -R zroot/iocage@vh6iocsend1 | ssh 192.168.216.45 zfs receive zroot/iocagev6

這需要一段時間,但它已成功完成。

現在我需要啟動問題主機。這台主機昨天中午重啟沒問題。我不記得執行freebsd-update fetch了,但是即使我有任何東西可以獲取,因為系統已經在 12.1p2

我仍然需要幫助讓主機啟動。

<———-

補充筆記:

我能夠zpool使用以下altroot選項安裝整個zpool import

  1. 啟動到 live cd shell。
  2. 導入 zfs 池,但不允許import自動掛載任何數據集:zpool import -o altroot=/tmp/altroot -N -a
  3. 首先掛載根/數據集:zfs mount zroot/ROOT/default.
  4. 現在掛載剩餘的數據集:zfs mount -a.

整個zroot池的文件系統現在可以在/tmp/altroot.

我已經使用它zfs send來將內容移動/var到另一個主機。實際上,我發送了整個池。

但是,原來的系統仍然無法啟動。

作為最後的手段,我從無法啟動的主機中取出了四個硬碟,並將它們放在配置相同的伺服器中。該伺服器從這些硬碟啟動。顯然是硬體問題。

新主機上仍然存在異常:如果托架 1 被佔用,那麼只有當托架 0 或託架 2 中的至少一個同樣被佔用時,系統才會啟動。配置 0-,1A,2-,3B 不會啟動。我不知道為什麼會這樣。

此錯誤(當伺服器無法從 zfs 根池啟動,但在另一台機器上導入時池似乎完全完好)通常表明引導塊(核心部分和載入器正在搜尋的其他文件,而不是實際的載入器塊)遷移到推測的 1024 千兆字節以外的地方,已知引導載入程序可以到達它們,現在它們位於很遠的地方,它不能。

這是一個廣為人知的 FreeBSD gptzfsboot 載入程序問題。不幸的是,這些引導塊在安裝後被放置在分區的開頭附近,它就像一個帶電的定時炸彈,爆炸的時間未知。

因此建議(不幸的是,有經驗的人 - 不是由手冊和 bsdinstall 建議)具有小於 1 TB 的 zfs 根池。不知道這些小根池會受到影響。

另一個解決方案似乎是(至少有報導)切換到 UEFI 引導載入程序:在處理大磁碟時它更大,功能更強大;gptzfsboot非常小,缺乏所需的所有功能。

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