У меня есть несколько ТБ очень ценных личных данных в zpool, к которым я не могу получить доступ из-за повреждения данных. Первоначально пул был создан еще в 2009 году или около того в системе FreeBSD 7.2, работающей внутри виртуальной машины VMWare поверх системы Ubuntu 8.04. Виртуальная машина FreeBSD по-прежнему доступна и работает нормально, только операционная система хоста теперь изменена на Debian 6. Жесткие диски стали доступными для гостевой виртуальной машины с помощью общих устройств SCSI VMWare, всего 12.
Есть 2 бассейна:
Тот, что работает, пустой, сломанный хранит все важные данные:
[user@host~]$ uname -a
FreeBSD host.domain 7.2-RELEASE FreeBSD 7.2-RELEASE #0: \
Fri May 1 07:18:07 UTC 2009 \
root@driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
[user@host ~]$ dmesg | grep ZFS
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6
[user@host ~]$ sudo zpool status
pool: zpool01
state: UNAVAIL
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zpool01 UNAVAIL 0 0 0 insufficient replicas
raidz1 UNAVAIL 0 0 0 corrupted data
da5 ONLINE 0 0 0
da6 ONLINE 0 0 0
da7 ONLINE 0 0 0
da8 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
da3 ONLINE 0 0 0
da4 ONLINE 0 0 0
pool: zpool02
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zpool02 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da9 ONLINE 0 0 0
da10 ONLINE 0 0 0
da11 ONLINE 0 0 0
da12 ONLINE 0 0 0
errors: No known data errors
Пару недель назад я смог получить доступ к бассейну. С тех пор мне пришлось заменить практически все оборудование хост-машины и установить несколько операционных систем хоста.
Я подозреваю, что одна из этих установок ОС написала загрузчик (или что-то еще) на один (первый?) Из дисков 500 ГБ и уничтожила некоторые метаданные zpool (или что-то еще) - `` или что-то еще '', что означает, что это очень расплывчатая идея и эта тема не совсем моя сильная сторона ...
О ZFS существует множество веб-сайтов, блогов, списков рассылки и т. Д. Я публикую этот вопрос здесь в надежде, что он поможет мне собрать достаточно информации для разумного, структурированного, контролируемого, информированного, знающего подхода, чтобы вернуть мои данные - и, надеюсь, помочь кому-то еще в такой же ситуации.
Первым результатом поиска при поиске в Google "восстановления zfs" является Устранение неполадок ZFS и восстановление данных главу из Руководства по администрированию Solaris ZFS. Во-первых Режимы отказа ZFS В разделе «Поврежденные данные ZFS» говорится:
Повреждение данных всегда необратимо и требует особого внимания во время ремонта. Даже если базовые устройства отремонтированы или заменены, исходные данные будут потеряны навсегда.
Несколько обескураживает.
Однако второй результат поиска Google Блог Макса Брунинга и там я прочитал
Недавно мне прислали электронное письмо от человека, у которого 15 лет видео и музыки хранились в пуле ZFS на 10 ТБ, который после сбоя питания стал неисправным. К сожалению, у него не было резервной копии. Он использовал ZFS версии 6 на FreeBSD 7. [...] Проведя около 1 недели на изучение данных на диске, я смог восстановить практически все их.
и
Что касается потери данных ZFS, я сомневаюсь. Я подозреваю, что ваши данные там, но вам нужно найти правильный способ получить их.
(это больше похоже на то, что я хочу услышать ...)
Первый шаг: В чем именно проблема ?
Как я могу определить, почему zpool считается поврежденным? Я вижу, что существует zdb, который, похоже, официально не документирован ни Sun, ни Oracle где-либо в сети. На его странице руководства:
NAME
zdb - ZFS debugger
SYNOPSIS
zdb pool
DESCRIPTION
The zdb command is used by support engineers to diagnose failures and
gather statistics. Since the ZFS file system is always consistent on
disk and is self-repairing, zdb should only be run under the direction
by a support engineer.
If no arguments are specified, zdb, performs basic consistency checks
on the pool and associated datasets, and report any problems detected.
Any options supported by this command are internal to Sun and subject
to change at any time.
Кроме того, Бен Роквуд опубликовал подробная статья и есть видео Макса Брюнинга, рассказывающего об этом (и mdb) на конференции разработчиков Open Solaris в Праге 28 июня 2008 г.
Запуск zdb от имени root на сломанном zpool дает следующий результат:
[user@host ~]$ sudo zdb zpool01
version=6
name='zpool01'
state=0
txg=83216
pool_guid=16471197341102820829
hostid=3885370542
hostname='host.domain'
vdev_tree
type='root'
id=0
guid=16471197341102820829
children[0]
type='raidz'
id=0
guid=48739167677596410
nparity=1
metaslab_array=14
metaslab_shift=34
ashift=9
asize=2000412475392
children[0]
type='disk'
id=0
guid=4795262086800816238
path='/dev/da5'
whole_disk=0
DTL=202
children[1]
type='disk'
id=1
guid=16218262712375173260
path='/dev/da6'
whole_disk=0
DTL=201
children[2]
type='disk'
id=2
guid=15597847700365748450
path='/dev/da7'
whole_disk=0
DTL=200
children[3]
type='disk'
id=3
guid=9839399967725049819
path='/dev/da8'
whole_disk=0
DTL=199
children[1]
type='raidz'
id=1
guid=8910308849729789724
nparity=1
metaslab_array=119
metaslab_shift=34
ashift=9
asize=2000412475392
children[0]
type='disk'
id=0
guid=5438331695267373463
path='/dev/da1'
whole_disk=0
DTL=198
children[1]
type='disk'
id=1
guid=2722163893739409369
path='/dev/da2'
whole_disk=0
DTL=197
children[2]
type='disk'
id=2
guid=11729319950433483953
path='/dev/da3'
whole_disk=0
DTL=196
children[3]
type='disk'
id=3
guid=7885201945644860203
path='/dev/da4'
whole_disk=0
DTL=195
zdb: can't open zpool01: Invalid argument
Я полагаю, что ошибка «недопустимый аргумент» в конце возникает из-за того, что zpool01 на самом деле не существует: этого не происходит на рабочем zpool02, но, похоже, нет и дальнейшего вывода ...
Хорошо, на данном этапе, вероятно, лучше опубликовать это, прежде чем статья станет слишком длинной.
Может быть, кто-нибудь даст мне совет, как двигаться дальше, и пока я жду ответа, я посмотрю видео, изучу детали вывода zdb выше, прочитаю статью Бенса и попытаюсь выяснить, что какие...
20110806-1600 + 1000
Я думаю, что нашел основную причину: Макс Брунинг был достаточно любезен, чтобы очень быстро ответить на мое электронное письмо с просьбой предоставить вывод zdb -lll
. На любом из 4 жестких дисков в «хорошей» половине пула raidz1 результат аналогичен тому, что я опубликовал выше. Однако на первых 3-х из 4-х передач «сломанной» половины zdb
отчеты failed to unpack label
для меток 2 и 3. Четвертый диск в пуле в порядке, zdb
показывает все ярлыки.
Погуглите это сообщение об ошибке эта почта. Из первого ответа на этот пост:
В ZFS это 4 идентичные метки на каждом физическом vdev, в данном случае на одном жестком диске. L0 / L1 в начале vdev и L2 / L3 в конце vdev.
Все 8 дисков в пуле одной модели, Seagate Barracuda 500 ГБ. Однако я помню, что запускал пул с 4-мя дисками, потом один из них умер и был заменен по гарантии Seagate. Позже я добавил еще 4 диска. По этой причине идентификаторы накопителя и микропрограммы разные:
[user@host ~]$ dmesg | egrep '^da.*?: <'
da0: <VMware, VMware Virtual S 1.0> Fixed Direct Access SCSI-2 device
da1: <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device
da2: <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device
da3: <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device
da4: <ATA ST3500418AS CC37> Fixed Direct Access SCSI-5 device
da5: <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device
da6: <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device
da7: <ATA ST3500320AS SD15> Fixed Direct Access SCSI-5 device
da8: <ATA ST3500418AS CC35> Fixed Direct Access SCSI-5 device
da9: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device
da10: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device
da11: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device
da12: <ATA SAMSUNG HM160JC AP10> Fixed Direct Access SCSI-5 device
Я помню, что все диски были одинакового размера. Глядя на диски сейчас, видно, что у трех из них изменился размер, они уменьшились на 2 МБ:
[user@host ~]$ dmesg | egrep '^da.*?: .*?MB '
da0: 10240MB (20971520 512 byte sectors: 255H 63S/T 1305C)
da1: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da2: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da3: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da4: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da5: 476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da6: 476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da7: 476938MB (976771055 512 byte sectors: 255H 63S/T 60801C) <--
da8: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
da9: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da10: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da11: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da12: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
Так что, судя по всему, это была не одна из инсталляций ОС, которая `` записала загрузчик на один из дисков '' (как я предполагал раньше), это была фактически новая материнская плата ( ASUS P8P67 LE) создание 2 МБ принимающая охраняемая территория в конце трех дисков, которые испортили мои метаданные ZFS.
Почему он не создал HPA на всех дисках? Я считаю, что это связано с тем, что создание HPA выполняется только на старых дисках с ошибкой, которая была исправлена позже обновлением BIOS жесткого диска Seagate: когда весь этот инцидент начался пару недель назад, я запустил Seagate's SeaTools чтобы проверить, есть ли что-нибудь физически не в порядке с дисками (все еще на старом оборудовании), и я получил сообщение о том, что некоторые из моих дисков нуждаются в обновлении BIOS. Поскольку сейчас я пытаюсь воспроизвести точные детали этого сообщения и ссылку на загрузку обновления микропрограммы, кажется, что, поскольку материнская плата создала HPA, обе версии SeaTools DOS не могут обнаружить рассматриваемые жесткие диски - быстрое invalid partition
или что-то подобное мигает при запуске, вот и все. Как ни странно, они все же находят набор дисков Samsung.
(Я пропустил болезненные, отнимающие много времени и, в конечном счете, бесполезные детали работы с оболочкой FreeDOS в несетевой системе.) В конце концов, я установил Windows 7 на отдельную машину, чтобы запустить SeaTools Windows версия 1.2.0.5. И последнее замечание о DOS SeaTools: не пытайтесь загрузить их в автономном режиме - вместо этого потратьте пару минут и сделайте загрузочную USB-флешку с потрясающим Окончательный загрузочный компакт-диск - который помимо DOS SeaTools также предоставляет вам множество других действительно полезных инструментов.
При запуске SeaTools для Windows вызывает этот диалог:
Ссылки ведут на Проверка серийного номера (который по какой-то причине защищен капчой - у меня была «Инвазивные пользователи») и статья базы знаний по поводу обновления прошивки. Вероятно, есть дополнительные ссылки, относящиеся к модели жесткого диска и некоторые загрузки, а также другие, но я пока не буду следовать по этому пути:
Я не буду спешить с обновлением прошивки сразу трех дисков, которые имеют обрезанные разделы и являются частью сломанного пула хранения. Это напрашивается на неприятности. Во-первых, обновление прошивки, скорее всего, нельзя будет отменить - и это может безвозвратно испортить мои шансы вернуть свои данные.
Поэтому первое, что я собираюсь сделать дальше, - это создать образ дисков и работать с копиями, так что есть оригинал, к которому можно вернуться, если что-то пойдет не так. Это может внести дополнительную сложность, поскольку ZFS, вероятно, заметит, что диски были заменены местами (с помощью серийного номера диска или еще одного UUID или чего-то еще), даже если dd-файлы с точностью до бита копируются на ту же модель жесткого диска. Более того, zpool даже не жив. Боже, это может быть сложно.
Другой вариант, однако, - работать с оригиналами и сохранять зеркальные диски в качестве резервных копий, но тогда я, вероятно, столкнусь с вышеуказанной сложностью, когда что-то пойдет не так с оригиналами. Неа, не хорошо.
Чтобы очистить три жестких диска, которые будут служить заменой образа для трех дисков с ошибочным BIOS в сломанном пуле, мне нужно создать некоторое пространство для хранения вещей, которые там сейчас есть, поэтому я углублюсь в аппаратный блок и соберите временный zpool из некоторых старых дисков, который я также могу использовать для проверки того, как ZFS справляется с заменой дисков dd'd.
Это может занять некоторое время ...
20111213-1930 + 1100
Это действительно заняло время. Я провел месяцы с несколькими открытыми компьютерными корпусами на моем столе с различным количеством свисающих жестких дисков, а также проспал несколько ночей с затычками для ушей, потому что я не мог выключить машину перед сном, так как на ней выполнялась длительная критическая операция . Однако, наконец, я победил! :-) Я тоже многому научился в процессе, и я хотел бы поделиться этими знаниями здесь для всех, кто попал в подобную ситуацию.
Эта статья уже намного длиннее, чем у кого-либо, у кого файловый сервер ZFS не работает, есть время, чтобы ее прочитать, поэтому я подробно расскажу здесь и дам ответ с основными выводами ниже.
Я покопался в коробке с устаревшим оборудованием, чтобы собрать достаточно места для хранения, чтобы переместить материал с отдельных дисков емкостью 500 ГБ, на которые были скопированы неисправные диски. Мне также пришлось вытащить несколько жестких дисков из их USB-футляров, чтобы я мог подключить их напрямую через SATA. Было еще несколько несвязанных проблем, и некоторые из старых дисков начали выходить из строя, когда я вернул их в действие, требуя замены zpool, но я пропущу это.
Наконечник: На каком-то этапе всего в этом было задействовано около 30 жестких дисков. При таком большом количестве оборудования их правильное расположение становится огромной помощью; Отсоединение кабелей или падение жесткого диска с вашего стола, безусловно, не помогут в процессе и могут нанести дальнейший ущерб целостности ваших данных.
Я потратил пару минут на создание самодельных креплений для жестких дисков из картона, которые действительно помогли упорядочить вещи: