Систематическая ошибка ZFS; опции для восстановления

Фон: маленький персональный сервер, электронная почта, сеть, оболочка, и т.д., для семейства и друзей. SunOS 5.11, snv_113 с ноября 2008. Сервер создается в 2009. Я полагаю, что это было или opensolaris или Солярисом ранний выпуск доступа. Процессор AMD 64 битов, поршень на 4 ГБ.

Корневая шпулька трехстороннее зеркало, первоначально состоявшее из трех вращающих дисков размера ноутбука 320 ГБ. После трех лет каждый из вращающих дисков вымер, один за другим; каждый замененный в соответствии с гарантией от производителя. За последние несколько месяцев другой диск пошел глупый снова. В настоящее время я решил просто выполнить два пути зеркало. На прошлой неделе систематическая ошибка неожиданно возникла с тремя перечисленными файлами. После куста те ошибки ушли за исключением одной ошибки метаданных. Поскольку второй диск начал давать сбой также, я добавил запасной настольный диск и повторно посеребрил к этому. Та же контрольная сумма и ошибка метаданных сохраняются. В отчаянии я купил несколько SSD (я приехал для реальной ненависти вращающих дисков). Я добавил тот к пулу как одна треть, и конечно во время пересеребра, я остаюсь со следующим:

root-klaatu /root% zpool status -v
  pool: rpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: resilver in progress for 1h47m, 84.53% done, 0h19m to go

конфигурация:

    NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     1
      mirror    ONLINE       0     0     6
        c1d0s0  ONLINE       0     0     6
        c1d1s0  ONLINE       0     0     6  55.0G resilvered
        c0d1s0  ONLINE       0     0     6  55.3G resilvered

ошибки:

Permanent errors have been detected in the following files:
    <metadata>:<0x172>

К тому времени, когда это заканчивается будет десять ошибок контрольной суммы на диск, о котором сообщают, и два на самом rpool. 'Шпулька, ясная', работает отлично для очистки ошибочного количества контрольной суммы, но файл метаданных с ошибками сохраняется, и каждое пересеребро/куст просто возвращает те же ошибки контрольной суммы. Обратите внимание, что я удалил все снимки, поскольку я считал, что иногда это - то, где данные с ошибками живут - но никакая радость.

У меня есть резервные копии - но они через CrashPlan, и в облаке - настолько восстанавливающий всю вещь занял бы дни по ограниченному соединению, которое я поддерживаю для сервера, что означает дни сервера, являющегося недоступным, который просто не надежен.

Таким образом - все, что сказало. Что является моей опцией для восстановления кроме восстановления от резервного копирования (так как метаданные 'файл' являются, очевидно, чем-то, что я не могу удалить).

Если я должен был создать новый пул zfs на новом диске - был бы, делая zfs отправить/получить 'ясный' ошибка? Или было бы лучше настроить новый пул, затем rsync старые данные пула к нему, затем переименовать новый пул назад к оригиналу, установить блоки начальной загрузки на зеркальных дисках, затем попытаться загрузиться от этого? Я считал, что существуют кэшируемые биты данных, связанных с фактическим именем пула, которое может вмешаться в фактическую начальную загрузку.

Я знаю, что 'логическая' вещь сделать состояла бы в том, чтобы просто создать новый, новый сервер на недавней ОС как OmniOS или OpenIndiana или этажерка - но со всем пользовательским скомпилированным кодом на этом сервере (который был первоначально Sparc 20 назад в начале 2000-х), я предполагаю, что rsyncing все не работало бы хорошо.

Спасибо за любую справку.

О - я должен добавить - сервер работает очень хорошо. Никакие катастрофические отказы, никакие тупики, ничто.

4
задан 4 August 2015 в 23:41
1 ответ

Я смог «оправиться» от этого инцидента с помощью zfs «отправки» и получения поврежденного пула в новый пул.

# создать новый однодисковый пул (или зеркало заранее, если хотите)
zpool create -f tpool c0d0s0

# сделать базовый снимок старого пула
zfs snapshot -r rpool @ now

# zfs отправляет его в новый пул
zfs send -vR rpool @ now | zfs receive -Fduv tpool

# обратите внимание, что это сбрасывает точку монтирования tpool на rpool - поэтому обязательно обновить
zfs set mountpoint = / tpool tpool

# перейти на одного пользователя; насколько это зависит от вашей системы
# edit:
/rpool/boot/grub/menu.lst

# (Обратите внимание, что этот файл должен поддерживаться bootadm; в данных обстоятельствах я решил просто пойти напрямую)

# сначала дублировать bootset, отредактируйте копию, измените findroot с
findroot (pool_rpool, 0, a)
# на
findroot (pool_tpool, 0, a)

# сделайте второй снимок теперь, когда в single user
zfs snapshot -r rpool @ now2

# отправить инкрементный снимок в новый пул
zfs send -vR -i rpool @ now rpool @ now2 | zfs получает -Fduv tpool

# mount tpool - еще раз помните, что точку монтирования необходимо обновить
zfs mount = / tpool tpool

# rm файл 'bootsign' и замените его новым:
rm / tpool / boot / grub / bootsign / pool_rpool
touch / tpool / boot / grub / bootsign / pool_tpool

# формализует, откуда загружаться из
zpool set bootfs = tpool / ROOT / snv_113 tpool

# добавьте загрузочные блоки
installgrub / boot / grub / stage1 / boot / grub / stage2 / dev / rdsk / c0d0s0

# poweroff, отсоедините диски rpool - или оставьте их для дальнейшего изучения
# если собираетесь зеркалировать, физически прикрепите второй диск
# загрузка
# превратить tpool в зеркало
zpool attach tpool c0d0s0 c1d0s0

# done

Обратите внимание, что если все в порядке, вы можете отредактировать меню grub, чтобы либо переместить новую загрузочную запись tpool, чтобы она была первой, либо изменить объявление 'default', указывающее на то, что оно есть в списке (или, если других загрузочных объявлений нет, просто удалите одно для rpool).

Также - хотя я упомянул, вероятно, более сотни различных сайтов и веб-страниц, пытаясь решить эту проблему, вышеупомянутый «рецепт» в значительной степени заимствован из Как сжать зеркальный пул ZFS, написанного Джо Мокером .

1
ответ дан 3 December 2019 в 04:09

Теги

Похожие вопросы