Импорт zpool с отсутствующим кеш-устройством
Собирался попробовать SmartOS, частично потому что я не был удовлетворен FreeNAS для моего использования. Создан новый zpool на старом кеш-диске для зон SmartOS. Это было всего лишь предыстория. Дело в том, что теперь нельзя импортировать старый пул FreeNAS в Ubuntu 15.04.
pool: pool5
id: 14850262647910895720
state: UNAVAIL
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-EY
config:
pool5 UNAVAIL missing device
raidz2-0 ONLINE
ata-WL3000GSA6472_WOL240282406 ONLINE
ata-WL3000GSA6472_WOL240282471 ONLINE
ata-WL3000GSA6472_WOL240282504 ONLINE
ata-WL3000GSA6472_WOL240282506 ONLINE
ata-WL3000GSA6472_WOL240282472 ONLINE
cache
ata-ST31500341AS_6VS073SA
pool: zones
id: 513536768382594111
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://zfsonlinux.org/msg/ZFS-8000-EY
config:
zones ONLINE
ata-ST31500341AS_6VS073SA ONLINE
С тех пор я разрушил зоны.
Перепробовал большинство силовых вариантов и комбинаций, похожие результаты:
$ sudo zpool import pool5
cannot import 'pool5': pool may be in use from other system, it was last accessed by freenas.local (hostid: 0x8120288a) on Tue Oct 27 16:24:56 2015
$ sudo zpool import -f pool5
cannot import 'pool5': one or more devices is currently unavailable
$ sudo zpool import -Ff pool5
cannot import 'pool5': one or more devices is currently unavailable
$ sudo zpool import -fm pool5
cannot import 'pool5': one or more devices is currently unavailable
$ sudo zpool import -FfmX pool5
cannot import 'pool5': one or more devices is currently unavailable
$ sudo zpool import -fD pool5
cannot import 'pool5': no such pool available
$ sudo zpool import -nF pool5
cannot import 'pool5': pool may be in use from other system, it was last accessed by freenas.local (hostid: 0x8120288a) on Tue Oct 27 16:24:56 2015
use '-f' to import anyway
$ sudo zpool import -m pool5
cannot import 'pool5': pool may be in use from other system, it was last accessed by freenas.local (hostid: 0x8120288a) on Tue Oct 27 16:24:56 2015
use '-f' to import anyway
$ sudo zdb -e pool5
говорит:
Configuration for import:
vdev_children: 2
version: 5000
pool_guid: 14850262647910895720
name: 'pool5'
state: 0
hostid: 2166368394
hostname: 'freenas.local'
vdev_tree:
type: 'root'
id: 0
guid: 14850262647910895720
children[0]:
type: 'raidz'
id: 0
guid: 142933150631883837
nparity: 2
metaslab_array: 33
metaslab_shift: 37
ashift: 12
asize: 15002891714560
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 79266291072794538
whole_disk: 1
DTL: 356
create_txg: 4
path: '/dev/disk/by-id/ata-WL3000GSA6472_WOL240282406-part1'
children[1]:
type: 'disk'
id: 1
guid: 1087294782673888508
whole_disk: 1
DTL: 258
create_txg: 4
path: '/dev/disk/by-id/ata-WL3000GSA6472_WOL240282471-part1'
children[2]:
type: 'disk'
id: 2
guid: 2219503574895013140
whole_disk: 1
DTL: 257
create_txg: 4
path: '/dev/disk/by-id/ata-WL3000GSA6472_WOL240282504-part1'
children[3]:
type: 'disk'
id: 3
guid: 6460403329296563235
whole_disk: 1
DTL: 202
create_txg: 4
path: '/dev/disk/by-id/ata-WL3000GSA6472_WOL240282506-part1'
children[4]:
type: 'disk'
id: 4
guid: 9844978706073275260
whole_disk: 1
DTL: 167
create_txg: 4
path: '/dev/disk/by-id/ata-WL3000GSA6472_WOL240282472-part1'
children[1]:
type: 'missing'
id: 1
guid: 0
zdb: can't open 'pool5': No such device or address
версии:
libzfs2 0.6.5.3-1~vivid amd64 Native OpenZFS filesystem library for Linux
ubuntu-zfs 9~vivid amd64 Native ZFS filesystem metapackage for Ubuntu.
zfs-dkms 0.6.5.3-1~vivid amd64 Native OpenZFS filesystem kernel modules for Linux
zfsutils 0.6.5.3-1~vivid amd64 Native OpenZFS management utilities for Linux
Пробовал импортировать из девлоидов:
~/tmp$ ln -s $(for link in /dev/disk/by-id/ata-WL3000GSA6472_WOL240282406* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282471* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282504* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282506* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282472* ; do readlink -f "${link}" ; done) ./
~/tmp$ ls
sdb sdb1 sdb9 sdc sdc1 sdc9 sdd sdd1 sdd9 sde sde1 sde9 sdf sdf1 sdf9
~/tmp$ sudo zpool import -d ./ pool5
cannot import 'pool5': pool may be in use from other system, it was last accessed by freenas.local (hostid: 0x8120288a) on Tue Oct 27 16:24:56 2015
use '-f' to import anyway
~/tmp$ sudo zpool import -fd ./ pool5
cannot import 'pool5': one or more devices is currently unavailable
и странная часть (что такое ada1? о. вероятно, devbsde freebsd):
$ sudo zpool import -d tmp
pool: pool5
id: 14850262647910895720
state: UNAVAIL
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-EY
config:
pool5 UNAVAIL missing device
raidz2-0 ONLINE
sde ONLINE
sdc ONLINE
sdd ONLINE
sdb ONLINE
sdf ONLINE
cache
ada1
Можно ли повторно инициализировать кеш-устройство, чтобы оно могло найти его снова? Сколько информации хранит устройство кеша в своем пуле? Будет ли работать просто сделать еще один zpool и добавить его в кеш? У zdb, по-видимому, нет указаний для него - просто потребуется бесплатный кеш-диск? Могу ли я создать кеш-накопитель и вставить в него ссылку на ada1 и получить его?
2 ответа
Какая версия ZFS на Linux? Импорт с отсутствующим устройством кэширования - это "более новая" функция (больше не такая новая, но ZoL в прошлом немного отставал)
Кроме того, если вам это не нужно, попробуйте уничтожить пул "зон", чтобы кеш-устройство в вашем "пуле5" не было заблокировано. Вы можете оказаться в странной ситуации, потому что устройство на самом деле не пропало, его просто невозможно использовать, потому что оно заблокировано другим пулом.
Другие вещи, которые нужно попробовать: zpool import -m pool5 (требуется только для отсутствующего устройства журнала, а не для отсутствующего устройства кэширования)
zpool import -nF pool5
Я не знаю наверняка, но после нашего небольшого переворота в комментариях к вопросу, я думаю, что проблема может быть в том, что устройство существует, но больше не является устройством кэш-памяти, и это как-то сбивает с толку ZFS toolchain до такой степени, что не может нормально импортировать пул.
Если это является основной причиной ваших проблем, то вы вполне могли бы обойти проблему, импортировав из другого каталога.
Для этого создайте временный каталог и заново создайте в нем необходимые символические ссылки устройства. Например:
# mkdir /tmp/zfs
# cd /tmp/zfs
# ln -s $(for link in /dev/disk/by-id/ata-WL3000GSA6472_WOL240282406* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282471* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282504* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282506* /dev/disk/by-id/ata-WL3000GSA6472_WOL240282472* ; do readlink -f "${link}" ; done) ./
# zpool import -d /tmp/zfs
(Долго ln
Команда просто воссоздает ata-WL...
ссылки и гарантирует, что они указывают на правильный узел устройства.)
Если все будет хорошо, финал zpool import -d ...
должен вывести что-то вроде следующего:
pool: pool5
id: 14850262647910895720
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
pool5 ONLINE
raidz2-0 ONLINE
ata-WL3000GSA6472_WOL240282406 ONLINE
ata-WL3000GSA6472_WOL240282471 ONLINE
ata-WL3000GSA6472_WOL240282504 ONLINE
ata-WL3000GSA6472_WOL240282506 ONLINE
ata-WL3000GSA6472_WOL240282472 ONLINE
cache
...something... MISSING (was ata-ST31500341AS_6VS073SA)
Я не знаю точный формат в zpool import
вывод для отсутствующего устройства кеша (оно может даже не отображаться вообще), поэтому возьмите эту часть с небольшим количеством соли, и она все еще может жаловаться на пул, "используемый", но, надеюсь, это даст ZFS шанс ищите пул и не запутайтесь в устройстве кеша, потому что ZFS будет искать там, где устройство кеша даже не существует.
Если это работает, вы сможете импортировать пул, используя -d /tmp/zfs -f
(вам нужно будет использовать -f
потому что пул не экспортировался ранее, но я все равно рекомендую сначала попробовать без него, потому что -f
с ZFS очень часто не то, что вы хотите сделать, и вы не должны привыкать использовать его, если вы не уверены наверняка, что вы хотите его использовать и почему вы хотите его использовать), удалите устройство кеша из пула, используя что-то вроде zpool detach pool5 ...something...
экспортируйте пул, а затем повторно импортируйте пул в обычном режиме. Затем вы можете повторно добавить кеш-устройство, если хотите (хотя я настоятельно рекомендую не использовать шпиндель для кеш-устройства).
После того, как вы сможете повторно импортировать пул в обычном режиме (без использования -d
) вы можете безопасно удалить каталог /tmp/zfs (или другой временный), который вы создали выше.
Также, если это сработает, я бы посоветовал вам подать отчет об ошибке в трекер проблем проекта. Этот вид обходного пути не должен быть необходим для того, что, по сути, является хранилищами изменчивых данных.