Мы — долго запрягаем, быстро ездим, и сильно тормозим.
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.
#ee label.save

Комментируем строку начинающеюся с «c : », поставив #, это системный раздел не предназначенный для переразбиения.
Уменьшаем последний раздел на 10 Gb.          (h:    183257400    13841232)

!!!!!!  ВАЖНО !!!!!
Так как в файле /usr/label.save размер указан из расчета сектор = 512Kb необходимо желаемый размер умножить на 2 и перевести в Кбайты


10Gb (1024Kb)= 20Gb (512Kb) = 24080 Mb = 24657920Kb

Для простоты на вторую цифру слева уменьшил на 2 (что примерно составит  - 10Gb):
h:	163257400	13841232

сохраняем.
Теперь перенесем посекторно данные с диска источника на диск приемник.
#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):
# mount /dev/ad3s1g /usr

Далее редактируем 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 еще раз чтобы убедиться что все в порядке и подправить ошибки, если есть.
#fsck –y /dev/ad3s1

Перегружаем  систему. И пользуемся системой на новом диске ;)

По поводу gmirror есть хорошая статья gmirror
так что описывать здесь не стоит.

За помощь спасибо статьям:
1.утилита dd
2.HDD->HDD (решение похоже на эту статью, но все же немного разное :) )



размещено: 2011-09-19,
последнее обновление: 2011-10-24,
автор: LLIypuk


tynix, 2011-09-23 в 20:19:26

Я бы сделал так:
1. Разбил новый диск, как требуется, но, чтобы разделы были не меньше, чем занимают данные на старом.
2. Подмонтировать и перенести с dump/restore (это получается значительно быстрее, чем dd).
3. Отредактировать fstab, чтобы загрузиться с нового.
4. Проверить работу на новом диске и сделать новое зеркало, размер которого будет размером меньшего диска.
Хотя, почему сделал БЫ? Я так и делал- 160-> 80. Освободил 160, насколько можно и вперёд.

fox, 2011-10-21 в 10:52:44

Плахой вариант для решения данной проблемы, автор легкомысленно относиться к общественной информации! И текст содержит 2 орфографические ошибки…

LLIypuk, 2011-10-21 в 13:50:39

tynix,
В следующий раз воспользуюсь вашим советом.
fox,
С русским у вас тоже не все в порядке.
В чем мое легкомыслие?

fox, 2011-10-21 в 16:44:07

Ну не лучший образец для решения подобной проблемы. Новички прочтут вашу статью и решат что это лучший вариант решения дров наломают, да и тут кто угодно может наломать DD для подобной проблемы не потходит...

LLIypuk, 2011-10-21 в 17:45:28

Я лишь поделился опытом и тем что у меня получилось...

А в начале подпишу что это "не лучший вариант". Сойдет?

fox, 2011-10-22 в 21:59:08

Дело хозяйское. Но всё же согласитесь если бы всё было более эстетичней Вам бы самим понравелось! Делайте работу так (имееься ввиду статьи, документацию), что бы это самому понравелось то есть найлучшим образом! А так как то не радует глаз...



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0365 секунд
Из них PHP: 20%; SQL: 80%; Число SQL-запросов: 77 шт.
Исходный размер: 25141; Сжатая: 6710