Импорт 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 (или другой временный), который вы создали выше.

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

Другие вопросы по тегам