wiki:linux/cheap-nas

Version 14 (modified by root, at 2015-04-17T10:33:11Z) (diff)

--

хранилище iscsi zfs для нищебродов

синопсис

по результатам посещения магазинов имеется четыре жёстких диска, одна нормальная ssd, две ssd ниочень, сервер с резервным блоком питания, батарейкой для контроллера и корзинами для дисков. к великому сожалению, устанавливать на сервер FreeBSD лишено смысла, т.к. под неё нет управления контроллером. в случае выхода из строя жёсткого диска для его замены весь nas придётся перегружать, чтобы добавить новый диск.

кроме того, после нескольких попыток установить FreeBSD выяснилось, что грузится она с этого контроллера только с zfs зеркала. если делать raidz2 или stripe из mirror, то zfsloader по какой-то причине не видит дисков.

поскольку из всех линуксов наибольший опыт работы у меня с CentOS, то я решил остановиться на нём, а именно на версии 6.6, как последней версии без systemd, который ещё предстоит изучать.

установка

перед установкой необходимо дать возможность операционной системе получить доступ до дисков. hp smartarray p410 не умеет jbod, а в рамках использования zfs возможности контроллера по работа с дисковыми массивами мне неинтересны. придётся обойтись костылём: сделать из каждого диска отдельный массив raid0.

внятного описания как грузить линукс с zfs мне найти не удалось, поэтому грузиться я буду с ext4. первые два диска я подготовил вот так:



когда спросят про то, куда писать загрузчик, то нужно выбирать вот такую схему:


если выбрать что-то другое, то ничего не загрузится: после инициализации рейда будет просто чёрный экран с одним мигающим курсором. хотя на виртуальной машине с обычными sas дисками работает, даже если загрузчик записать на md10. видимо, особенность контроллера hp smartarray p410 - не такой он уж и smart.

конфигурирование

система

после установки сразу стоит сделать yum update -y, поскольку пакет zfs on linux предназначен для последней версии ядра и на старьё не установится.

zfs занимает весь объём оперативной памяти для кэша (arc) и в некоторых случаях может не успеть освободить часть памяти, необходимую для работы софта. в этом случае ядро начнёт геноцид приложений и служб, а чтобы этого не произошло в систему нужно добавить swap.

помимо этого на оставшиеся два диска я добавлю ещё зеркала для раздела /boot, кашу маслом не испортишь:

yum install -y gdisk
for i in c d; do
 sgdisk -g \
  -n 1:2048:1138687 /dev/sd${i} \
  -t 1:fd00 /dev/sd${i} \
  -c 1:boot${i}
  -n 2:1138688:46649343 /dev/sd${i} \
  -t 2:fd00 /dev/sd${i} \
  -c 2:main${i}
done
mdadm --grow /dev/md10 \
 --raid-devices=4 \
 --add /dev/sdc1 \
 --add /dev/sdd1
mdadm --create /dev/md22 \
 --level=1 --raid-devices=2 \
 /dev/sdс2 \
 /dev/sdd2
mkswap -L swap /dev/md22

допишу строчку про swap в /etc/fstab:

LABEL=swap swap swap defaults 1 3

и выполню swapon -a, чтобы swap подцепился.

во время установки grub был записан в загрузчик только первого диска. мы все умираем и этот диск когда-то тоже умрёт, поэтому grub нужно записать в загрузчики остальных дисков, чтобы сервер мог загрузиться с любого диска. для этого в /boot/grub/device.map я напишу:

(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
(hd3) /dev/sdd

и выполню:

for i in a b c d; do
 grub-install --root-directory=/ /dev/sd${i}
 grub-install --root-directory=/ /dev/sd${i}1
done

zfs

самый неинтересный раздел. zfs заводится с полпинка, как описано тут:

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm
yum install kernel-devel zfs

основная часть места на моих четырёх 3тб винтах осталась не разбита. сделаю разделы для zfs

for i in a b c d; do
 sgdisk \
  -n 3:46649344:5859649343 /dev/sd${i}
  -c 3:ztd${i}
done

напомню, что у меня ещё есть три штуки ssd, которые я использую для zil и l2arc. разбивал их я вот таким образом:

sgdisk -g \
 -n 1:2048:46139391 /dev/sde \
 -c 1:zil1
 -n 2:46139392:417335295 /dev/sde \
 -c 2:cache1 \
 -n 1:2048:46139391 /dev/sdf \
 -c 1:zil2
 -n 2:46139392:207620095 /dev/sdf \
 -c 2:cache2 \
 -n 1:2048:207620095 /dev/sdg \
 -c 1:cache3

т.е. получилось вот так:

/dev/sde:
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        46139391   22.0 GiB    8300  zil1
   2        46139392       417335295   177.0 GiB   8300  cache1

/dev/sdf:
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        46139391   22.0 GiB    8300  zil2
   2        46139392       207620095   77.0 GiB    8300  cache2

/dev/sdg:
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       207620095   99.0 GiB    8300  cache3

примерно 15% от

scst

от выбора iscsi target под linux может закружиться голова, но за меня их уже сравнили, поэтому я этого делать не буду, а поверю на слово и сразу выберу scst.

ядро

полезные ссылки:

  1. http://habrahabr.ru/post/200466/;
  2. http://habrahabr.ru/post/209460/;
  3. http://habrahabr.ru/post/209666/.

Attachments (2)

Download all attachments as: .zip