LinuxForum.Fans
Тема

Gentoo на ZFS

Автор: animal 31 сообщений 15129 просмотров
#317955

Установил gentoo на zfs раздел, делюсь своей историей успеха - может кому-то будет интересно.
По следам этой темы и статьи в вики.


1. Создаём разделы. Их нужно как минимум два - загрузочный, и основной - с zfs.
При создании раздела с zfs нужно указать тип раздела (Hex Code) - BF00.

2. Создаём пул

text

zpool create -f -o ashift=12 -o cachefile= -O compression=on -m none -R /mnt/gentoo rpool /dev_name 
Показать

ashift - задаёт размер блока файловой системы в виде степеней двойки, в данном случае 4 килобайта
compression=on - включает сжатие
rpool - название пула
/dev_name - название устройства

Тут я сразу отключил дедупликацию, обновление временных меток и xattr.

text

zfs set dedup=off rpool
zfs set atime=off rpool
zfs set xattr=off rpool

И переключил алгоритм сжатия

text

zfs set compress=lzjb rpool

3. Создаём файловые системы

text

zfs create -o mountpoint=none rpool/ROOT
zfs create -o mountpoint=/ rpool/ROOT/gentoo

zfs create -o mountpoint=/home rpool/HOME zfs create -o mountpoint=/root rpool/HOME/root

zfs create -o mountpoint=none rpool/GENTOO zfs create -o mountpoint=/usr/src rpool/GENTOO/src zfs create -o mountpoint=/var rpool/GENTOO/var

zfs create -o mountpoint=/usr/portage -o compression=off rpool/GENTOO/portage zfs create -o mountpoint=/usr/portage/distfiles -o compression=off rpool/GENTOO/distfiles

Копируем файл zpool.cache в новое окружение

text

mkdir -p /mnt/gentoo/etc/zfs
cp /etc/zfs/zpool.cache /mnt/gentoo/etc/zfs

Создаём пустой файл mtab

text

touch /mnt/gentoo/etc/mtab

4. Делаем chroot и дальше до сборки ядра ставим по рукакниге.
5. Сборка ядра.
Можно конечно наложить патч zfs вручную, но я думаю легче взять ебилд с автоматическим наложением нужного патча.
Добавляем оверлей init6

text
layman -a init6
layman -s init6

Отключаем запрет использования флага kernel-builtin для zfs и собираем geek-sources

text

echo 'sys-fs/zfs -kernel-builtin' >> /etc/portage/profile/package.use.mask 
echo 'sys-fs/zfs kernel-builtin' >> /etc/portage/package.use 
echo 'sys-kernel/geek-sources zfs' >> /etc/portage/package.use 
USE="zfs" emerge sys-kernel/geek-sources

Теперь собираем само ядро. Включаем SPL и ZFS (не модулями), и поддержку initrd.
Собираем ядро, после чего ставим genkernel и собираем им initramfs

text

emerge -av genkernel
genkernel --zfs initramfs

6. Ставим загрузчик, указываем ему ядро и inirtd, а в качестве опций - это:

text
real_root=ZFS=rpool/ROOT/gentoo dozfs=force

Добавляем zfs на уровень инициализации boot

text
rc-update add zfs boot

7. Выходим из chroot'a, отмонтируем файловые системы, экспортируем пул и перезагружаемся

text

exit
cd /mnt/gentoo
umount proc dev sys boot
text

cd /
zpool export -f rpool
text
reboot
#317992

Сколько рамы жрёт? :D

#318057
text

free -m
             total       used       free     shared    buffers     cached
Mem:          7983       7619        364          0         28        831
-/+ buffers/cache:       6760       1223
Swap:            0          0          0
#318058
"animal⇓" написал:
USE="zfs" emerge sys-kernel/geek-sources

С какими флагами собрано ядро geek-sources?
Надо бы накидать хотябы опции конфига для сборки, общался с init6 - ему лень, говорит и так все понятно...
У меня сейчас так:

text
# emerge -pv geek-sources

These are the packages that would be merged, in order:

Calculating dependencies... done! [ebuild R ] sys-kernel/geek-sources-3.8.10:3.8.10::init6 USE="aufs bfq branding ck debian fedora ice mageia reiser4 suse uksm zfs -build -deblob -genpatches -grsecurity -lqx -pax -pf -rt -symlink -zen" 0 kB

UKSM+BFS+BFQ+AUFS+ZFS+SPL включено, если кратко... а там не только это.

#318065

У меня так:

text
[ebuild   R    ] sys-kernel/geek-sources-3.8.10:3.8.10::init6  USE="aufs bfq genpatches symlink uksm zfs -branding -build -ck -debian -deblob -fedora -grsecurity -ice -lqx -mageia -pax -pf -reiser4 -rt -suse -zen" 0 kB

Чем меньше патчей - тем лучше.

#318169
text

equery u geek-sources
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for sys-kernel/geek-sources-3.8.10:
 U I
 + + aufs       : AnotherUnionFS.
 - - bfq        : Budget Fair Queueing Budget I/O Scheduler.
 + + branding   : Enable Gentoo specific branding.
 - - build      : Build kernel.
 - - ck         : Enable Con Kolivas' high performance patchset.
 + + debian     : Use Debian kernel patches.
 - - deblob     : Remove binary blobs from kernel sources to provide libre license compliance.
 + + fedora     : Use Fedora kernel patches.
 + + genpatches : Use Gentoo kernel patches.
 - - grsecurity : Use grsecurity patches.
 - - ice        : Use TuxOnIce patches.
 - - lqx        : Use liquorix patches.
 + + mageia     : Use Mandriva/Mageia patches.
 - - pax        : Use PAX patches.
 - - pf         : Use pf-kernel patches.
 - - reiser4    : Use Reiser4 FS patches.
 - - rt         : Use Ingo Molnar's realtime preempt patches.
 + + suse       : Use OpenSuSE patches.
 - - symlink    : Force kernel ebuilds to automatically update the /usr/src/linux symlink
 + + uksm       : Use Ultra Kernel Samepage Merging patches.
 + + zen        : Use zen-kernel patches.
 + + zfs        : The native Linux kernel port of the ZFS filesystem.
#318185

animal, вот еще, планировщик - cfq или deadline поставил?

#318191
zenon написал:
animal, вот еще, планировщик - cfq или deadline поставил?

deadline на десктопе?!

#318956

Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

text
libra ~ # zfs create -V 4G -b 4K zero/swap
/dev/zero/swap may not be immediately available

И всё. Сам том zero/swap создался и виден через zfs list, но вот создать на нём swapfs не получается:

text
libra ~ # mkswap -f /dev/zero/swap
/dev/zero/swap: Not a directory

Что сделать, чтобы он стал available?

#318960
"fragment⇓" написал:
Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

/dev/zero - это стандартное устройство, возвращающее нули при чтении и являющееся чёрной дырой при записи...

выбери другое имя.

#318965
Fat-Zer написал:
[quote="fragment⇓"]Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

/dev/zero - это стандартное устройство, возвращающее нули при чтении и являющееся чёрной дырой при записи...

выбери другое имя.[/quote]

Балин, точно ведь, засада. Только как я выберу пулу другое имя, если на этом пуле у меня система?

#318974
"fragment⇓" написал:
Только как я выберу пулу другое имя, если на этом пуле у меня система?

У тебя пул с названием zero? Ну назови zero/zswap...

#318982
zenon написал:
[quote="fragment⇓"]Только как я выберу пулу другое имя, если на этом пуле у меня система?

У тебя пул с названием zero? Ну назови zero/zswap...[/quote]

Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.

Только я вот не пойму, как тогда мой системный пул работает?

#318984
"fragment⇓" написал:
Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.Только я вот не пойму, как тогда мой системный пул работает?

если на нём ничего кроме корня, то он монтируется ядром самостоятельно...
а нельзя ли изменить путь к устройствам? на /dev/zfs/$POOL_NAME/ например? может их удав создаёт?

#319034
Fat-Zer написал:
[quote="fragment⇓"]Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.Только я вот не пойму, как тогда мой системный пул работает?

если на нём ничего кроме корня, то он монтируется ядром самостоятельно...
а нельзя ли изменить путь к устройствам? на /dev/zfs/$POOL_NAME/ например? может их удав создаёт?[/quote]

Как-то геморно и костыльно.

В общем, новый вопрос: как лучше всего переименовать пул?

#319182

Не нашёл у себя ничего похожего на /dev/$POOL_NAME

Может, удев не знает что нужно создавать /dev/$POOL_NAME?

#319210
"animal⇓" написал:
zfs create -o mountpoint=/usr/portage -o compression=off rpool/GENTOO/portage
zfs create -o mountpoint=/usr/portage/distfiles -o compression=off rpool/GENTOO/distfiles

Собственно почему компрессию на portage выключил?

#319240

Без компрессии должно быть быстрее, как мне кажется. И вообще, так в вики написано :)

#319261
animal написал:
Без компрессии должно быть быстрее, как мне кажется. И вообще, так в вики написано :)

Используйте lz4, оно очень быстрое.

Войдите или зарегистрируйтесь, чтобы ответить.