Назад | Перейти на главную страницу

Как мне восстановить пул ZFS, который внезапно отключился и сообщает, что «последний раз использовался другой системой»?

tl; dr: Я использую NAS-сервер FreeBSD 11.2 с ZFS на сервере с 16 ГБ памяти ECC. Я обнаружил, что мой основной бассейн исчез. ZFS видит пул, но сообщает об ошибке ZFS-8000-EY и что это cannot import 'tank': pool may be in use from other system, it was last accessed by nasserver (hostid: 0xaaaaaaaa) on Sat Apr 13 04:16:22 2019, однако в этом пуле есть никогда использовался другой системой и nasserver текущий хост. Боюсь, мой бассейн поврежден. Что мне делать, чтобы попытаться восстановить его? У меня есть резервные копии, но они устарели, так как мне приходится делать их вручную. Я не пробовал бежать zpool import -f tank все же, поскольку я хочу быть осторожным, чтобы не сделать ничего хуже.


Полный вопрос:

Я использую NAS-сервер FreeBSD 11.2 с ZFS. Я вернулся из отпуска и обнаружил, что сервер работает, но тома NAS были недоступны. Когда я ssh'd в коробку, я обнаружил, что мой мужской бассейн tank скучал:

root@nasserver:/home/root # zpool status   pool: zroot state: ONLINE status: Some supported features are not enabled on the pool. The pool can
        still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.   scan: scrub repaired 0 in 0h0m with 0 errors on Sat Mar 23 03:01:44 2019 config:


        NAME                                  STATE     READ WRITE CKSUM
        zroot                                 ONLINE       0     0     0
          mirror-0                            ONLINE       0     0     0
            diskid/DISK-XXXXXXXXXXXXXXXXXXX1  ONLINE       0     0     0
            diskid/DISK-XXXXXXXXXXXXXXXXXXX2  ONLINE       0     0     0


errors: No known data errors

Диски кажутся доступными, и я попытался импортировать их, но ZFS сообщает, что cannot import 'tank': pool may be in use from other system, it was last accessed by nasserver (hostid: 0xaaaaaaaa) on Sat Apr 13 04:16:22 2019. Это странно, потому что я никогда не использовал эти диски в другой системе, а указанное имя хоста является именем хоста машины, к которой они подключены:

root@nasserver:/home/root # zpool import
   pool: tank
     id: 12345678901234567901
  state: ONLINE
status: The pool was last accessed by another system.
action: The pool can be imported using its name or numeric identifier and
        the '-f' flag.
   see: http://illumos.org/msg/ZFS-8000-EY
config:


        tank                    ONLINE
          raidz1-0              ONLINE
            gpt/tank-1          ONLINE
            gpt/tank-2          ONLINE
            gpt/tank-3          ONLINE
            gpt/tank-4          ONLINE


root@nasserver:/home/root # zpool import tank
cannot import 'tank': pool may be in use from other system, it was last accessed by nasserver (hostid: 0xaaaaaaaa) on Sat Apr 13 04:16:22 2019
use '-f' to import anyway

Боюсь, мой пул поврежден. У меня есть резервные копии, но они несколько устарели. Что мне делать, чтобы восстановить мой пул?

zpool import -f tank, как и в диалоговом окне ошибки.

Это довольно редкая ошибка, но я видел ее раньше (может быть, один или два раза на более чем 100 машинах за последние десять лет); если что-то появляется чтобы изменить имя хоста и, возможно, какую-то другую магию, zfs не будет автоматически импортировать пул из-за (возможно, превышения) предупреждения о том, что это может быть не тот компьютер, которому принадлежит пул. Использовать -f чтобы отменить это предостережение, и пуф, вот ваш пул (и он должен автоматически импортировать штраф в следующем раунде).

Это наверное большинство Вероятно, это произойдет после сбоя или отключения электроэнергии, в результате которого система не будет работать без правильного экспорта пула при выходе из строя.