Записки Админа

Записки, Freebsd, cisco,Eltex

Восстановление superblock`a

В свое время когда посыпалась  OS/2 на одном из старых серверов, я этих данных не знал, хотя и сейчас сомневаюсь что это помогло, т.к. OS/2 работает на HPFS, в 2008 году я мало что знал про восстановление. Хотя многие данные я все таки смог «вытащить».

Иногда жесткие диски сыпятся. И часто — совсем не в подходящее время, да и бэкап устарел… А значит приходится шевелиться.
Вообщем следующая ситуация:

Сервер “мохнатого” года, рэйда никакого, диск SATA, старый, система FreeBSD 5.x.
После переезда сервер не поднялся, а при более пристальном разглядывании выяснилось что сильно посыпался жесткий диск. Посыпался до такой степени, что при чекании разделов уходил в kernel panic, а некоторые разделы вообще не чекал, ругался примерно так — file system is incorrect, bad superblock, run fsck manually …
Решение проблемы:
В наличии три диска
ad0 — старый диск, сыпется.
ad2 — новый диск, страховочная копия.
ad3 — новый диск, станет рабочим, вместо старого.

1. Подключаем на гарантированно работающем системнике старый диск ad0 , новый диск ad2 (лучше большего объема) и cdrom.
2. Грузимся с CD FreeBSD, переходим в режим live-cd.
3. Делаем страховочную копию (старый диск может рассыпаться в любой момент)
# dd if=/dev/ad0 of=/dev/ad2 bs=64k conv=noerror
4. Откладываем бэкап в сторону.
5. Перезагружаемся.
Поднимаем такую же систему на новом диске.
1. Подключаем диски ad0 и ad3.
1. Грузимся с CD FreeBSD, переходим в режим live-cd.
2. Разбиваем новый диск похожим образом (примерно так же, как на старом, главное чтобы разделы стали не меньше чем были). Не забываем установить загрузчик (Boot Manager) на новый диск.
3. Перезагружаемся, на всякий случай, и проверям что все изменения файловой системы точно сохранились на новом диске.
4. Самое интересное. Находимся в режиме live-cd. Теперь надо подключить разделы со старого диска. Для этого восстанавливаем superblock.
4.1. Ищем альтернативные суперблоки

# newfs -N /dev/ad0s1a

Не забываем ключ -N . Видим примерно следующее:
/dev/ad0s1a: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048
using 6 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
160, 376512, 752864, 1129216, 1505568, 1881920

Нас интересует строка “super-block backups (for fsck -b #) at:”
и супер-блоки, которые там указаны.
4.2. Исправляем супер-блок
# fsck_ufs -b 160 /dev/ad0s1a
4.3. Монтируем исправленный раздел в принудительном режиме, так как нам надо только чтение
# mount -f /dev/ad0s1a /mnt/old
5. Теперь сам перенос. Монтируем раздел с нового диска (ad3):
# mount /dev/ad3s1a /mnt/new
Копируем tar-ом содержимое раздела
# tar -C /mnt/old -cvf — . | tar -C /mnt/new -xpf
6. Убедились что перенос закончился, можно проверить по объему, например, командой df -h. Отмонтируем разделы /mnt/old и /mnt/new
7. Повторяем операции 4-6 (если нужно восстановление super-block) или 5-6 для всех разделов.
Вот собственно и все. Некоторые ньюансы:
Файловые системы должны быть одинаковы на старом и новом диске. То есть, если FreeBSD на старом диске была 5.х и выше — скорее всего у вас UFS2 и при создании разделов на новом диске можно использовать любой новый live-cd . Если же на старом диске 4.x — на новом тоже нужно будет создать разделы с UFS1.
В версии 4.х также не будет работать fsck_ufs -b, можно использовать dd:

# dd if=/dev/ad0s1a skip=32 of=/dev/ad0s1a seek=16 bs=512 count=16

На всякий случай, до прямого копирования , можно сохранить состояние секторов “как было”:
#dd if=/dev/ad0s1a skip=16 of=/old_16 bs=512 count=16

 

текст был от куда то скопирован, источник не известен.

Комментирование закрыто.