Давным-давно, когда ещё не было виртуальных машин и гипервизоров и о виртуализации никто еще даже не думал, некоторые пользователи уже хотели устанавливать и запускать разные операционные системы на своих машинах. Для этого были придуманы различные boot-менеджеры, которые позволяли при включении компьютера выбрать необходимую операционную систему. Таким образом пользователи могли попеременно работать в разных операционных системах. В наше время, когда виртуализация позволяет одновременно использовать несколько операционных систем на одной машине, иногда всё ещё возникает необходимость в использовании boot-менеджеров.
Рассмотрим ситуацию, когда ОС Ульяновск.BSD необходимо установить совместно с ОС Windows 10 на один накопитель с таблицей разделов в формате GPT на машине с EFI/UEFI загрузчиком. В качестве boot-менеджера будем использовать rEFInd.
Если ОС Windows 10 устанавливается на чистый накопитель, то можно заранее оставить часть свободного пространства для последующей установки ОС Ульяновск.BSD. Если же ОС Windows 10 уже установлена и разделы занимают всё пространство на накопителе, то необходимо освободить часть пространства для последующей установки ОС Ульяновск.BSD. Просматривать и управлять разделами на накопителе можно с использованием оснастки «Управление дисками». Запускать её нужно от имени Администратора:
Обычно таблица разделов на накопителе с установленной ОС Windows 10 выглядит так (подробнее об этом можно прочитать по ссылке):
Освободить некоторую часть пространства на накопителе можно сжатием основного раздела:
При этом сжимать нужно на столько, чтобы освободилось достаточно места для последующей установки ОС Ульяновск.BSD и при этом осталось достаточно места для дальнейшего использования ОС Windows 10. Перед сжатием можно провести дефрагментацию накопителя. После сжатия должно появиться свободное пространство, и таблица разделов должна выглядеть следующим образом:
Но есть ещё раздел восстановления, который в принципе не мешает, но по сути является бесполезным. Этот раздел можно смело удалять, если имеется диск восстановления, последняя резервная копия образа системы или установочный компакт-диск ОС Windows 10. Обычно с течением времени в основном системном разделе ОС Windows 10 сохраняется всё больше и больше личных файлов и приложений, однако раздел восстановления полезен только для возврата ОС в первоначальное состояние, что не так полезно, как резервное копирование. Обычно раздел восстановления рассматривается как ПОСЛЕДНИЙ выход при возникновении системных проблем, поскольку его использование уничтожит все данные и программы в основном системном разделе, что равносильно переустановке системы с установочного диска. Для удаления раздела восстановления необходимо воспользоваться утилитой diskpart, запущенной от имени Администратора, потому что через оснастку «Управление дисками» раздел восстановления удалить невозможно, так как он защищён от удаления:
В diskpart необходимо выполнить следующий набор команд (индексы накопителя и раздела могут отличаться в зависимости от количества накопителей в системе и таблицы разделов на накопителе):
list disk
select disk 0
list partition
select partition 4
gpt attributes=0x8000000000000000
delete partition override
exit
После успешного выделения свободного пространства можно загрузиться с установочного DVD или USB-накопителя ОС Ульяновск.BSD. В установщике необходимо выбрать пункт меню «Exit (Выход в командную строку)» и выполнить команду:
gpart show
Вывод команды показывает, что необходимый нам накопитель имеет имя ada0, индекс последнего раздела на нём 3 и свободное пространство начинается с блока 62834695 (в каждом конкретном случае эти цифры будут разные). Имея эти данные создаём разделы и файловую систему UFS2 для ОС Ульяновск.BSD (обратите внимание, в случае установки на HDD и SSD команды несколько отличаются):
gpart add -b 62834695 -t freebsd-boot -l boot -s 512k /dev/ada0
gpart resize -i 4 -a 4k -s 512k /dev/ada0
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 4 /dev/ada0
# == swap-раздел создаем только на HDD ==
gpart add -t freebsd-swap -a 4k -l swap -s 4096M /dev/ada0
# ---------------------------------------
gpart add -t freebsd-ufs -a 4k -l root /dev/ada0
newfs -U /dev/ada0p6
tunefs -j enable /dev/ada0p6
# == функцию TRIM включаем только на SSD ==
tunefs -t enable /dev/ada0p6
# -----------------------------------------
После создания файловой системы можно приступить к распаковке образа ОС Ульяновск.BSD. Архив образа находится на установочном накопителе в каталоге /dist/ulbsd/ (на момент составления этого документа это файл ulbsd-13.2-p2-amd64.img.7z). Необходимо распаковать образ, а затем вручную выполнить некоторые операции, которые автоматически выполняет установщик системы:
mount /dev/ada0p6 /mnt
cd /mnt
7zz x -so /dist/ulbsd/ulbsd-13.1-p0-amd64.img.7z | restore -vrf -
cp /mnt/etc/fstab /mnt/etc/fstab.bak
sed -i '' -e '/\/dev\/gpt\//Id' /mnt/etc/fstab
echo "/dev/gpt/root / ufs rw 1 1" >> /mnt/etc/fstab
# == если используется SSD, то переносим tmp в ОЗУ и создаем swap-файл 4ГБ ==
echo 'tmpfs /tmp tmpfs rw,size=1g,mode=1777 0 0' >> /mnt/etc/fstab
dd if=/dev/zero of=/mnt/var/swap0 bs=128k count=`expr -e 4096 \* 1024 / 128`
chmod 0600 /mnt/var/swap0
echo 'md100 none swap sw,file=/var/swap0,late 0 0' >> /mnt/etc/fstab
-----------------------------------------------------------------------------
# == если используется HDD, то указываем swap-раздел ==
echo '/dev/gpt/swap none swap sw 0 0' >> /mnt/etc/fstab
-------------------------------------------------------
rm -Rf /mnt/restoresymtable
rm -Rf /mnt/.snap
chroot /mnt sysrc hostname="ИМЯ_МАШИНЫ"
chroot /mnt sysrc ifconfig_DEFAULT="DHCP"
echo "admin:::::::/home/admin:/bin/csh:none" | chroot /mnt adduser -f -
echo "ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_admin" | chroot /mnt pw usermod admin -h 0
chroot /mnt pw usermod admin -G wheel,operator,video,webcamd
chroot /mnt pw usermod admin -c 'Администратор' -L 'russian'
cp -f /root/install_face_icon /mnt/home/admin/.face.icon
chroot /mnt chown admin /home/admin/.face.icon
echo "ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_root" | chroot /mnt pw usermod root -h 0
chroot /mnt /usr/local/bin/x11vnc -storepasswd ПАРОЛЬ_ДЛЯ_VNC /root/.vnc/passwd
echo "НОМЕР_ЛИЦЕНЗИИ_ВИДА_0123456789-0123456789abcdef0123456789abcdef" > /mnt/usr/local/share/ulbsd/license.key
chmod 644 /mnt/usr/local/share/ulbsd/license.key
cp -f /root/install_lic_ru /mnt/usr/local/share/ulbsd/license_ru.txt
cp -f /root/install_lic_en /mnt/usr/local/share/ulbsd/license_en.txt
cd / && sync && umount -f /mnt
Следует помнить, что если при создании разделов для ОС Ульяновск.BSD были использованы метки отличные от тех, которые указаны в этом документе (boot, swap, root), то перед отмонтированием раздела нужно внести соответствующие изменения в файл /mnt/etc/fstab. Если необходим по умолчанию не русскоязычный, а англоязычный интерфейс, то перед отмонтированием раздела необходимо выполнить следующие команды:
chroot /mnt sysrc sddm_lang="en_US"
chroot /mnt pw usermod admin -c 'Administrator' -L ''
В заключении необходимо установить boot-менеджер rEFInd. Для этого необходимо поместить в каталог /tmp дистрибутив rEFInd. На момент составления этого документа последнюю версию можно скачать по ссылке https://sourceforge.net/projects/refind/files/0.14.0.2/refind-bin-0.14.0.2.zip/download. Дистрибутив можно скачать на другой машине, поместить на любой USB-накопитель и переписать, подмонтировав этот USB-накопитель. Также дистрибутив можно скачать сразу по сети, настроив предварительно подключение. Допустим, что в системе присутствует Ethernet-адаптер em0 (имена адаптеров можно узнать, воспользовавшись утилитой ifconfig) и адреса раздаёт DHCP-сервер. Тогда для установки rEFInd достаточно выполнить следующие команды (boot-менеджер rEFInd будем помещать в EFI-раздел, созданный автоматически при установке ОС Windows 10):
dhclient em0
cd /tmp
fetch --no-verify-peer \
https://sourceforge.net/projects/refind/files/0.14.0.2/refind-bin-0.14.0.2.zip/download \
-o refind-bin-0.14.0.2.zip
unzip refind-bin-0.14.0.2.zip
mount_msdosfs /dev/gpt/EFI%20system%20partition /mnt
cd /mnt/EFI/Boot
mv bootx64.efi bootx64-windows.efi
cp /boot/loader.efi bootx64-ulbsd.efi
cp /tmp/refind-bin-0.14.0.2/refind/refind_x64.efi bootx64.efi
echo "bootx64.efi" >> startup.nsh
cp /tmp/refind-bin-0.14.0.2/refind/refind.conf-sample refind.conf
cat << EOF >> refind.conf
use_nvram false
hideui all
showtools reboot,exit
dont_scan_files + bootmgfw.efi
textonly true
textmode 0
menuentry "Ulyanovsk.BSD" {
loader \EFI\Boot\bootx64-ulbsd.efi
}
menuentry "Windows 10" {
loader \EFI\Boot\bootx64-windows.efi
}
EOF
cd / && sync && umount -f /mnt
Подробнее о параметрах конфигурационного файла refind.conf можно узнать в документации.
После перезагрузки на экране должно появится загрузочное меню boot-менеджера, в котором можно выбирать операционную систему:
Примечание 1:
Манипуляции с разделами на накопителе для освобождения пространства можно производить не только штатными средствами ОС, но и специальными утилитами других разработчиков. Такие утилиты позволяют решать сложные вопросы перераспределения пространства на накопителях, в том числе не только изменять размеры разделов, но и перемещать разделы в разные части накопителя.