LINUX.ORG.RU

Установка FreeBSD на раздел реального диска из-под другой ОС

 , ,


3

2

Небольшой HOWTO, как быстро установить FreeBSD из-под GNU/Linux без лишних действий. Записал по ходу установки, возможно, кому-нибудь пригодится.

Входные данные в моём случае:

  • Есть неиспользуемый раздел на диске, разбитом через MBR. (Большая часть места на накопителях занята LVM-ом с кучей томов.)
  • Весь раздел целиком буду монтировать в корень, не используя разбивку bsdlabel. Система ставится больше для экспериментов, чем для реальной работы, так что нет смысла заморачиваться с точной разметкой.
  • По той же причине в качестве файловой системы использую UFS, а не ZFS.
  • Хочется весь процесс провести из-под основной ОС, не тратя время на создание загрузочной флешки.
  • В роли первичного загрузчика буду использовать grub, поэтому BSD-специфичный boot loader нас не интересует.

На одном из дисков я заранее зарезервировал четыре 20-гигабайтных раздела под эксперименты с разными ОС. На один из таких разделов установлю FreeBSD:

[root@aquila ~]# fdisk -l /dev/sda
Диск /dev/sda: 698,7 GiB, 750156374016 байт, 1465149168 секторов
Disk model: Hitachi HTS54757
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: dos
Идентификатор диска: 0xa33b6c03

Устр-во    Загрузочный    начало      Конец    Секторы Размер Идентификатор Тип
/dev/sda1  *                2048    6146047    6144000     3G            83 Linux
/dev/sda2                6146048  105357311   99211264  47,3G             7 HPFS/NTFS/exFAT
/dev/sda3              105357312 1465147391 1359790080 648,4G             5 Расширенный
/dev/sda5              105359360  146319359   40960000  19,5G            83 Linux
/dev/sda6              146321408  187281407   40960000  19,5G            83 Linux
/dev/sda7              187283456  228243455   40960000  19,5G            83 Linux
/dev/sda8              228245504  269205503   40960000  19,5G            83 Linux
/dev/sda9              269207552 1465147391 1195939840 570,3G            8e Linux LVM

Скачиваем установочный образ:

$ axel -a 'https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz'
$ xz -d FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz

Установку будем проводить из-под qemu, работающему от имени пользователя. Чтобы сможно было подключить физический диск к qemu, нужно сменить владельца /dev/sda:

# ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 апр 15 14:20 /dev/sda
# chown vadim:disk /dev/sda
# ls -l /dev/sda
brw-rw---- 1 vadim disk 8, 0 апр 15 16:12 /dev/sda
Я знаю, что идеологически правильно было бы добавить пользователя в группу disk, но мне как-то пофиг. После перезагрузки система забудет, что права на /dev/sda были отданы пользователю, а из группы пользователя надо удалять вручную.

Запускаем виртуальную машину с установочным образом и нужным физическим диском:

$ qemu-system-x86_64 -m 2048 -hda /dev/sda -cdrom FreeBSD-12.0-RELEASE-amd64-disc1.iso -boot menu=on

Выбираем CDROM в качестве загрузочного устройства. Ждем появления Welcome Menu, выбираем <Shell>. Инсталлятор нам не понадобится.

Посмотрим, какие разделы увидела система:

# ls /dev/ad*

И более подробно:

# gpart list | less

Виртуальная машина имеет прямой доступ к реальному /dev/sda, так что нужно внимательно перепроверять все свои действия по поводу разделов диска.

Выяснили, как в гостевой ОС называется нужный раздел, создаем на нём файловую систему:

# newfs -U -L anjalifbsd /dev/ada0s5

  • Опция -U указывает задействовать механизм Soft Updates.
  • Опция -L задаёт имя тома ФС.

Монтируем созданную ФС:

# mkdir /tmp/new_root
# mount /dev/ada0s5 /tmp/new_root

Теперь нужно распаковать операционную систему на новый раздел:

# cd /tmp/new_root
# tar xvf /usr/freebsd-dist/base.txz
# tar xvf /usr/freebsd-dist/kernel.txz

Система занимает меньше гигабайта:

# df -h .
Filesystem      Size     Used    Avail  Capacity  Mounted on
/dev/ada0s5      19G     930M      16G      5%    /tmp/new_root

Правим fstab. Честно говоря, я не знаю деталей о процессе инициализации FreeBSD и не уверен, что это обязательно:

echo '/dev/ada0s5 / ufs rw 1 1' > etc/fstab
echo 'tmpfs /tmp tmpfs rw 0 0' >> etc/fstab

Выключаем виртуальную машину:

# poweroff

На реальной машине правим конфиг grub.

