www.lissyara.su
—> статьи
—> FreeBSD
—> Мелочи
—> HDD_big->small
Перенос FreeBSD с большего диска на меньший
Автор: LLIypuk.
0. Предисловия
В очередной раз отказал "сервер" на удаленном объекте(вечная проблема с питанием), удаленно ни чего сделать не получилось. Пришлось запирать его себе на стол.
На сервере установлен GMIRROR на два диска, но почему то при выходе из строя одно диска вся битая информация перенеслась на рабочий. После запуска fsck и неких манипуляций на рабочем диске удалось запустить систему на одном.
Отправил экспедитора за покупкой винта того же объема. Получив диск попытался вернуть в строй gmirror, но не удалось так как диски оказались физически разного размера (см. ниже). В общем с этого момента встала задача перенести систему на новый (меньший) и поднять зеркало.
1. Данные
/dev/ad2: диск источник Maxtron 160Gb (реальных ~157Gb);
/dev/ad3: диск приемник Segate 160Gb (реальных ~152Gb).
Разбивка диска:
/dev/ad2s1a 4,8Gb /
/dev/ad2s1g 29Gb /usr
/dev/ad2s1d 19Gb /var/db
/dev/ad2s1h 85Gb /var/ftp
/dev/ad2s1f 4,8Gb /var
/dev/ad2s1e 4,8Gb /var/spool/mail
bsdlabel /dev/ad2s1
#/dev/ad2s1
size offset
a: 10485760 54525952
b: 2097152 41943040
c: 32169432 0
d: 41943040 0
e: 10485760 44040192
f: 10485760 65011712
g: 62914560 75497472
h: 183257400 13841232
|      
2. Решение
Подключаем диск приемник, загружаемся с диска источника.
Сохраним таблицу разделов диска источника
#bsdlabel /dev/ad2 > /usr/label.save
| Так как диск приемник имеет меньший объем необходимо уменьшить объем диска источника. Самый простой способ размер последнего раздела, предварительно сохранив данные с него (если нужны скопируйте данные в другой раздел на котором достаточно метса).
В нашем случае последний раздел пустой, поэтому смело меньшаем его размер в файле label.save.
Комментируем строку начинающеюся с «c : », поставив #, это системный раздел не предназначенный для переразбиения.
Уменьшаем последний раздел на 10 Gb.     (h:   183257400   13841232)
!!!!!! ВАЖНО !!!!!
Так как в файле /usr/label.save размер указан из расчета сектор = 512Kb необходимо желаемый размер умножить на 2 и перевести в Кбайты
10Gb (1024Kb)= 20Gb (512Kb) = 24080 Mb = 24657920Kb
Для простоты на вторую цифру слева уменьшил на 2 (что примерно составит - 10Gb):
сохраняем.
Теперь перенесем посекторно данные с диска источника на диск приемник.
#dd if=/dev/ad2 of=/dev/ad3 bs=2M
| Время для переноса данных объемом 160Gb примерно 2 часа.
Так как диск источник больше диска приемника в конце переноса выдаст предупреждение что диск приемник закончился.
На данный момент получили полную копию диска источника, но с битым последним разделом.
Восстановим разметку на диски приемнике согласно поправленного файла label.save
# bsdlabel –R /dev/ad3s1 /usr/label.save
| Отформатируем последний раздел для ввода его в эксплуатацию
(Если необходимо примонтируйте раздел в нужную папку и верните сохраненную ранее информацию)
Проверим диск на ошибки
Выключаем сервер, отключаем диск источник. Загружаемся с диска приемника.
Система загрузиться до стоки «mountroot>»
Необходимо вручную примонтировать корневой раздел:
Система подгрузит режим «singlemod»
Перемонтируем корневой раздел с правом записи
Подмонитруем раздел /usr для доступа к редакторам (можно посмотреть в fstab):
Далее редактируем fstab (меняем диск ad2 на ad3):
# ee /etc/fstab
/dev/ad3s1a 4,8Gb /
/dev/ad3s1g 29Gb /usr
/dev/ad3s1d 19Gb /var/db
/dev/ad3s1h 85Gb /var/ftp
/dev/ad3s1f 4,8Gb /var
/dev/ad3s1e 4,8Gb /var/spool/mail
| Сохраняем.
Запустим fsck еще раз чтобы убедиться что все в порядке и подправить ошибки, если есть.
Перегружаем систему. И пользуемся системой на новом диске ;)
По поводу gmirror есть хорошая статья gmirror
так что описывать здесь не стоит.
За помощь спасибо статьям:
1.утилита dd
2.HDD->HDD (решение похоже на эту статью, но все же немного разное :) )
размещено: 2011-09-19,
последнее обновление: 2011-10-24,
автор: LLIypuk
|
|
|
Комментарии пользователей [6 шт.]