Установка FreeBSD на USB-носитель


Однажды мне в офис привезли сервер, у которого, по словам владельцев "что-то"
отвалилось. Сервер был явно интеловским и таким потертым, как будто на нем с горки
катались - поэтому модель на глаз определить не удалось. Зато со слов пострадавших
на нем стояла FreeBSD amd64 и абсолютна не грузилась. CD-привод также отсутствовал,
а своего привода у меня до сих пор нет. Поэтому решено было грузиться с флешки и
быстро - время уже подгоняло, и очень хотелось свалить домой пораньше (тяпница -
короткий день!) До этого момента я как-то не грузил FreeBSD с флешки - поэтому сначала
пришлось погуглить. Найти что-либо полезное удалось не сразу, но всё-таки я наткнулся
на статью, которую даже запомнил с первого прочтения. Да, в общем, нет ничего сложного
в этом - сделать загрузочную флешку - особенно, если FreeBSD уже где-то стоит. А у меня
она стояла на серваке - такая же, amd64. Итак.

Перед началом лучше отыскать установочный диск FreeBSD или iso-образ.
Оно понадобится. Монтируем iso:

# mdconfig -a -f 7.0-RELEASE-amd64-disk1.iso
# mount -t cd9660 /dev/md0  /cdrom

Для тех, у кого нашелся установочный диск всё проще:

# mount /cdrom

Дальше разбиваем флешку. Если это единственная флешка, которая сейчас в компьютере,
то она скорее всего определилась как /dev/da0 - но этот факт обязательно нужно
проверить. А еще лучше - отключить другие флешки на всякий пожарный. Добавлю еще -
флешка должна быть пустая. Для начала так проще.

# fdisk -BI /dev/da0
# bsdlabel -B -w da0s1

Значения используемых ключей для fdisk такие:

* -B = инициализировать boot-сектор
* -I = делать один слайс на всю флешку

А ключи bsdlabel означают:

* -B = взять загрузчик /boot/boot и поместить его на слайс
* -w = произвести запись стандартной метки

Далее создаем файловую систему с меткой FreeBSD:

# newfs -U -L FreeBSD /dev/da0s1a
# mount /dev/da0s1a /mnt

Теперь осталось только установить файлы с диска на флешку. Сначала базовые файлы:

# cd /cdrom/7.0-RELEASE/base
# export DESTDIR /mnt
# ./install.sh

Потом файлы ядра:

# cd /cdrom/7.0-RELEASE/kernels
# export DESTDIR /mnt
# ./install.sh GENERIC
# rmdir /mnt/boot/kernel
# mv /mnt/boot/GENERIC /mnt/boot/kernel

Теперь осталось совсем немного. Ставим стандартный загрузчик:

# boot0cfg -v -B -o noupdate da0

Ключи означают:

* -v = показывать подробности на экране
* -B = установить стандартный загрузчик 'boot0'
* -o = опции. в данном случае - не трогать mbr, мы сделали это раньше

Финальная часть балета - поправка файлов fstab (чтоб знать, откуда грузиться)
и loader.conf (чтоб знать, что грузить)

# echo 'geom_label_load="YES"' >> /mnt/boot/loader.conf
# echo '/dev/ufs/FreeBSD  /  ufs  rw,noatime  1 1' >> /mnt/etc/fstab

Еще небольшое действие желательно выполнить для тех, кто монтировал iso, а именно:

# mdconfig -d md0

На этом всё. Далее рекомендую загрузиться с флешки и, если позволяет объем поставить,
на нее необходимые душеспасительные программы. Это делается как обычно. В моем случае
этого делать не пришлось - оказалось, народные умельцы снесли fstab, видимо использовав
знак '>' вместо '>>' при операциях, похожих на те, которые я делал в последнем пункте.