Песочница →
Поднимаем FreeBSD 8.2+ на ZFS root с зеркалированием используя GPT с помощью Rescue-System в Hetzner
Не так давно один из моих клиентов решил перенести свои проекты из российского датацентра в Германию в компанию Hetzner. Им был выбран выделенный сервер в конфигурации EX 4S (i7 2600, 32Gb ram, 2x3Tb), за какие то совершенно смешные деньги.
И так как и в дальнейшем планировалось еще докупать аналогичные сервера, решил собрать нужную информацию в единую заметку. Данная заметка является скорее компиляцией и переводом нескольких статей которые мне пришлось использовать когда первый сервер был установлен + что немного от себя.
Наверное не так мало системщиков, которые бы не знали компанию Hetzner. По мимо низких ценников, у них довольно интересно реализована замена недешевой KVM-IP, в виде загрузочных образов систем названных Rescue System. И так как FreeBSD при заказе сервера они сами не устанавливают, то единственный способ установить систему это воспользоваться данной возможностью.
Так что приступим:
Rescue-система активируется из интерфейса Robot. После выбора нужного сервера (Меню «Server» -> кликаем на нужный сервер) выбераем вкладку «Rescue».
В зависимости от архитектуры установленной системы (64 или 32 бита), выбираем соответствующий переключатель.
После активации Rescue-системы увидим автоматически сгенерированный пароль.
Записываем или запоминаем его, так как это — root пароль для Rescue-системы.
Наконец, систему можно перезагрузить. При перезагрузке сервер загрузится в Rescue-системе по сети вместо загрузки с жесткого диска.
Перезагрузку в нашем случае можно сделать:
Воспользуемся автоматикой (сотрудники не очень расторопны).
После перезагрузки сможем подключиться к серверу по SSH по выделенному для этого сервера IP адресу и войти в систему с логином root и сгенерированным раннее в Rescue-системы паролем.
Так как жесткие диски более 2Tb то будем использовать GPT диски.
Смотрим какие диски мы имеем:
Так как rescue-system на базе FreeBSD-8 то вероятнее всего увидим в ответ:
Создадаем GPT диски:
Так как диски могут быть юзанные сначала удаляем старые разделы
потом создаем наши
Создадим загрузочную, swap и zfs разделы на обоих дисках:
Первый раздел будет содержать gptzfsboot loader который позволит загружаться с ZFS диска. Второй раздел swap. Так как памяти у нас будет 32Gb, а большого смысла зеркалировать swap раздел я не вижу то делаем два по 16Gb. Так же не будем использовать ZFS Swap Volume так как на нем crash dump не создается (а вдруг надо будет). Оставшуюся часть диска выделяем для zfs prool.
При этом сразу же задаем метки для разделов.
Устанавливаем Protected MBR (pmbr) и gptzfsboot loader на оба диска:
Это позволит нам загружаться с этих дисков.
Создаем ZFS Pool zroot (zroot это просто название, можно придумать любое, но лучше оставим это):
Монтируем zroot в /mnt Rescue системы:
Создаем ZFS файловую систему:
Алгоритм проверки чексумм fletcher4 (на данный момент по умолчанию и работает лучше чем fletcher2).
Включаем компрессию lzjb (быстрая) там где это имеет смысл. И отключаем запуск и setuid в тех местах где он не должен в нормальном состоянии никому понадобиться.
Сжатие может быть on, off, lzjb, gzip, gzip-N (где N целое от 1 (fastest) до 9 (best compresion ratio. gzip идентично gzip-6).
Сжатие вызывает появление задержек при обращении к ZFS файловой системе. Поэтому ставим сжатие там где обращение к данным идет не так часто.
После чего запускаем программу установки FreeBSD (конечно «некошерно», но я визуал, и если есть возможность использовать GUI его использую:
Выбираем опцию «Custom» в главном меню и идем в Options.
В качестве «Install Root» задаем путь к точке монтирования ("/mnt") а версия релиза к примеру 8.2-RELEASE. Выходим по кнопке «q».
Пункты меню «Partition» и «Label» пропускаем переходим к «Distributions». Выбераем «Minimal» дистрибутив и подтверждаем нажатием «OK».
Так же имеет смысл установить GENERIC ядро, хотя с наличием Rescue system это может и не понадобиться никогда.
Заходим в «Media» и выбираем ftp.
При вопросе о сетевых настройках (Network configuration) жмем «Yes».
Подтверждаем всё выбранное нажатием «Commit» в меню. Это действие запускает установку.
Затем вам будет предложено просмотреть меню настройки. Отвечаем «No».
Выходим из «sysinstall».
Настройка
После того как первичная установка завершена, нужно настроить некоторые опции перед первым запуском FreeBSD.
Для этого можно воспользоваться «bsdconfig» предоставляемый Rescue System:
Ребут не жмем, так как еще есть над чем поработать.
Правим руками важные файлы:
Делаем /var/empty readonly
Дописываем в fstab наши swap разделы (предварительно удалив все что там есть).
Создаем /boot/loader.conf и прописываем в него с чего ZFS бутиться.
Устанавливаем zpool.cache для ZFS файловой системы
На последок еще раз проходимся по важным системным файлам проверяя, что ничего не забыли, или то, что скрипты установки все где надо прописали:
Причем в sshd_config лучше сразу сменить порт на нестандартный. При мервом запуске у нас будет разрешен доступ root по ssh.
Можно сразу же прописать в rc.conf статичные адреса, посмотрев по ifconfig и netstat выдаваемые по DHCP ip/маску и default getaway.
По уму тут стоит добавить в /mnt/etc/auth.conf алгоритм blf, а так же в /mnt/etc/login.conf сменить дефолтный у FreeBSD md5 на blf (blowfish).
Главное не забыть после этого сделать cap_mkdb /etc/login.conf и перегенерить пароль рута, но лучше это делать предварительно сделав:
А так же при желании можно сразу создать другого пользователя, добавить его в wheel и sshd группы, в sshd_config поставить доступ только для sshd группы и отключить доступ root по ssh.
Финальная часть:
Указываем точки монтирования для файловой системы ZFS.
Размонтируем всё, или zfs не позволит сменить точки.
Reboot
Ждем появления нашего сервера в сети. Если вдруг чтото пошло не так, идем в панель управления сервером, выбираем Rescue system, указываем FreeBSD, получаем пароль рута к rescue system.
Идем в перезапуск, заказываем аппаратный перезапуск.
Ждем загрузки rescue system, делаем zpool import, меняем точки монтирования на /mnt/tmp /mnt/usr /mnt/var.
И изучаем, что пошло не так. Наверняка позабыли чтото в /boot/loader.conf или rc.conf.
Материалы которые были использованы:
wiki.hetzner.de/index.php/FreeBSD_Rescue-System/ru
wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
И так как и в дальнейшем планировалось еще докупать аналогичные сервера, решил собрать нужную информацию в единую заметку. Данная заметка является скорее компиляцией и переводом нескольких статей которые мне пришлось использовать когда первый сервер был установлен + что немного от себя.
Наверное не так мало системщиков, которые бы не знали компанию Hetzner. По мимо низких ценников, у них довольно интересно реализована замена недешевой KVM-IP, в виде загрузочных образов систем названных Rescue System. И так как FreeBSD при заказе сервера они сами не устанавливают, то единственный способ установить систему это воспользоваться данной возможностью.
Так что приступим:
Rescue-система активируется из интерфейса Robot. После выбора нужного сервера (Меню «Server» -> кликаем на нужный сервер) выбераем вкладку «Rescue».
В зависимости от архитектуры установленной системы (64 или 32 бита), выбираем соответствующий переключатель.
После активации Rescue-системы увидим автоматически сгенерированный пароль.
Записываем или запоминаем его, так как это — root пароль для Rescue-системы.
Наконец, систему можно перезагрузить. При перезагрузке сервер загрузится в Rescue-системе по сети вместо загрузки с жесткого диска.
Перезагрузку в нашем случае можно сделать:
- через вкладку «Reset» в Robot
- или запросив ручную перезагрузку сотрудником дата-центра
Воспользуемся автоматикой (сотрудники не очень расторопны).
После перезагрузки сможем подключиться к серверу по SSH по выделенному для этого сервера IP адресу и войти в систему с логином root и сгенерированным раннее в Rescue-системы паролем.
Так как жесткие диски более 2Tb то будем использовать GPT диски.
Смотрим какие диски мы имеем:
ls -1 /dev/ad* /dev/da* /dev/twed* /dev/aacd* | grep -E '[a-z]{2}[0-9]+$'
Так как rescue-system на базе FreeBSD-8 то вероятнее всего увидим в ответ:
/dev/ad4 /dev/ad6
Создадаем GPT диски:
Так как диски могут быть юзанные сначала удаляем старые разделы
gpart destroy ad4 gpart destroy ad6
потом создаем наши
gpart create -s gpt ad4 gpart create -s gpt ad6
Создадим загрузочную, swap и zfs разделы на обоих дисках:
gpart add -b 34 -s 64k -t freebsd-boot ad4 gpart add -b 34 -s 64k -t freebsd-boot ad6 gpart add -s 16G -t freebsd-swap -l swap0 ad4 gpart add -s 16G -t freebsd-swap -l swap1 ad6 gpart add -t freebsd-zfs -l disk0 ad4 gpart add -t freebsd-zfs -l disk1 ad6
Первый раздел будет содержать gptzfsboot loader который позволит загружаться с ZFS диска. Второй раздел swap. Так как памяти у нас будет 32Gb, а большого смысла зеркалировать swap раздел я не вижу то делаем два по 16Gb. Так же не будем использовать ZFS Swap Volume так как на нем crash dump не создается (а вдруг надо будет). Оставшуюся часть диска выделяем для zfs prool.
При этом сразу же задаем метки для разделов.
Устанавливаем Protected MBR (pmbr) и gptzfsboot loader на оба диска:
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad4 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad6
Это позволит нам загружаться с этих дисков.
Создаем ZFS Pool zroot (zroot это просто название, можно придумать любое, но лучше оставим это):
zpool create zroot mirror /dev/gpt/disk0 /dev/gpt/disk1 zpool set bootfs=zroot zroot
Монтируем zroot в /mnt Rescue системы:
zfs set mountpoint=/mnt zroot
Создаем ZFS файловую систему:
zfs set checksum=fletcher4 zroot
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp chmod 1777 /mnt/tmp
Алгоритм проверки чексумм fletcher4 (на данный момент по умолчанию и работает лучше чем fletcher2).
zfs create zroot/usr zfs create zroot/usr/home cd /mnt ; ln -s /usr/home home
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
Включаем компрессию lzjb (быстрая) там где это имеет смысл. И отключаем запуск и setuid в тех местах где он не должен в нормальном состоянии никому понадобиться.
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create zroot/var zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash zfs create -o exec=off -o setuid=off zroot/var/db zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg zfs create -o exec=off -o setuid=off zroot/var/empty zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail zfs create -o exec=off -o setuid=off zroot/var/run zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp chmod 1777 /mnt/var/tmp
Сжатие может быть on, off, lzjb, gzip, gzip-N (где N целое от 1 (fastest) до 9 (best compresion ratio. gzip идентично gzip-6).
Сжатие вызывает появление задержек при обращении к ZFS файловой системе. Поэтому ставим сжатие там где обращение к данным идет не так часто.
После чего запускаем программу установки FreeBSD (конечно «некошерно», но я визуал, и если есть возможность использовать GUI его использую:
sysinstall
Выбираем опцию «Custom» в главном меню и идем в Options.
В качестве «Install Root» задаем путь к точке монтирования ("/mnt") а версия релиза к примеру 8.2-RELEASE. Выходим по кнопке «q».
Пункты меню «Partition» и «Label» пропускаем переходим к «Distributions». Выбераем «Minimal» дистрибутив и подтверждаем нажатием «OK».
Так же имеет смысл установить GENERIC ядро, хотя с наличием Rescue system это может и не понадобиться никогда.
Заходим в «Media» и выбираем ftp.
При вопросе о сетевых настройках (Network configuration) жмем «Yes».
Подтверждаем всё выбранное нажатием «Commit» в меню. Это действие запускает установку.
Затем вам будет предложено просмотреть меню настройки. Отвечаем «No».
Выходим из «sysinstall».
Настройка
После того как первичная установка завершена, нужно настроить некоторые опции перед первым запуском FreeBSD.
Для этого можно воспользоваться «bsdconfig» предоставляемый Rescue System:
# bsdconfig Welcome to the Hetzner configuration tool for FreeBSD. Hostname: lalala.domain.com Changing local password for root New Password: Retype New Password: Configuring rc.conf... DONE Enabling SSH login for root... DONE Configuring resolv.conf... DONE Congratulations! The configuration has been completed successfully. You can now use 'reboot' to boot your newly installed FreeBSD system.
Ребут не жмем, так как еще есть над чем поработать.
Правим руками важные файлы:
zfs set readonly=on zroot/var/empty
Делаем /var/empty readonly
Дописываем в fstab наши swap разделы (предварительно удалив все что там есть).
ee /mnt/etc/fstab
# dev mnt type opt dump pass /dev/gpt/swap0 none swap sw 0 0 /dev/gpt/swap1 none swap sw 0 0
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
echo 'zfs_load="YES"' >> /mnt/boot/loader.conf echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
Создаем /boot/loader.conf и прописываем в него с чего ZFS бутиться.
cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache
Устанавливаем zpool.cache для ZFS файловой системы
На последок еще раз проходимся по важным системным файлам проверяя, что ничего не забыли, или то, что скрипты установки все где надо прописали:
/mnt/etc/rc.conf /mnt/etc/ssh/sshd_config /mnt/etc/master.passwd /mnt/etc/hosts /mnt/etc/resolv.conf
Причем в sshd_config лучше сразу сменить порт на нестандартный. При мервом запуске у нас будет разрешен доступ root по ssh.
Можно сразу же прописать в rc.conf статичные адреса, посмотрев по ifconfig и netstat выдаваемые по DHCP ip/маску и default getaway.
По уму тут стоит добавить в /mnt/etc/auth.conf алгоритм blf, а так же в /mnt/etc/login.conf сменить дефолтный у FreeBSD md5 на blf (blowfish).
Главное не забыть после этого сделать cap_mkdb /etc/login.conf и перегенерить пароль рута, но лучше это делать предварительно сделав:
croot /mnt
А так же при желании можно сразу создать другого пользователя, добавить его в wheel и sshd группы, в sshd_config поставить доступ только для sshd группы и отключить доступ root по ssh.
Финальная часть:
Указываем точки монтирования для файловой системы ZFS.
zfs unmount -a
Размонтируем всё, или zfs не позволит сменить точки.
zfs set mountpoint=legacy zroot zfs set mountpoint=/tmp zroot/tmp zfs set mountpoint=/usr zroot/usr zfs set mountpoint=/var zroot/var
Reboot
Ждем появления нашего сервера в сети. Если вдруг чтото пошло не так, идем в панель управления сервером, выбираем Rescue system, указываем FreeBSD, получаем пароль рута к rescue system.
Идем в перезапуск, заказываем аппаратный перезапуск.
Ждем загрузки rescue system, делаем zpool import, меняем точки монтирования на /mnt/tmp /mnt/usr /mnt/var.
И изучаем, что пошло не так. Наверняка позабыли чтото в /boot/loader.conf или rc.conf.
Материалы которые были использованы:
wiki.hetzner.de/index.php/FreeBSD_Rescue-System/ru
wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
13.03.2012 14:24+0400