RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Перенос FreeBSD с большего диска на меньший [2011]
0. Предисловия
В очередной раз отказал "сервер" на удаленном объекте(вечная проблема с питанием), удаленно ни чего сделать не получилось. Пришлось запирать его себе на стол.
На сервере установлен GMIRROR на два диска, но почему то при выходе из строя одно диска вся битая информация перенеслась на рабочий. После запуска fsck и неких манипуляций на рабочем диске удалось запустить систему на одном. Отправил экспедитора за покупкой винта того же объема. Получив диск попытался вернуть в строй gmirror, но не удалось так как диски оказались физически разного размера (см. ниже). В общем с этого момента встала задача перенести систему на новый (меньший) и поднять зеркало.
1. Данные
/dev/ad2: диск источник Maxtron 160Gb (реальных ~157Gb); /dev/ad3: диск приемник Segate 160Gb (реальных ~152Gb).
Подключаем диск приемник, загружаемся с диска источника.
Сохраним таблицу разделов диска источника
#bsdlabel /dev/ad2 > /usr/label.save
Так как диск приемник имеет меньший объем необходимо уменьшить объем диска источника. Самый простой способ размер последнего раздела, предварительно сохранив данные с него (если нужны скопируйте данные в другой раздел на котором достаточно метса).
В нашем случае последний раздел пустой, поэтому смело меньшаем его размер в файле label.save.
#ee label.save
Комментируем строку начинающеюся с «c : », поставив #, это системный раздел не предназначенный для переразбиения. Уменьшаем последний раздел на 10 Gb. (h: 183257400 13841232)
!!!!!! ВАЖНО !!!!! Так как в файле /usr/label.save размер указан из расчета сектор = 512Kb необходимо желаемый размер умножить на 2 и перевести в Кбайты
Для простоты на вторую цифру слева уменьшил на 2 (что примерно составит - 10Gb):
h: 16325740013841232
сохраняем. Теперь перенесем посекторно данные с диска источника на диск приемник.
#dd if=/dev/ad2 of=/dev/ad3 bs=2M
Время для переноса данных объемом 160Gb примерно 2 часа. Так как диск источник больше диска приемника в конце переноса выдаст предупреждение что диск приемник закончился. На данный момент получили полную копию диска источника, но с битым последним разделом. Восстановим разметку на диски приемнике согласно поправленного файла label.save
# bsdlabel –R /dev/ad3s1 /usr/label.save
Отформатируем последний раздел для ввода его в эксплуатацию
# newfs /dev/ad3s1h
(Если необходимо примонтируйте раздел в нужную папку и верните сохраненную ранее информацию) Проверим диск на ошибки
# fsck –y /dev/ad3s1
Выключаем сервер, отключаем диск источник. Загружаемся с диска приемника.
Система загрузиться до стоки «mountroot>» Необходимо вручную примонтировать корневой раздел:
# ufs:/dev/ad3s1a
Система подгрузит режим «singlemod» Перемонтируем корневой раздел с правом записи
# mount –u /
Подмонитруем раздел /usr для доступа к редакторам (можно посмотреть в fstab):