вторник, 20 декабря 2011 г.

Установка FreeBSD на MBR+ZFS

В виду того что купил новый девайс Lenovo ThinkPad Edge E120 мне очень захотелось поставить туда FreeBSD. На данный момент модно ставить GPT , а сверху ZFS. Однако у меня появились не малые траблы с этим. По видимому EFI там весьма кривой. Вот собственно тема про трудности и что собственно я предпринял.

В этой заметке описываю как ставить на базе MBR + GPT + 9.0 amd64 RC3

Задача:
Установить FreeBSD 9.0 amd64 RC3 с корнем и основной ФС на базе ZFS.

В наличии:
Процессор    : 64-битный
Жесткий диск : 298 ГБ
Оперативка   : 2ГБ

Терминология:
пул - под этим словом понимается пул устройств создаваемый командой "zfs create"
amd64zfs - используется в качестве имени ZFS пула
ada0 - это имя устройства жесткого HITACHI SATA-диска, куда я ставлю систему
ada0s1 - это имя устройства слайса в MBR на который размечаем BSD-разметку
Fixit - Командная строка LiveCD. Нужно загрузиться с memstick или DVD образа. Выбрать на старте опцию "LiveCD"

Опираемся на статьи:
1. Размечаем диск в MBR и создаем слайс:
  Fixit# gpart create -s MBR ada0
  Fixit# gpart add -t freebsd ada0
2. Размечаем слайс в BSD и создаем партиции:
  Fixit# gpart create -s BSD ada0s1
  Fixit# gpart add -s 294G -t freebsd-zfs ada0s1
  Fixit# gpart add -t freebsd-swap ada0s1
Note: swap должен быть после zfs-партиции

3. Задаем активный слайс:
  Fixit# gpart set -a active -i 1 ada0
4. Увеличиваем /tmp до 512МБ:
  Fixit# umount /dev/md1
  Fixit# mdmfs -s 512M md1 /tmp
5. Создаем zfs пул:
  Fixit# zpool create amd64zfs /dev/ada0s1a
  Fixit# zpool set bootfs=amd64zfs amd64zfs
  Fixit# zfs set checksum=fletcher4 amd64zfs 
6. Пишем загрузчик:
  Fixit# gpart bootcode -b /boot/mbr ada0
7. Временно монтируем пул:
Fixit# zfs set mountpoint=/mnt amd64zfs 
8. Устанавливаем ZFS-загрузчик

 * Экспортируем пул перед установкой буткода
  Fixit: zpool export amd64zfs
  * Сетапим будтод стадии №1
  Fixit# dd if=/boot/zfsboot of=/dev/ada0s1 count=1 
Note: Если появится сообщение "operation not permitted", то попробуй:
    Fixit# sysctl kern.geom.debugflags=0x10
  * Сетапим буткод Стадия №2
  Fixit# dd if=/boot/zfsboot of=/dev/ada0s1a skip=1 seek=1024
Note: Важно понимать что этот буткод устанавливается в подходящую дыру на диске в ФС согласно формату ZFS это как раз после ZFS мета-данных, т.е. seek=1024

  * Импортируем пул для продолжения установки
  Fixit: zpool import -o cachefile=/tmp/zpool.cache amd64zfs
9. Создаем файловые схемы:
  Fixit# zfs create amd64zfs/data
  Fixit# zfs create amd64zfs/usr
  Fixit# zfs create amd64zfs/usr/home
  Fixit# zfs create -o quota=4G amd64zfs/tmp
  Fixit# zfs create -o quota=4G amd64zfs/var
  Fixit# zfs create -o quota=4G amd64zfs/var/tmp
  Fixit# zfs create -o setuid=off amd64zfs/var/db
  Fixit# zfs create -o setuid=off amd64zfs/usr/obj
  Fixit# zfs create -o exec=off -o setuid=off amd64zfs/var/empty
  Fixit# zfs create -o compression=lzjb -o exec=on -o setuid=off amd64zfs/usr/src
  Fixit# zfs create -o compression=off -o exec=on -o setuid=off amd64zfs/usr/ports
  Fixit# zfs create -o compression=lzjb -o exec=off -o setuid=off amd64zfs/var/crash
  Fixit# zfs create -o compression=off -o exec=off -o setuid=off amd64zfs/usr/ports/distfiles
  Fixit# zfs create -o compression=off -o exec=off -o setuid=off amd64zfs/usr/ports/packages
10. Задаем привычные права:
  Fixit# chmod 1777 /mnt/tmp
  Fixit# chmod 1777 /mnt/var/tmp
  Fixit# cd /mnt ; ln -s usr/home home
11. Создадим под-шел:
  Fixit# sh
Note: По умолчанию используется tsch.

12. Установка системы:
  Fixit# cd /usr/freebsd-dist
  Fixit# export DESTDIR=/mnt
  Fixit# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
  Fixit# do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
13. Задание настроек загрузчика:
  Fixit# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
  Fixit# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
  Fixit# echo 'vfs.root.mountfrom="zfs:amd64zfs"' >> /mnt/boot/loader.conf
  Fixit# cat << EOF > /mnt/etc/fstab
Пишем следующее:

# Device Mountpoint FStype Options Dump Pass#
/dev/ada0s1b none swap sw 0 0
EOF
Note: Посмотри и убедись в назначении ada0s1b это точно своп?

14. Копирование кэша пула:
  Fixit# cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache
15. Размонтировать все системы:
  Fixit# zfs set readonly=on amd64zfs/var/empty
  Fixit# umount -f /mnt
  Fixit# zfs umount -a
16. Изменяем точки монтирования для пула?
  Fixit# zfs set mountpoint=legacy amd64zfs
  Fixit# zfs set mountpoint=/tmp amd64zfs/tmp
  Fixit# zfs set mountpoint=/usr amd64zfs/usr
  Fixit# zfs set mountpoint=/var amd64zfs/var

P.S.:
Donate - Поддержать блог 

Комментариев нет: