FreeBSD на флешке c FAT32 разделом и шифрованием UFS

By | 2016-08-12

Создаем загрузочную флешку с правильной и предсказуемой ОС, т.е. FreeBSD, на шифрованном разделе и, при этом, не теряем возможности использования носителя по назначению — переносить файлы между компами с разнообразными операционными системами, путем добавления FAT32-раздела.

Предположим, что da1 — это наша флешка.

gpart destroy -F da1                                        Удаляем разметку диска
gpart create -s GPT da1                                     Создаем GPT разметку
gpart add -t ms-basic-data -a 4k -s 5G -l volfat32 da1      Добавим раздел для FAT32
newfs_msdos -L FLASH8 -F 32 /dev/da1p1                      Отформатируем только что созданный раздел
gpart add -t freebsd-boot -a 4k -s 16k da1                  Добавляем загрузочный раздел размером 16 Кб
gpart add -t freebsd-ufs -a 4k -s 128M -l freebsd-boot da1  Раздел с загрузчиком и ядром, 128 Мб
gpart add -t freebsd-ufs -a 4k -l freebsd-root da1          Корневой раздел на все оставшееся место
gpart bootcode -b /boot/boot0 -p /boot/gptboot -i 2 da1     Установим загрузчик
newfs -L FREEBSDBOOT -o time -n /dev/da1p3                  Форматируем раздел ядра
geli init -b -s 4096 -e AES-XTS /dev/da1p4                  Инициализируем шифрование на разделе
geli attach /dev/da1p4                                      Подключим раздел к системе
newfs -L FREEBSD -o time -n /dev/da1p4.eli                  Форматируем шифрованный диск

-b — спросить пароль.
-s — размер блока. Больше блок — ниже стойкость, меньше — ниже производительность. Должен быть кратен размеру сектора диска.
-e — алгоритм шифрования, все можно посмотреть в man geli.

Чтобы BIOS, поддерживающий спецификацию EFI, мог загрузиться с диска, нужно чтобы первый раздел был отформатирован под FAT и на нем, в директории /efi/boot, лежал загрузчик.

mount_msdosfs /dev/da1p1 /mnt/                              Монтируем FAT32 раздел
mkdir -p /mnt/efi/boot                                      Создаем директории
cp /boot/boot1.efi /mnt/efi/boot/BOOTX64.EFI                Копируем EFI-загрузчик
umount /mnt                                                 Размонтируем раздел

Ставим систему. Файлы base.txz, lib32.txz и kernel.txz можно найти на установочном диске в каталоге /usr/freebsd-dist.

mount /dev/da1p4.eli /mnt/                                  Монтируем основной фряшный раздел
mkdir /mnt/nenc                                             Создадим директорию, в которую будем монтировать раздел с ядром
mount /dev/da1p3 /mnt/nenc                                  Монтируем раздел с ядром
tar -xpf base.txz -C /mnt/                                  Ставим файлы окружения системы
tar -xpf lib32.txz -C /mnt/                                 Ставим поддержку 32-х битного ПО
tar -xpf kernel.txz --exclude "*.symbols" -C /mnt/          Ставим ядро
chroot /mnt                                                 Выполняем черут в /mnt
passwd root                                                 Ставим пароль root
ln -s /nenc/boot /boot                                      Создаем симлинк на boot
exit                                                        Выходим из черута

Правим основные файлы конфигурации.

Прописываем в fstab файловые системы. Дабы не затирать временными файлами ячейки флеш-памяти, разместим /tmp, /var/run, /var/tmp в памяти.

echo "/dev/da0p4.eli / ufs rw,noatime 1 1" >> /mnt/etc/fstab     Основной раздел
echo "/dev/da0p3 /nenc ufs rw,noatime 1 1" >> /mnt/etc/fstab     Раздел с ядром
echo "md /tmp mfs rw,noatime,-s64m 0 0" >> /mnt/etc/fstab        /tmp в памяти
echo "md1 /var/tmp mfs rw,noatime,-s16m 2 0" >> /mnt/etc/fstab   /var/tmp в памяти
echo "md2 /var/run mfs rw,noatime,-s4m 2 0" >> /mnt/etc/fstab    /var/run в памяти

В rc.conf отключаем sendmail, фоновую проверку диска и включим автоматическое согласие на все, что скажет fsck при старте

echo 'hostname="FreeBSD-USB"' >> /mnt/etc/rc.conf
echo 'fsck_y_enable="YES"' >> /mnt/etc/rc.conf
echo 'background_fsck="NO"' >> /mnt/etc/rc.conf
echo 'sendmail_enable="NO"' >> /mnt/etc/rc.conf
echo 'sendmail_submit_enable="NO"' >> /mnt/etc/rc.conf
echo 'sendmail_outbound_enable="NO"' >> /mnt/etc/rc.conf
echo 'sendmail_msp_queue_enable="NO"' >> /mnt/etc/rc.conf

В loader.conf уменьшаем время ожидания, устанавливаем диск с корневой ФС, грузим модули шифрования разделов (geom_eli) и поддержки аппаратного шифрования (aesni).

echo 'autoboot_delay="3"' >> /mnt/boot/loader.conf
echo 'vfs.root.mountfrom="ufs:da0p4.eli"' >> /mnt/boot/loader.conf
echo 'geom_eli_load="YES"' >> /mnt/boot/loader.conf
echo 'aesni_load="YES"' >> /mnt/boot/loader.conf

При загрузке на некоторых компьютерах может не совсем корректно отображаться консоль, например так:
DSC_3725
чтобы этого не происходило, нужно добавить

echo 'gop set 0' >> /mnt/boot/loader.rc.local

Теперь можно загрузиться с флешки, как с UEFI-диска, поставить необходимый софт и пользоваться.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *