Работа с ZFS

Создание большого диска под ZFS на FreeBSD

Диски с TLER (типа желтых WD или Segate Constellation) в ZFS работают со сбоями!!!

Остальное взято тут: http://citkit.ru/articles/464/
Сперва включаем поддржку ZFS:

echo 'zfs_enable="YES"' >> /etc/rc.conf

LSI card:

gpart create -s GPT /dev/mfid0
gpart add -t freebsd-ufs /dev/mfid0

Форматировать UFS:
newfs /dev/mfid0p1
Можно отформатировать ZFS с точкой монтирования /base:
zpool create base mfid0p1
Но лучше в ЗФС загонять диск целиком, предварительно удалив все разделы.
Удалить раздел p1:

gpart delete -i 1 /dev/mfid0
gpart destroy /dev/mfid0

и после этого загнать диск в ZFS:
zpool create our_mount_point mfid0

3Ware card:

1) compile tws driver:

  1. Download source code (codeset image or zip file from LSI), for example for 3Ware 9750 series ftp://tsupport:tsupport@ftp0.lsil.com/private/3Ware/kbarticledrivers/FreeBSD-8.1_drivers_and_source_9750_10.2codeset.zip
  2. unzip them.
  3. untar source (tws.tgz) according http://md-storage-data.com/DistributionSystem/User/AssetMgr.aspx?asset=54478 (file UsrGuide_Addendum_9750_10.1codeset.pdf)
  4. cd to fresly unpacked source code folder
  5. Then copy the *.c and *.h files to /sys/dev/tws
  6. Copy the Makefile to /sys/modules/tws
  7. Build the tws.ko module:
cd /sys/modules/tws
make

The tws.ko module is created in /sys/modules/tws

2) Load driver:

kldload /sys/modules/tws/tws.ko

3) For autoload driver during system boot:
3a. copy tws.ko into the boot folder and add it to loader:

cp /sys/modules/tws/tws.ko /boot/kernel/tws.ko''

3b. add the line tws_load=“YES” to the file /boot/loader.conf

echo 'tws_load="YES"' >> /boot/loader.conf

4) device /dev/tws0 does not works, so try to use da0 device instead:

gpart create -s GPT /dev/da0
gpart add -t freebsd-ufs /dev/da0
newfs /dev/da0p1

5) To install CLI management software, see page 37 of manual UsrGuide_Addendum_9750_10.1codeset.pdf:
a. download package (using lynx or links):

lynx http://www.lsi.ru.com/DistributionSystem/User/AssetMgr.aspx?asset=55136

b. unzip it
c. make file execuabe

Advanced ZFS tricks

zfsadmin.pdf
Это, конечно, здорово, что поддержка ZFS ныне включена дерево исходников, но что теперь с ней делать? Ниже вы найдете некоторые инструкции, как быстро подключить и запустить ее. Прежде всего, вам потребуются некоторые диски. Предполим, что у вас имеется три запасных диска SCSI: da0, da1, da2.
Добавьте к вашему /etc/rc.conf строку, zfs_enable=“YES” чтобы запускать ZFS автоматически при начальной загрузке:

echo 'zfs_enable="YES"' >> /etc/rc.conf

Теперь установите один пул, использующий RAIDZ:

zpool create tank raidz da0 da1 da2

Это должно автоматически смонтировать вам /tank/.
Хорошо, теперь мы хотим поместить каталог /usr/ на ZFS и использовать ее изящество в размещении файловых систем. Я знаю, что у вас, вероятно, там уже имеются некоторые файлы, так что мы будем работать с каталогом /tank/usr и только когда все будет готово, мы изменим его точку монтирования на /usr.

zfs create tank/usr 

Создаем (внутри /usr) файловую систему ports/ и разрешите gzip-компрессию на ней, поскольку в ней имеются только текстовые файлы. С другой стороны, мы не хотим компрессировать содержимое ports/distfiles/, потому что большинство файлов в этом каталоге уже сжато (поэтому выделяем его в отдельную файловую систему):

zfs create tank/usr/ports 
zfs set compression=gzip tank/usr/ports
zfs create tank/usr/ports/distfiles
zfs set compression=off tank/usr/ports/distfiles 

Вы действительно видите, как ваша жизнь изменяется, не так ли ? :-).
Давайте создаим файловую систему для домашних каталогов пользователей и мою собственную файловую систему - home/pjd/. Я помню, что мы используем RAIDZ, но в свой каталог я помещаю чрезвычайно важный материал. Поэтому я устанавливаю, что каждый ее блок должен быть сохранен в трех копиях:

zfs create tank/usr/home 
zfs create tank/usr/home/pjd
zfs create tank/usr/home/pjd/important
zfs set copies=3 tank/usr/home/pjd/important

