Сегодня я сделал что-то очень глупое, пытаясь добавить третье зеркало к существующему Linux zpool с именем backup
. Достаточно сказать, что я допустил пару ошибок, потому что я не особо занимаюсь администрированием ZFS, кроме как меняю диски раз в пару лет. И пытаясь исправить их, я неправильно понял онлайн-советы по пересозданию пула и создал новый пул с именем , backup
тем самым уничтожив существующий пул. (Да, я использовал эту -f
опцию после того, как он пожаловался. Да, я идиот. Теперь я знаю, что больше так делать не стоит. Двигаемся дальше.)
Из того, что я прочитал в интернете, мой исходный backup
пул, который я "создал", скорее всего, не подлежит восстановлению. Что, в общем-то, нормально, потому что он так назван не просто backup
так — в основном там хранятся мои резервные копии за последние ~15 лет. Однако есть несколько вещей, которые было бы неплохо вернуть (некоторые несущественные данные, которые я временно переместил туда), и несколько вещей, на повторную настройку которых у меня уйдет несколько дней, связанных с настройками резервного копирования, которые находились на этом томе. (Теперь я знаю, что нужно делать резервные копии в другом месте, так что это будет обучающим опытом.)
Но у меня есть резервная копия моих резервных копий — сегодня я заменял третье зеркало на диске, который я удалил несколько месяцев назад во время очередного обновления моей системы (вместе с обновлением ОС). Этот диск на самом деле не вышел из строя, но он был старым и начал накапливать пару плохих секторов, поэтому я решил, что лучше просто вынуть его, чем ждать, пока он испортится или что-то в этом роде.
В любом случае, у меня все еще есть этот старый диск, поэтому я подумал, что могу просто вставить его обратно в свою систему и восстановить данные пула оттуда. Мне не хватает только последних нескольких месяцев резервных данных. Теперь, я никогда официально не экспортировал пул на этом диске или что-то в этом роде. И с тех пор я обновил свою ОС, поэтому я не ожидал, что она автоматически обнаружит этот диск. (Я не знаю, подключен ли он к тому же порту SATA или нет, так как я переставлял некоторые диски.)
Но zpool import
команда, похоже, ничего не находит автоматически. Играя с некоторыми опциями, zpool import
вижу (теперь уничтоженную) вторую версию пула backup
, но это всего лишь пустой пул, который я случайно создал на двух других дисках.
Есть ли у вас какие-нибудь советы, как мне попытаться прочитать данные на этом третьем диске? Насколько я помню, это было прекрасно работающее и актуальное зеркало пула ZFS, пока я не вытащил его из корпуса несколько месяцев назад. В частности:
- Является ли тот факт, что есть уничтоженный пул, который называется
backup
потенциально помехой для возможности обнаружить и попытаться восстановить/импортировать этот старый пул? Есть ли способ обойти это? - У меня на сервере все еще есть старая установка ОС, которая, как я полагаю, работала, когда я использовал старый диск. Я попытался загрузиться в нее, просто чтобы посмотреть, может ли она просто обнаружить пул ZFS, но этого не произошло. (Опять же, диск может быть подключен не в то же место.) Но есть ли какие-либо файлы журналов ZFS или другие вещи, которые я мог бы вытащить, которые могли бы содержать метаданные об этом старом пуле или идентификационный номер или что-то еще, что я мог бы потенциально использовать, чтобы заставить ZFS импортировать то, что должно быть неповрежденным зеркалом на этом диске?
- Я просто предполагаю, что мой пул на первых двух дисках был уничтожен через команду
create -f
. Но если у кого-то есть идея, как я могу восстановить первый пул прямо там, это, очевидно, было бы здорово. - Есть ли еще какие-то причины, по которым 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 соглашается. Почему он не импортируется?