Персональный блог Александра Мокрова

О работе и отдыхе

Перенос FreeBSD на другой диск

tn-freebsd_vs_linux[1]
Если Вам необходимо перенести FreeBSD на другой жесткий диск, сделать копию, либо изменить размеры разделов, то эта инструкция Вам поможет ;)

Итак, для начала допустим, что рабочая система у нас – /dev/ad0 (мастер-устройство на первом канале IDE), а второй НЖМД – /dev/ad2. Посмотреть, под какими именами устройства расположились в вашей системе можно с помощью команды dmesg. Обязательно уточните имена устройств перед выполнением нижеуказанных команд, иначе Вы рискуете уничтожить информацию на рабочем диске!!!

Сначала уничтожим старую таблицу разделов на /dev/ad2 (первую дорожку, 63 сектора, перезапишем 0ми):
> sudo dd if=/dev/zero of=/dev/ad2 bs=512 count=63

Затем создаем новую таблицу разделов с единственным слайсом FreeBSD ad2s1 на весь диск и поместить загрузочный код в первый сектор диска:
> sudo fdisk -B -I -v /dev/ad2

Хотелось бы напомнить, что в терминологии FreeBSD слайсами называется то, что разделами называлось в DOS и Windows. Слайсы представлены в системе блочными устройствами вида /dev/ad2s1, /dev/ad2s2, и так далее. Типичная установка FreeBSD использует один слайс и создает внутри него BSD-style разделы с помощью утилиты bsdlabel (в более ранних версиях – disklabel). Разделы 1ого слайса, например, представлены блочными устройствами /dev/ad2s1a, /dev/ad2s1b, и т. д.

Стало быть, необходимо теперь разместить в слайсе разделы. Сначала создадим разделы по умолчанию:
> sudo bsdlabel -Bw /dev/ad2s1

Затем отредактируем:
> sudo bsdlabel -e /dev/ad2s1

При этом увидим что-то вроде:

# /dev/ad2s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a: 390720929       16    unused        0     0
  c: 390720945        0    unused        0     0         # "raw" part, don't edit

Видим, что мы имеем слайс размером с весь диск. Мы можем редактировать, добавляя новые лейблы. При этом offset можно не считать, а заменять * для размещения разделов сразу с начала свободного места. Диск c: редактировать не нужно, он указывает на весь слайс (так исторически сложилось). Изначально все размеры и смещения в секторах, однако можно использовать суффиксы M для указания в мегабайтах, и G – соотв-но, в гигабайтах.

Допустим мы хотим сделать такую разбивку:
/ 700Mb
swap 1Gb
/var 2Gb
/usr 25Gb
/data все оставшееся

Нужно привести к такому виду:

#        size   offset    fstype   [fsize bsize bps/cpg]
  a:    700M    *       4.2BSD  0       0       0
  b:    1G      *       swap
  c: 390720945  0       unused  0       0         # "raw" part, don't edit
  d:    2G      *       4.2BSD  0       0       0
  e:    25G     *       4.2BSD  0       0       0
  f:    *       *       4.2BSD  0       0       0

Теперь осталось создать необходимые файловые системы на этих разделах. Для этого существует команда newfs. Чтобы создать UFS2, нужно ей дать ключик -O 2, а чтобы разрешить механизм SoftUpdates (не рекомендуется на корневом разделе; можно позднее изменить через tunefs).
> sudo newfs -O 2 /dev/ad2s1a
> sudo newfs -O 2 -U /dev/ad2s1d
> sudo newfs -O 2 -U /dev/ad2s1e
> sudo newfs -O 2 -U /dev/ad2s1f

Все, новый диск готов! Осталось лишь перенести файлы с помощью dump и restore. Лучше всего это делать, перезагрузившись в single-user режим.

Для каждого раздела поочередно делаем dump и restore, в примере показан перенос с /dev/ad0s1a на /dev/ad2s1a:
# mount /dev/ad2s1a /mnt
# cd /mnt
# dump -L0af - /dev/ad0s1a | restore -rf -
# cd /
# umount /mnt

Процесс достаточно длительный – зависит от кол-ва заполненного пространства на разделе и скорости ваших дисков, так что наберитесь терпения!

Нет комментариев

Нет комментариев, вы будете первым :)

Оставить комментарий