Я хотел бы иметь каталог с музыкой и тому подобным контентом, который можно было бы сделать доступным по сети чере NFS. Я не очень вознуюсь за сохранность этого контента, и мой компьютер не очень быстр, так что я только выключу вычисление контрольной суммы. Это - только пример такой возможности! Пожалуйста, измерьте быстродействие перед тем, как это делать, потому что возможно, что в вашем случае это ничего не даст (и ненужно):

zfs create tank/music 
zfs set checksum=off tank/music
zfs set sharenfs=on tank/music

О, я совсем забыл. Кому нынче нужно обновление времени доступа к файлам?
zfs set atime=off tank
Да, мы устанавливаем это для всей файловой системы tank, и этот атрибут будет автоматически унаследован вложенными в нее файловыми системами.
Было бы также хорошо получать информацию, все ли в порядке с нашим пулом:

echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf 

Возможно, по некоторым причинам вы все еще нуждаетесь в файловой системе UFS, например если вы используете ACLs или расширенные атрибуты файлов, которые пока не поддерживаются файловой системой ZFS. Если так, почему не только используют ZFS, чтобы обеспечить память? Вот способ, которым можно получить снапшоты UFS, клоны UFS, и т.д., просто используя ZVOLs.

zfs create -V 10g tank/ufs 
newfs /dev/zvol/tank/ufs
mount /dev/zvol/tank/ufs /ufs
zfs snapshot tank/ufs@20070406
mount -r /dev/zvol/tank/ufs@20070406 /ufs20070406
zfs clone tank/ufs@20070406 tank/ufsok
fsck_ffs -p /dev/zvol/tank/ufsok
mount /dev/zvol/tank/ufsok /ufsok

Хотите применить шифрование swap-раздела и, тем не менее, использовать ZFS? Нет ничего проще, однако:

ПРЕДУПРЕЖДЕНИЕ: То, как реализована ZFS в настоящее время (точно так же, как в Solaris), она не может работать при небольших объемах памяти. То есть в настоящее время вы действительно нуждаетесь в пространстве подкачки. См. http://lists.freebsd.org/pipermail/freebsd-current/2007-September/076831.html для получения более подробных сведений.

zfs create -V 4g tank/swap 
geli onetime -s 4096 /dev/zvol/tank/swap
swapon /dev/zvol/tank/swap.eli

Пытаетесь сделать кое-что рискованное с вашим домашним каталогом? Сначала сделайте его снапшот!
zfs snapshot tank/home/pjd@justincase
Оказывается, что это было скорее ненужно, чем опасно? Возвращаемся обратно к снапшоту!

zfs rollback tank/home/pjd@justincase 
zfs destroy tank/home/pjd@justincase 

Отлично, все работает, так что мы можем смонтировать tank/usr как наш реальный каталог /usr:

zfs set mountpoint=/usr tank/usr 

If we want to create raidz volume on freenas from disks of different sizes, we need to:

  • create any pool (or some of pools) with desired zraid name for one of them (for example, ZFS) of any type (for example, RAID0), containing all available drives using Volume manager (this will create default mount point for this pool, swap partitions on every disk, gpt partition map on every drive, and gpt partitions for use in raidz);
  • destroy this pool via command line using command
    zpool destroy ZFS

    the partitions /dev/gptid/69217d70-7632-11e3-b2c9-001517e60f0a and other in folder /dev/gptid will be automatically saved.

  • Create raidz (or raidz2) using the following command:

    zpool create -f -m /mnt/ZFS ZFS raidz gptid/69217d70-7632-11e3-b2c9-001517e60f0a gptid/699bb0cc-7632-11e3-b2c9-001517e60f0a gptid/6a00ba6a-7632-11e3-b2c9-001517e60f0a

    where:

    • -f - force flag, which is needed in case of our drives has different size;
    • -m /mnt/ZFS - is the mount point, which had been created on step 1;
    • ZFS - pool name;
    • raidz (or raidz2) - redundancy scheme for zpool;
    • gptid/UUID - gpt uuids for partitions created on step 1

Grow ZFS Volume

Увеличиваем размер zvol в пределах доступного пространства пула

Сперва смотрим название и размер “диска”:

zfs list

Диски, созданные во FreeNAS для экспорта по iSCSI, не имеют точки монтирования.
Именуются они по схеме pool_name/volume_name
Следующий столбец (USED) нам покажет его текущий размер.
Изменить размер вольюма (без ошибок может быть изменение только в сторону увеличения) можно командой

zfs set volsize=7.08T pool_name/volume_name
freebsd/huge_vol_create.txt · Last modified: 2014/08/24 21:25 (external edit)
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5