В версии FreeBSD 8.0 и выше ZFS уже является стабильным, поэтому уже можно смело переходить на нее. В данном случае установка идет на один жесткий диск, поэтому дополнительные возможности и преимущества ZFS рассмотрены не будут.
Вообще говоря для ZFS рекомендуется более 8Гб оперативной памяти, чтобы она смогла себя раскрыть.
Приходится настраивать ZFS на машинах с маленьким объемом оперативной памяти например с 1Гб и даже меньше.
Минимальный объем который необходим для работы ZFS это 512Мб.
В статье приведены параметры для слабых машин. В противном случае система может уходить в kernel panic.
Причины перехода серверов на ZFS(для меня):
Встала задача перенести роутер на новое железо, решил в качестве файловой системы выбрать ZFS. За основу взял руководство.
Установка выполняется FreeBSD 8.2 RELEASE на HDD.
Поехали...
1. Загружаемся с DVD FreeBSD или USB Memstick.
2. Выбираем в sysinstall пункт Fixit .
Примечание: при работе с флешой иногда не хочет зпускаться Fixit на memstick. Помогает Ctrl+R
4. На всякий случай смотрим как HDD видятся в системе
5. Создаем диск с GPT
6. Создаю загрузочный раздел.
Примечание: задать нужно метку -l swap0 это для отвязки от имени диска в системе. тогда его можно переставлять у какие угодно порты, fstab править не придется.
Примечание: задать нужно метку -l disс0 это для отвязки от имени диска в системе. тогда его можно переставлять у какие угодно порты, fstab править не придется.
9. Устанавливаю загрузчик. Если дисков несколько и мы планируем использовать их в ZFS рейде тогда загрузчик ставить нужно для каджого из дисков.
10. Подгружаю модули ядра.
11. Cоздаю ZFS пул с именем zroot
12. Включаем алгоритм fletcher4:
13. Создаем необходимые разделы:
14. Установка системы: происходит вручную
15. Делаем chroot в систему и правим конфиги:
При маленьком количестве оперативы (менее 512М) система может вылетать в паник с сообщением kmem_map too small. Для того чтоб избежать этого нужно добавить строки про vm.kmem... если оперативы много можно не писать.
vm.kmem_size, vm.kmem_size_max – участок памяти используемый ядром для выделения памяти, например, при использовании malloc. Размер этой памяти виртуальный, но постарайтесь сделать его меньшим вашей оперативной памяти.
vfs.zfs.prefetch_disable=1 – отключение режима prefetch. Режим prefetch – режим, когда система “угадывает” что будет прочитано и заранее читает, что может значительно ускорить работу файловой системы. На amd64 при памяти менее 4Гб он отключается автоматически.
На i386 рекомендуется отключать, а на x64 - включать
vfs.zfs.arc_max. ARC это то, где хранятся кешированные данные пулов (pool). Работа с этим параметров сказывается на производительности, но в случае если у нас памяти мало, то этот параметр можно уменьшить.
16. Устанавливаем пароль суперпользователя, временную зону и выходим из чрута:
17. Редактируем /etc/fstab если жестких дисков несколько и label для свапов разные их нужно все указать в fstab
18. Экспортируем LD_LIBRARY_PATH:
19. Размонтируем все разделы zfs и изменим их точки монтирования:
20. Теперь выходим из Fixit и sysinstall. Перезаргужаемся с жесткого диска и смотрим:
Полезные ссылки:
Установка FreeBSD 8.2 на ZFS с использованием GPT
Установка FreeBSD с использованием ZFS в качестве основной
Установка FreeBSD на ZFS, включая корневой раздел.
ZFS Evil Tuning Guide
Руководство по администрированию файловых систем ZFS Solaris
Рейды на ZFS
ZFS on Linux
ZFS Wikipedia
ZFS: работаем со снапшотами
FreeBSD UFS/ZFS Snapshot Management Environment
Вообще говоря для ZFS рекомендуется более 8Гб оперативной памяти, чтобы она смогла себя раскрыть.
Приходится настраивать ZFS на машинах с маленьким объемом оперативной памяти например с 1Гб и даже меньше.
Минимальный объем который необходим для работы ZFS это 512Мб.
В статье приведены параметры для слабых машин. В противном случае система может уходить в kernel panic.
Причины перехода серверов на ZFS(для меня):
- Скорость работы выше в ZFS . по сравнению с UFS (посмотреть можно здесь)
- Нет необходимости делать fsck -y в Single User mode (честно говоря уже достало), да и время поднятия сервера зачастую очень критично.
- Контрольная сумма блоков + использование принципа транзакций - как результат большая надежность данных.
- Возможность быстрого клонирования на другой диск системы.
- При данной интсаляции, все равно в какой SATA разъем Вы втыкнули свой HDD. Также без разницы в каком из режимов работает SATA (AHCI/IDE)
Встала задача перенести роутер на новое железо, решил в качестве файловой системы выбрать ZFS. За основу взял руководство.
Установка выполняется FreeBSD 8.2 RELEASE на HDD.
Поехали...
1. Загружаемся с DVD FreeBSD или USB Memstick.
2. Выбираем в sysinstall пункт Fixit .
Примечание: при работе с флешой иногда не хочет зпускаться Fixit на memstick. Помогает Ctrl+R
4. На всякий случай смотрим как HDD видятся в системе
# atacontrol list
5. Создаем диск с GPT
# gpart create -s GPT ad4
ad4 created
# gpart show ad4
=> 34 312581741 ad4 GPT (149G)
34 312581741 - free - (149G)
6. Создаю загрузочный раздел.
# gpart add -s 128k -t freebsd-boot ad4
ad4p1 added
# gpart show ad4
=> 34 312581741 ad4 GPT (149G)
34 256 1 freebsd-boot (128K)
290 312581485 - free - (149G)
7. Cоздаю своп.Примечание: задать нужно метку -l swap0 это для отвязки от имени диска в системе. тогда его можно переставлять у какие угодно порты, fstab править не придется.
# gpart add -s 4G -t freebsd-swap -l swap0 ad4
ad4p2 added
# gpart show ad4
=> 34 312581741 ad4 GPT (149G)
34 256 1 freebsd-boot (128K)
290 4194304 2 freebsd-swap (4.0G)
8388898 304192877 - free - (145G)
8.Остальное отдаю под ZFS пул.Примечание: задать нужно метку -l disс0 это для отвязки от имени диска в системе. тогда его можно переставлять у какие угодно порты, fstab править не придется.
# gpart add -t freebsd-zfs -l disс0 ad4
ad4p3 added
# gpart show ad4
=> 34 312581741 ad4 GPT (149G)
34 256 1 freebsd-boot (128K)
290 4194304 2 freebsd-swap (2.0G)
8388898 304192877 3 freebsd-zfs (145G)
9. Устанавливаю загрузчик. Если дисков несколько и мы планируем использовать их в ZFS рейде тогда загрузчик ставить нужно для каджого из дисков.
Fixit# gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad4
bootcode written to ad4
10. Подгружаю модули ядра.
Fixit# kldload /mnt2/boot/kernel/opensolaris.ko
Fixit# kldload /mnt2/boot/kernel/zfs.ko
11. Cоздаю ZFS пул с именем zroot
Fixit# mkdir /boot/zfs
Fixit# zpool create zroot /dev/gpt/disc0
Fixit# zpool set bootfs=zroot zroot
12. Включаем алгоритм fletcher4:
Fixit# zfs set checksum=fletcher4 zroot
13. Создаем необходимые разделы:
Fixit# zfs create -o compression=gzip -o exec=on -o setuid=off zroot/tmp
Fixit# chmod 1777 /zroot/tmp
Fixit# zfs create zroot/usr
Fixit# zfs create zroot/usr/home
Fixit# cd /zroot
Fixit# ln -s /usr/home home
Fixit# zfs create zroot/var
14. Установка системы: происходит вручную
Fixit# cd /dist/8.2-RELEASE/
Fixit# export DESTDIR=/zroot
Fixit# cd base
Fixit# ./install.sh
Fixit# cd ../catpages
Fixit# ./install.sh
Fixit# cd ../dict
Fixit# ./install.sh
Fixit# cd ../doc
Fixit# ./install.sh
Fixit# cd ../info
Fixit# ./install.sh
Fixit# cd ../kernels
Fixit# ./install.sh generic
Fixit# cd ../manpages
Fixit# ./install.sh
Fixit# cd ../src
Fixit# ./install.sh all
----- для amd64 ------
Fixit# cd ../lib32
Fixit# ./install.sh
----------------------
Fixit# cd /zroot/boot
Fixit# cp -Rlp GENERIC/* /zroot/boot/kernel/
15. Делаем chroot в систему и правим конфиги:
Fixit# chroot /zroot
Fixit# echo 'zfs_enable="YES"' > /etc/rc.conf
Fixit# echo 'hostname="test.mydomain.local"' >> /etc/rc.conf
При маленьком количестве оперативы (менее 512М) система может вылетать в паник с сообщением kmem_map too small. Для того чтоб избежать этого нужно добавить строки про vm.kmem... если оперативы много можно не писать.
Fixit# echo '### ZFS' > /boot/loader.conf
Fixit# echo 'zfs_load="YES"' > /boot/loader.conf
Fixit# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
Fixit# echo 'vfs.zfs.prefetch_disable=1' >> /boot/loader.conf
Fixit# echo 'vm.kmem_size="330M"' >> /boot/loader.conf
Fixit# echo 'vm.kmem_size_max="330M"' >> /boot/loader.conf
Fixit# echo 'vfs.zfs.arc_max="40M"' >> /boot/loader.conf
Fixit# echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf
Fixit# echo 'loader_logo="beastie"' >> /boot/loader.conf
vm.kmem_size, vm.kmem_size_max – участок памяти используемый ядром для выделения памяти, например, при использовании malloc. Размер этой памяти виртуальный, но постарайтесь сделать его меньшим вашей оперативной памяти.
vfs.zfs.prefetch_disable=1 – отключение режима prefetch. Режим prefetch – режим, когда система “угадывает” что будет прочитано и заранее читает, что может значительно ускорить работу файловой системы. На amd64 при памяти менее 4Гб он отключается автоматически.
На i386 рекомендуется отключать, а на x64 - включать
vfs.zfs.arc_max. ARC это то, где хранятся кешированные данные пулов (pool). Работа с этим параметров сказывается на производительности, но в случае если у нас памяти мало, то этот параметр можно уменьшить.
16. Устанавливаем пароль суперпользователя, временную зону и выходим из чрута:
Fixit# passwd
Fixit# tzsetup
Fixit# cd /etc/mail
Fixit# make aliases
Fixit# exit
Fixit# cp /boot/zfs/zpool.cache /zroot/boot/zfs/zpool.cache
17. Редактируем /etc/fstab если жестких дисков несколько и label для свапов разные их нужно все указать в fstab
Fixit# cat << EOF > /zroot/etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/gpt/swap0 none swap sw 0 0
EOF
18. Экспортируем LD_LIBRARY_PATH:
Fixit# export LD_LIBRARY_PATH=/mnt2/lib
19. Размонтируем все разделы zfs и изменим их точки монтирования:
Fixit# zfs umount -fa
Fixit# zfs set mountpoint=legacy zroot
Fixit# zfs set mountpoint=/tmp zroot/tmp
Fixit# zfs set mountpoint=/usr zroot/usr
Fixit# zfs set mountpoint=/var zroot/var
20. Теперь выходим из Fixit и sysinstall. Перезаргужаемся с жесткого диска и смотрим:
#mount
#zfs list
#zpool status
Полезные ссылки:
Установка FreeBSD 8.2 на ZFS с использованием GPT
Установка FreeBSD с использованием ZFS в качестве основной
Установка FreeBSD на ZFS, включая корневой раздел.
ZFS Evil Tuning Guide
Руководство по администрированию файловых систем ZFS Solaris
Рейды на ZFS
ZFS on Linux
ZFS Wikipedia
ZFS: работаем со снапшотами
FreeBSD UFS/ZFS Snapshot Management Environment
Очень неудобно читать с таким цветом страницы и цветом шрифта
ОтветитьУдалитьГлаза болят!
Цветовую схему подбирал "под себя", как раз из соображений щадящего режима для глаз.
ОтветитьУдалитьЯ работаю на ЖК мониторах 19+ в текстовом режиме, причем часто в темноте.
Выглядит на мой взгляд нормально...
Напишите пожалуйста, что из цветов напрягает глаза? На каком мониторе ? Если предложите более удачное сочетание цветов, буду только рад.
все сделал по инструкции и перепроверил отработку команд. после ребута can't load kernel. уже третий день в поисковике с утра до ночи - ответа нет нигде как быть :(
ОтветитьУдалитьПри первой установке у меня была точно такая же ошибка...
ОтветитьУдалитьОбратите внимание, что Вы поставили ядро
Fixit# ./install.sh generic
После этой команды ядро падает в /zroot/boot/GENERIC, при этом папка kernel - пустая
Как оказалось, я просто забыл выполнить команды:
Fixit# cd /zroot/boot
Fixit# cp -Rlp GENERIC/* /zroot/boot/kernel/
После выполнения команд выше, убедитесь, что в папке /zroot/boot/kernel/ есть куча файлов, среди которых kernel и kernel.symbols
Fixit# ls /zroot/boot/kernel/
Наврняка у Вас таже ошибка...
P.S. напишите, помогло или нет. Удачи :)
Достаточно подробно и понятно. Попробовал на виртуалке - все ок. А при установке на реальный сервер выдает
ОтветитьУдалитьgptzfs boot : error 1 lba 32
gptzfs boot : error 1 lba 1
gptzfs boot : No zfs pools located can't boot
Ядро скопировано и конфиги тоже проверил.
Решения пока так и не нашлось.
Посмотрите статью http://www.ukhov.ru/freebsd/NoZFSPoolsLocated. Надеюсь поможет...
ОтветитьУдалитьСобрал дома на виртуалке , включил интернет через dhcp , собрал пакет mc из текстовых файлов и установил его , поднял доступ по ssh на машину с провами рута (: спасиб :)
ОтветитьУдалитьспасибо за хаутушку, поднял у себя роутер с файлопомойкой.
ОтветитьУдалитьP.S. Цвета, кстати, отличные. Ярослав гонит )
у меня в Fixit нет каталога 8.2-RELEASE в директории /dist
ОтветитьУдалитьЗначит у Вас просто другая версия FreeBSD
ОтветитьУдалитьсделайте:
# ls -l /dist
Вам выведет содержимое папки /dist , посмотрите, какие папки у Вас есть (должна быть папка вида 8.2-RELEASE).
И соответственно нужно заменить в команде cd /dist/... на Ваш путь.
P.S. Если совет не поможет, напишите пожалуйста, с чего ставите и какую версию FreeBSD
hedg, все круто, конечно, но непонятно, как в вашем случае (перенести роутер на новое железо, если я правильно понял) производительность файловой системы влияет на "скорость работы"...
ОтветитьУдалитьА цвета, кстати, классные. Вообще, не помню где и когда, но явно до того, когда школоту пустили в интырнеты, и когда мониторы были на основе ЭЛТ, было даже исследование проведено, в результате которого выяснили, что зеленый текст на черном фоне менее всего напрягает глаза.
Я привел общий список преимуществ.
ОтветитьУдалитьПроизводительность файловой системы критична только для некоторых задач, например для высоконагруженной БД.
В моем случае в основном роутеры, а там более критичны другие параметры, например: ненужность fsck.
hedg, в дополнение тебе. Все роутеры которые я собираю, собираю с кеширующей проксей, например Squid. Соответственно, в таком бешеном потоке чтение\запись кеша очень помогает низкий отклик файловой подсистемы, что нельзя не вспомнить про ZFS с положительной стороны.
ОтветитьУдалить