У меня grub установлен на отдельном разделе таким образом, что установка любого нового слишком умного дистрибутива, перезаписывающего конфиг grub-а, не повлияет на этот загрузчик. В загрузочном меню этого отдельного grub-а указано, как грузить установленные ОС, внутри которых может работать уже собственный загрузчик дающий выбрать версию ядра и т.п. Например:

menuentry "Artix Sonata" {
	configfile (lvm/aq-aq_artix)/boot/grub/grub.cfg
}

menuentry "Archlinux Aquila" {
	configfile (lvm/aq-aq_archlinux)/boot/grub/grub.cfg
}

menuentry "Voidlinux Epsilon" {
	multiboot (lvm/aq-aq_voidlinux)/boot/grub/i386-pc/core.img
}

Загрузчик FreeBSD я не задействовал, так что в моём случае достаточно добавить menuentry для прямой загрузки ядра FreeBSD:

menuentry "FreeBSD Anjali" {
	insmod part_msdos
	insmod ufs2
	set root=(hd0,5)
	kfreebsd /boot/kernel/kernel
	kfreebsd_loadenv /boot/device.hints
	set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s5
	set kFreeBSD.vfs.root.mountfrom.options=rw
	boot
}

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

Первые шаги в системе:

  • Имя хоста задаётся через hostname(1).
  • Управление пользователями и группами осуществляется при помощи pw(8).
  • Про настройку локали см. login.conf(5). В конфиге уже прописан вариант для русской локали, так что достаточно указать login class пользователя равным russian.
  • wpa_supplicant настраивается стандартно через конфиг, плюс надо указать пару строчек в rc.conf.
  • Пакеты ставятся при помощи pkg(8).

Про GRUB2 благодарю, схоронил.

В остальном это ничем не отличается от стандартного развёртывания джейла.

mord0d ()

Виртуальная машина имеет прямой доступ к реальному /dev/sda, так что нужно внимательно перепроверять все свои действия по поводу разделов диска.

Вот это, конечно, очень важный момент. А если виртуалка решит примонтировать раздел уже используемый на хосте ? Или решит немного «пошатать» ваш хостовый LVM ?

В общем, давать доступ виртуалке к целому хостовому диску с хостовой системой и данными - это из разряда «вредных советов», ИМХО. Т.к потенциальный ущерб перекрывает все возомжные неудобства от «нормальной» установки вроде развёртывания фряхи в виртуалку на виртуальный диск и последующего переноса на раздел хоста.

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от DawnCaster

А если виртуалка решит примонтировать раздел уже используемый на хосте ? Или решит немного «пошатать» ваш хостовый LVM ?

Не стоит так делать.

В общем, давать доступ виртуалке к целому хостовому диску с хостовой системой и данными - это из разряда «вредных советов», ИМХО. Т.к потенциальный ущерб перекрывает все возомжные неудобства от «нормальной» установки

/поговорка про дурака и стеклянный предмет.

и последующего переноса на раздел хоста.

dd?

devzero ()
Последнее исправление: devzero (всего исправлений: 1)
Ответ на: комментарий от devzero

dd?

Как вариант. И qemu-nbd для монтирования образа диска, если перенос делается на хосте.

поговорка про дурака и стеклянный предмет

Никто не застрахован от ошибок. Нажать не ту клавишу, выполнить не ту команду, и.т.д - куда проще чем кажется. Достаточно быть сонным, пьяным или просто больным с температурой.

И лучше от таких рисков страховаться, чем потом рвать на себе волосы. Цена ошибки в случае монтирования всего диска - слишком высока, что-бы экономить немного времени на установке фряхи таким вот образом (на правах ИМХО, конечно)

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 2)
Ответ на: комментарий от DawnCaster

Цена ошибки такая же как и у dd не на тот раздел, не вижу разницы. Да и простым rm -rf ~/blabla/ можно натворить бед, если рука дрогнет и случайно поставит лишний пробел.

Насчёт предыдущего вашего предположения, нормальные операционные системы не монтируют просто так все подряд файловый системы в rw и не двигают ничего в LVM без команды пользователя.

Правда, тут действительно есть один подводный камень. Если случайно загрузиться в виртуальной машине с физического диска в основную ОС, ФС там скорее всего развалится. Предполагаю, что как минимум развалится /var, и повезёт, если он у пользователя вынесен отдельно от /home. Вот здесь нужно быть очень осторожным.

В моём случае такой опасности те было, т.к. системный том был на диске, не доступном виртуальной машине. grub просто выдал бы сообщение об ошибке. Но в общем случае это серьзная опасность.

devzero ()
Последнее исправление: devzero (всего исправлений: 1)
Ответ на: комментарий от DawnCaster

пациент: доктор, мне так больно...
доктор: а вы так не делайте!

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

crypt ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)