Цель: в этой небольшой заметке, которая не исключает официальную документацию постараюсь описать кратко, но не в ущерб качеству, как мне удалось поставить FreeBSD 9.0 на MBR разметкой и ZFS в качестве ФС. Не так давно я купил новый девайс Lenovo ThinkPad Edge E120 и мне очень захотелось поставить туда FreeBSD. На данный момент модно ставить GPT , а сверху ZFS. Однако у меня появились не малые траблы с этим. В списке TODO на сайте проекта FreeBSD выяснил что EFI booting еще в планах и не реализован. Это собственно и стало причиной почему я не стал применять GPT. Изначальлно все что ниже описано было опровано на 9.0 amd64 RC3, но оно также проверялось и на 9.0 RELEASE.
Задача: становить FreeBSD 9.0 с корнем и основной ФС на базе ZFS.
Hardware:
- Процессор : 64-битный
- Жесткий диск : 298 ГБ
- Оперативка : 2ГБ
Терминология:
пул - под этим словом понимается пул устройств создаваемый командой "zfs create";
amd64zfs - используется в качестве имени ZFS пула;
ada0 - это имя устройства жесткого HITACHI SATA-диска, куда я ставлю систему;
ada0s1 - это имя устройства слайса в MBR на который размечаем BSD-разметку;
Fixit - Командная строка LiveCD. Нужно загрузиться с memstick или DVD образа. Выбрать на старте опцию "LiveCD"
Дополнительная литература:
- Root on ZFS FreeBSD9(Updated)
- Installing FreeBSD Root on ZFS using FreeBSD-ZFS portition in a FreeBSD MBR Slice
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/ad0s1 count=1
Note: Если появится сообщение "operation not permitted", то попробуй:
Fixit# sysctl kern.geom.debugflags=0x10
* Сетапим буткод Стадия №2
Fixit# dd if=/boot/zfsboot of=/dev/ad0s1a 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(т.е. жмем Ctrl+D)
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
На этом процесс установки завершен.
пн, 16/04/2012 - 02:58
зачем эта процедура? разве gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 не делает это?
вообще для себя я делал скрипт )) http://www.dtulyakov.org.ua/content/zfs-gpt
и по моему проще zfs без gpt юзать http://www.dtulyakov.org.ua/content/zfs-without-gpt
сб, 05/05/2012 - 00:48
>>зачем эта процедура? разве gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 не делает это?
Затем что Вы прочитали статью по диагонали!
Вы предлагаете установить GPT ZFS Boot , а статья про MBR !!! Ога?
>>вообще для себя я делал скрипт )) http://www.dtulyakov.org.ua/content/zfs-gpt
>>и по моему проще zfs без gpt юзать http://www.dtulyakov.org.ua/content/zfs-without-gpt
Второй раз говорю:
Статья про MBR , а не GPT !!!
Перечитать статью и высказать имхо по существу,а не поверхностные ошметки мыслев
Добавить комментарий