Как в nas4free настроить подкачку памяти SWAP на блочное устройство ZFS ZVOL, зачем и какие есть варианты получше.
Разработчики nas4free в установке по умолчанию рекомендуют как системный накопитель USB флешку, и создают на ней SWAP раздел. До 11 версии это прекрасно работало, во всяком случае на системах, где памяти много. С 11.x даже на моей системе с 16Gb RAM SWAP раздел на флешке понемногу грызёт.
Дешёвые современные флешки - полное барахло, их ячейки выдерживают хорошо если несколько десятков циклов перезаписи. В результате, выбросив третью системную флешку я, наконец, вынужден признать, что swap на флешке в nas4free 11.x - гнилая идея, независимо от размера памяти. Что бы ни говорили разработчики.
Лучшим вариантом по-прежнему считаю
выделенный небольшой раздел на HDD или SSD, затем файл на UFS разделе, расположенном на HDD или SSD. Но если и то и другое сделать затруднительно - то остаётся вариант swap на блочном устройстве zfs - zvol.
Как включить
1) Выбираем на каком zfs пуле будет zvol. У меня raidz2 Pool и однодисковый страйп WD2T. Из этих вариантов одиночный диск предпочтительнее. Было бы у меня зеркало - может использовал бы его. Итак пул WD2T, у вас будет ваше имя. zvol под swap я назвал zswap
2) Идём командную строку и даём команду на создание.
zfs create -V 2G \
-b 4k \
-o org.freebsd:swap=on \
-o checksum=off \
-o compression=off \
-o dedup=off \
-o sync=disabled \
-o primarycache=none \
WD2T/zswap
Здесь обратная косая черта позволяет продолжить команду на следующей строке. Смысл параметров (спешащие задайте свое вместо WD2T, остальное оставляем как есть и идём к п 3)
create -V 2G - создаётся zvol, размер 2 гигабайта
-b 4k - блок 4K. По умолчанию было бы 8K.В подавляющем большинстве мануалов это забывают. Я проверил размер страницы памяти. Тк pagesize выпилен из хоста - то в chroot
nas4free ~/ root~$ finch chroot
finch: chrooting to "/mnt/Pool/Ext/Finch".
nas4free // root^> pagesize
4096
То есть не врут, когда пишут, что на x86 и x86-64 4K. На SPARC,
кстати, 8Korg.freebsd:swap=on - пользовательское свойство этого zvol, которое якобы система умеет учитывать. Я такого не обнаружил, но хуже не будет
Отключаем расчёт контрольных сумм, компрессию, дедупликацию, синхронную запись и кеширование нашего zvol в память. Последнее было бы особенно глупо не отключить.
3) Объясняем nas4free, что мы хотим настроить swap на наш zvol
Галка Enable, Тип - Device, вносим имя нашего zvol
Можно предварительно проверить в командной строке, что наш zvol на месте в нашем пуле
nas4free ~/ root~$ ls -la /dev/zvol/WD2T
total 1
dr-xr-xr-x 2 root wheel 512 May 12 23:05 ./
dr-xr-xr-x 4 root wheel 512 May 12 23:05 ../
crw-r----- 1 root operator 0x9d May 12 23:05 zswap
Кнопка Save
В результате у нас 2 SWAP устройства.
4) Перегружаем NAS
5) Проверяем - строка swap usage
или
или, ещё надёжнее, из командной строки
nas4free ~/ root~$ swapinfo
Device 1K-blocks Used Avail Capacity
/dev/zvol/WD2T/zswap 2097152 0 2097152 0%
6) Не обязательно, но можно в Disks > ZFS > Configuration > Synchronize синхронизировать наш zvol, чтобы о нём знал вебгуй.
PS По теме
1. Хороший
старый пост alexey123. Но с размером блока по умолчанию.
2.
Дискусся во FreeBSD форуме про swap на zvol. С примером как поставить колом систему с такой настройко swap.
3.
Классическое изложение почему swap на zvol - не самая лучшая на свете идея.