FreeBSD на RAIDZ ZFS

Материал из Xgu.ru

Перейти к: навигация, поиск

Краткая действующая инструкция по созданию ZFS на трех дисках и объединение в RAID-Z

К сожалению установщик не умеет работать с ZFS. А потому рассматриваем случай, когда уже имеем диск с установленной FreeBSD.

Имеем: Диск с установленной минимальной конфигурацией FreeBSD; 3 диска по 1 TB каждый, которые и необходимо объединить в массив (небольшое уточнение: общая ёмкость дисков будет всего 2 TB).

Поехали:

Содержание

[править] Этап I. Разметка

В системе диски определились как ad4, ad6 и ad7

Разбиваем каждый диск на 3 раздела: загрузочный, подкачка и основное пространство

[править] Создаем GPT разделы на всех дисках

gpart create -s GPT ad4
gpart add -b 34 -s 256 -t freebsd-boot -l boot0 ad4
gpart add -s 2g -t freebsd-swap -l swap0 ad4
gpart add -t freebsd-zfs -l disk0 ad4
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad4

gpart create -s GPT ad6
gpart add -b 34 -s 256 -t freebsd-boot -l boot1 ad6
gpart add -s 2g -t freebsd-swap -l swap1 ad6
gpart add -t freebsd-zfs -l disk1 ad6
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad6

gpart create -s GPT ad7
gpart add -b 34 -s 256 -t freebsd-boot -l boot2 ad7
gpart add -s 2g -t freebsd-swap -l swap2 ad7
gpart add -t freebsd-zfs -l disk2 ad7
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad7

Как Вы заметили что каждому разделу мы установили индивидуальную метку. Зачем это нужно? Это нужно для того, чтобы не потерять диски в случае к примеру физического переноса дисков на другой компьютер. Ведь при переносе у нас изменятся точки монтирования дисков. А метки останутся.

[править] Создаем пул

Имя пула zfssystem. Объединяем дисковые разделы в RAID-Z и подключаем к точке монтирования /mnt

zpool create -m /mnt zfssystem raidz /dev/gpt/disk0 /dev/gpt/disk1 /dev/gpt/disk2
zfs set checksum=fletcher4 zfssystem
zfs set atime=off zfssystem

[править] Создаем структуру папок с указанием параметров

Сжатие папки /usr/ports и /usr/src - т.к. в ней текстовые файлы идеально подходящие для сжатия

zfs create zfssystem/var
zfs create zfssystem/var/db
zfs create zfssystem/var/tmp
zfs create zfssystem/var/empty
zfs create -o compression=gzip zfssystem/var/crash
zfs create zfssystem/tmp
zfs create zfssystem/usr
zfs create -o compression=gzip -o mountpoint=/mnt/usr/src zfssystem/src
zfs create -o compression=gzip -o mountpoint=/mnt/usr/ports zfssystem/ports
zfs create -o mountpoint=/mnt/usr/ports/distfiles zfssystem/distfiles
zfs create -o mountpoint=/mnt/usr/home zfssystem/home
zfs create -o mountpoint=/mnt/usr/local zfssystem/local
zfs create -o mountpoint=/mnt/usr/obj zfssystem/obj
zfs create zfssystem/data
chmod 1777 /mnt/tmp /mnt/var/tmp

[править] Этап II. Установка системы

Устанавливаем систему, указав каталог /mnt в качестве корневого

cd /usr/src
make buildworld
make buildkernel

make installworld DESTDIR=/mnt
make installkernel DESTDIR=/mnt
mergemaster -D /mnt

[править] Устанавливаем необходимые параметры в файлы конфигурации

echo 'zfs_enable="YES"' > /mnt/etc/rc.conf
echo 'hostname="server.nkfkis.ru"' >> /mnt/etc/rc.conf
echo 'sshd_enable="YES"' >> /mnt/etc/rc.conf
echo 'zfs_load="YES"' > /mnt/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:zfssystem"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size="1024M"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size_max="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc="512M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc_max="512M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.vdev.cache.size="10M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.prefetch_disable=1' >> /mnt/boot/loader.conf
echo 'LOADER_ZFS_SUPPORT=YES' >> /mnt/etc/src.conf

[править] Ядро для загрузки системы

cd /mnt/boot/
rm -r kernel
mv GENERIC kernel
mkdir /mnt/boot/zfs

[править] Сменим точки монтирования файловых систем

zfs unmount -a
zfs set mountpoint=legacy zfssystem
zfs set mountpoint=/var zfssystem/var
zfs set mountpoint=/var/db zfssystem/var/db
zfs set mountpoint=/var/tmp zfssystem/var/tmp
zfs set mountpoint=/var/empty zfssystem/var/empty
zfs set mountpoint=/var/crash zfssystem/var/crash
zfs set mountpoint=/usr zfssystem/usr
zfs set mountpoint=/usr/src zfssystem/src
zfs set mountpoint=/usr/ports zfssystem/ports
zfs set mountpoint=/usr/ports/distfiles zfssystem/distfiles
zfs set mountpoint=/usr/home zfssystem/home
zfs set mountpoint=/usr/local zfssystem/local
zfs set mountpoint=/usr/obj zfssystem/obj
zfs set mountpoint=/tmp zfssystem/tmp
zfs set mountpoint=/data zfssystem/data

[править] Импорт из существующей в будущую

zpool export zfssystem && zpool import zfssystem
zfs unmount -a
zfs set mountpoint=/mnt zfssystem
cp /boot/zfs/zpool.cache /mnt/boot/zfs

[править] Подключаем своп

echo '# Device Mountpoint FStype Options Dump Pass#' >> /mnt/etc/fstab
echo 'proc /proc procfs rw 0 0' >> /mnt/etc/fstab
echo '/dev/gpt/swap0 none swap sw 0 0' >> /mnt/etc/fstab
echo '/dev/gpt/swap1 none swap sw 0 0' >> /mnt/etc/fstab
echo '/dev/gpt/swap2 none swap sw 0 0' >>; /mnt/etc/fstab

Перезагружаемся и наслаждаемся