Восстановление/импорт пула ZFS Linux с дублирующимся именем пула

Восстановление/импорт пула ZFS Linux с дублирующимся именем пула

Сегодня я сделал что-то очень глупое, пытаясь добавить третье зеркало к существующему Linux zpool с именем backup. Достаточно сказать, что я допустил пару ошибок, потому что я не особо занимаюсь администрированием ZFS, кроме как меняю диски раз в пару лет. И пытаясь исправить их, я неправильно понял онлайн-советы по пересозданию пула и создал новый пул с именем , backupтем самым уничтожив существующий пул. (Да, я использовал эту -fопцию после того, как он пожаловался. Да, я идиот. Теперь я знаю, что больше так делать не стоит. Двигаемся дальше.)

Из того, что я прочитал в интернете, мой исходный backupпул, который я "создал", скорее всего, не подлежит восстановлению. Что, в общем-то, нормально, потому что он так назван не просто backupтак — в основном там хранятся мои резервные копии за последние ~15 лет. Однако есть несколько вещей, которые было бы неплохо вернуть (некоторые несущественные данные, которые я временно переместил туда), и несколько вещей, на повторную настройку которых у меня уйдет несколько дней, связанных с настройками резервного копирования, которые находились на этом томе. (Теперь я знаю, что нужно делать резервные копии в другом месте, так что это будет обучающим опытом.)

Но у меня есть резервная копия моих резервных копий — сегодня я заменял третье зеркало на диске, который я удалил несколько месяцев назад во время очередного обновления моей системы (вместе с обновлением ОС). Этот диск на самом деле не вышел из строя, но он был старым и начал накапливать пару плохих секторов, поэтому я решил, что лучше просто вынуть его, чем ждать, пока он испортится или что-то в этом роде.

В любом случае, у меня все еще есть этот старый диск, поэтому я подумал, что могу просто вставить его обратно в свою систему и восстановить данные пула оттуда. Мне не хватает только последних нескольких месяцев резервных данных. Теперь, я никогда официально не экспортировал пул на этом диске или что-то в этом роде. И с тех пор я обновил свою ОС, поэтому я не ожидал, что она автоматически обнаружит этот диск. (Я не знаю, подключен ли он к тому же порту SATA или нет, так как я переставлял некоторые диски.)

Но zpool importкоманда, похоже, ничего не находит автоматически. Играя с некоторыми опциями, zpool importвижу (теперь уничтоженную) вторую версию пула backup, но это всего лишь пустой пул, который я случайно создал на двух других дисках.

Есть ли у вас какие-нибудь советы, как мне попытаться прочитать данные на этом третьем диске? Насколько я помню, это было прекрасно работающее и актуальное зеркало пула ZFS, пока я не вытащил его из корпуса несколько месяцев назад. В частности:

  1. Является ли тот факт, что есть уничтоженный пул, который называется backupпотенциально помехой для возможности обнаружить и попытаться восстановить/импортировать этот старый пул? Есть ли способ обойти это?
  2. У меня на сервере все еще есть старая установка ОС, которая, как я полагаю, работала, когда я использовал старый диск. Я попытался загрузиться в нее, просто чтобы посмотреть, может ли она просто обнаружить пул ZFS, но этого не произошло. (Опять же, диск может быть подключен не в то же место.) Но есть ли какие-либо файлы журналов ZFS или другие вещи, которые я мог бы вытащить, которые могли бы содержать метаданные об этом старом пуле или идентификационный номер или что-то еще, что я мог бы потенциально использовать, чтобы заставить ZFS импортировать то, что должно быть неповрежденным зеркалом на этом диске?
  3. Я просто предполагаю, что мой пул на первых двух дисках был уничтожен через команду create -f. Но если у кого-то есть идея, как я могу восстановить первый пул прямо там, это, очевидно, было бы здорово.
  4. Есть ли еще какие-то причины, по которым ZFS не распознает старое третье зеркало как диск пула ZFS? Если да, то есть ли другие предложения? Другие инструменты восстановления, которые я могу попробовать?

Спасибо за любую помощь и предложения.

EDIT: Вот вывод с zdb -l /dev/sdb1(третьего диска)

------------------------------------
LABEL 0
------------------------------------
    version: 5000
    name: 'backup'
    state: 0
    txg: 0
    pool_guid: 3936176493905234028
    errata: 0
    hostid: 8323329
    hostname: [omitted]
    top_guid: 14695910886267065742
    guid: 17986383713788026938
    vdev_children: 1
    vdev_tree:
        type: 'mirror'
        id: 0
        guid: 14695910886267065742
        whole_disk: 0
        metaslab_array: 34
        metaslab_shift: 33
        ashift: 12
        asize: 1000197324800
        is_log: 0
        create_txg: 4
        children[0]:
            type: 'disk'
            id: 0
            guid: 17914838236907067293
            path: '/dev/sdd1'
            whole_disk: 0
            DTL: 143
            create_txg: 4
        children[1]:
            type: 'disk'
            id: 1
            guid: 17986383713788026938
            path: '/dev/sdb1'
            whole_disk: 0
            DTL: 141
        children[2]:
            type: 'disk'
            id: 2
            guid: 1683783279473519399
            path: '/dev/sdc1'
            whole_disk: 0
            DTL: 145
            create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data
    create_txg: 0
    labels = 0 1 2 3 

Если я правильно это понимаю, статус 0 означает, что пул должен быть целым. Но когда я пытаюсь импортировать даже с использованием GUID пула zpool import 3936176493905234028, я получаю ошибку "невозможно импортировать... такой пул недоступен". (Я предполагаю, что мне следует использовать pool_guid, но я пробовал использовать также guid и top_guid, и ничего не работает.)

EDIT2: Я восстановил файл zpool.cache из исходной ОС, в которой этот пул был активен, и попробовал zpool import -c zpool.cache, что дало следующее:

   pool: backup
     id: 3936176493905234028
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

    backup      UNAVAIL  insufficient replicas
      mirror-0  UNAVAIL  insufficient replicas
        sdd1    FAULTED  corrupted data
        sdc1    FAULTED  corrupted data

Что в некоторой степени ожидаемо. Это два диска, где пул был перезаписан моей командой create. Однако sdb1 не указан как потенциальный диск там — вероятно, потому что я удалил его из пула после того, как вынул диск. Тем не менее, я думаю, что у меня есть неповрежденная копия старых зеркальных данных на sdb1, и zdb соглашается. Почему он не импортируется?

Связанный контент