Как восстановить raidz с 3 диска, который вышел из строя

506
Konrad Eisele

У меня есть raidz vdev с 3 дисками. Disk0 теперь не удалось, и я пытаюсь восстановить, однако я не могу запустить zpool import. Disk0 все еще функционирует, однако таблица разделов была повреждена, и я попытался восстановить.

$ zpool import pool: epool id: 15752543265619539307 state: FAULTED status: One or more devices contains corrupted data. action: The pool cannot be imported due to damaged devices or data. The pool may be active on another system, but can be imported using the '-f' flag. see: http://zfsonlinux.org/msg/ZFS-8000-5E config:  epool FAULTED corrupted data raidz1-0 DEGRADED ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 UNAVAIL corrupted data ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1 ONLINE ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1 ONLINE 

Есть ли шанс отремонтировать эту настройку?

$ zdb -l /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1 ------------------------------------ LABEL 0 ------------------------------------ version: 5000 name: 'epool' state: 0 txg: 108340 pool_guid: 157525$43265619539307 errata: 0 hostname: 'eiselekd-lnx' top_guid: 5366409938038884073 guid: 3063814570901399057 vdev_children: 1 vdev_tree: type: 'raidz' id: 0 guid: 5366409938038884073 nparity: 1 metaslab_array: 35 metaslab_shift: 36 ashift: 12 asize: 9001706717184 is_log: 0 create_txg: 4 children[0]: type: 'disk' id: 0 guid: 9231358437407247535 path: '/dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1' whole_disk: 0 create_txg: 4 children[1]: type: 'disk' id: 1 guid: 3063814570901399057 path: '/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1KPRKPX-part1' whole_disk: 0 DTL: 136 create_txg: 4 children[2]:/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1 type: 'disk' id: 2 guid: 10884448206527621454 path: '/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7ZXC1E0-part1' whole_disk: 0 create_txg: 4 features_for_read: com.delphix:hole_birth com.delphix:embedded_data labels = 0 1 2 3  

В неисправном разделе не отображаются метки:

# zdb -l /dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 -------------------------------------------- LABEL 0 -------------------------------------------- failed to unpack label 0 -------------------------------------------- LABEL 1 -------------------------------------------- failed to unpack label 1 -------------------------------------------- LABEL 2 -------------------------------------------- failed to unpack label 2 -------------------------------------------- LABEL 3 -------------------------------------------- failed to unpack label 3 

однако есть Ueberblocks (магический 0cb1ba00, найденный в начале и конце раздела): я использовал zfs_revert-0.1.py ( https://gist.github.com/jshoward/5685757 ), тоже посмотрите информацию txg для disk0 и чего-то еще на диске 0 кажется там.

TXG TIME TIMESTAMP BLOCK ADDRESSES 108173 08 Feb 2018 02:24:11 1518053051 [360, 872, 5860494696, 5860495208] 108193 08 Feb 2018 02:25:59 1518053159 [264, 776, 5860494600, 5860495112] 108199 08 Feb 2018 02:26:30 1518053190 [312, 824, 5860494648, 5860495160] 108219 07 Mar 2018 16:44:43 1520437483 [472, 984, 5860494808, 5860495320] 108307 08 Mar 2018 15:58:41 1520521121 [408, 920, 5860494744, 5860495256] 108313 09 Mar 2018 14:25:03 1520601903 [456, 968, 5860494792, 5860495304] 108319 12 Mar 2018 17:33:00 1520872380 [504, 1016, 5860494840, 5860495352] 108325 14 Mar 2018 19:23:31 1521051811 [296, 808, 5860494632, 5860495144] 108331 15 Mar 2018 14:36:25 1521120985 [344, 856, 5860494680, 5860495192] 108337 15 Mar 2018 20:07:58 1521140878 [392, 904, 5860494728, 5860495240] 

Так что я думаю, что, возможно, разбиение переместило начало раздела. Не уверен Я сделал, dd if=/dev/sda | strings | grep WCC4N1KPRKPX-part1однако, информация о метке диска не там ...

Можно ли заменить ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572-part1 новым диском и восстановителем? Http://zfsonlinux.org/msg/ZFS-8000-5E звено в ZFS импортировать выход оленья кожа дают мне надежду, но все же ....

1

2 ответа на вопрос

1
Konrad Eisele

Невозможно восстановить пул zfs без zfs importработы. Однако zfs importэто не инструмент для восстановления после ошибок, и поэтому общая стратегия состоит в том, чтобы иметь резервную копию вместо того, чтобы полагаться на zfsотказоустойчивость. Я добавил https://github.com/hiliev/py-zfs-rescue для поддержки пулов Linux: https://github.com/eiselekd/dumpbin-py-zfs-rescue . С этим я смог восстановить мои диски.

0
a CVn

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

Я не уверен, почему ZFS не импортировала ваш пул сразу и просто пометила одно устройство как UNAVAIL, но вы пытались использовать -fв качестве вывода подсказок zpool import? Это первое, что я попробую.

После того, как пул импортирован, zpool offlineпроблемный раздел должен быть тривиальным, или даже лучше просто zpool replaceпереписать данные и восстановить избыточность.

В качестве примечания я рекомендую не использовать разделы с ZFS, если у вас нет для этого веских причин. Просто дайте ZFS весь диск (например /dev/disk/by-id/ata-WDC_WD30EZRX-00D8PB0_WD-WMC4N1642572) и дайте ему справиться с разметкой самостоятельно.

`` `zpool import``` является обязательным требованием при запуске любого восстановления. Я не мог заставить `` `zfs import``` принять мои диски. Основной причиной сбоя был неисправный контроллер SATA. Когда я узнал об этом, было уже слишком поздно, потому что я перепробовал слишком много опций `` `import```, включая те, которые пытаются исправить метаданные. Тогда решением было расширение https://github.com/hiliev/py-zfs-rescue для поддержки моего zpools в стиле Linux: https://github.com/eiselekd/dumpbin-py-zfs-rescue. Благодаря этому я смог восстановить свои данные. Konrad Eisele 6 лет назад 0