Відновлення superblock`a - записки адміна

Іноді жорсткі диски сипляться. І часто - зовсім не в слушний час, та й бекап застарів ... А значить доводиться ворушитися.
Вообщем наступна ситуація:

Сервер "волохатого" року, Рейд ніякого, диск 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, 376 512, 752 864, 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

текст був від куди то скопійований, джерело не відомий.