Это 4k диски? Да, вы можете видеть, что они сообщают 4096 байт физических данных, что является индикатором для этого. Логическая отчетность в 512 байт является результатом попытки производителей дисков обеспечить обратную совместимость (и, таким образом, приводит к путанице).
gpart? В вашей ситуации я бы использовал следующие команды, чтобы отделить диск:
# -- Force ashift to be at least 12 sysctl vfs.zfs.min_auto_ashift=12; # -- Create GPT tables gpart create -s gpt ada0 && gpart create -s gpt ada1 && gpart create -s gpt ada2; # -- Create paritions, align start/stop to 1 MiB boundaries gpart add -a 1m -t freebsd-zfs -l disk0 ada0 && gpart add -a 1m -t freebsd-zfs -l disk1 ada1 && gpart add -a 1m -t freebsd-zfs -l disk2 ada2; # -- Not needed under FreeBSD 10.1 but sometimes is on # older versions to get /dev/gpt to update. # Run if you don't see /dev/gpt/disk0 etc devices: true > /dev/ada0; true > /dev/ada1; true > /dev/ada2; # -- Create temporary GNOP 4k devices gnop create -S 4k /dev/gpt/disk0 && gnop create -S 4k /dev/gpt/disk1 && gnop create -S 4k /dev/gpt/disk2; # -- Create the zpool zpool create -f -m /mnt zstorage raidz /dev/gpt/disk0.nop /dev/gpt/disk1.nop /dev/gpt/disk2.nop; # -- Export zpool export zroot; # -- Remove temproary GNOP devices gnop destroy /dev/gpt/disk0.nop && gnop destroy /dev/gpt/disk1.nop && gnop destroy /dev/gpt/disk2.nop; # -- Bring back pool with "real" devices zpool import -d /dev/gpt zstorage; # -- Check status zpool status; # -- Verify ashift is 12 zdb | grep ashift
У gpart-ing нет никаких проблем производительности или недостатков, о которых мы знаем или видели. Мы развернули это на десятках производственных площадок на протяжении многих лет. Это также дает следующие преимущества:
- Вы можете пометить (-l) разделы (т.е. disk0, disk1), чтобы вы знали, какие диски какие, даже если их номера портов изменяются (то есть ada0 не всегда может быть disk0).
gpart show -l
покажет таблицу GPT с этими метками. - Хотя это не применимо к вам, оно позволяет вам загружаться с ZFS, а также иметь разделы подкачки (то есть, используя GMIRROR) на тех же дисках.
- Благодаря выравниванию в 1 МБ у вас останется немного свободного места в конце диска, потому что ваш раздел округлен до 1 МБ. Это позволяет избежать ситуации, когда вы заменяете диск другим поставщиком, и в итоге он становится немного меньше и, следовательно, не может использоваться.
Вы также заметите, что первое, что было сделано выше, sysctl vfs.zfs.min_auto_ashift=12;
и последнее, что нужно проверить, это значение. В ZFS ashift = 9 является значением по умолчанию, которое подходит для 512-байтовых дисков, но для 4k-дисков вы увидите усиление записи и потерю производительности, аналогичные по своему действию, но не по причине из-за смещения раздела. Мы видели, где, по неизвестным причинам, ZFS не выбирает ashift = 12 автоматически даже с GNOP, поэтому это вызывает проблему. Эта страница хорошо описывает все это: http://savagedlight.me/2012/07/15/freebsd-zfs-advanced-format/
Тюнинг? Зависит от вашей рабочей нагрузки. Теперь мы включаем LZ4-сжатие во всех новых развертываниях, поскольку в худшем случае это приводит к незначительным издержкам и в лучшем случае резко повышает производительность для сжимаемых файлов.
# -- Set compresison on zfs set compression=lz4 zstorage; # -- See compression performance zfs get used,compressratio,compression,logicalused zstorage;
Единственный «недостаток» заключается в том, что это повлияет на бенчмаркинг, bonnie++
сообщит о некоторых безумных (удивительно удивительных) цифрах, когда они включены, которые, вероятно, не отражают реальную производительность. То же самое со dd if=/dev/zero of=test.dat
стилевым тестированием.