4k жестких дисков freebsd gpart и zfs

4760
jm666

У меня 3 жестких диска, со следующей camcotrolидентификацией.

root@cirmos:/root # camcontrol identify ada1 pass2: <WDC WD10EZEX-00RKKA0 80.00A80> ATA-8 SATA 3.x device pass2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)  protocol ATA/ATAPI-8 SATA 3.x device model WDC WD10EZEX-00RKKA0 firmware revision 80.00A80 serial number WD-WMC1S4587539 WWN 50014ee003930f6e cylinders 16383 heads 16 sectors/track 63 sector size logical 512, physical 4096, offset 0 LBA supported 268435455 sectors LBA48 supported 1953525168 sectors PIO supported PIO4 DMA supported WDMA2 UDMA6   Feature Support Enabled Value Vendor read ahead yes yes write cache yes yes flush cache yes yes overlap no Tagged Command Queuing (TCQ) no no Native Command Queuing (NCQ) yes 32 tags SMART yes yes microcode download yes yes security yes no power management yes yes advanced power management no no automatic acoustic management no no media status notification no no power-up in Standby yes no write-read-verify no no unload no no free-fall no no data set management (TRIM) no root@cirmos:/root #  

как видно выше, размер сектора определяется как:

sector size logical 512, physical 4096, offset 0 

Вот уже несколько тем по тюнингу дисков 4к. Я хочу создать ZFS (raidz) из 3 дисков, и у меня есть следующие вопросы:

  1. Эти диски 4k drives? (спрашиваю, потому что размер физического сектора равен 4 КБ, но логическим считается 512b)
  2. что рекомендовано gpartдля вышеупомянутых дайверов correct alignment(хочу создать один freebsd-zfsраздел)
  3. Здесь есть настройка Zpool, что я должен рассмотреть? (root, system и swap не должны быть в указанных выше дисках - эти диски предназначены только для «чистого» хранения файлов (и домашних каталогов).
2

2 ответа на вопрос

2
killermist

Начиная с пункта 2; во всех передовых практиках ZFS должна «питаться» целыми дисками для управления. Никаких специальных разделов не требуется.

Что касается всего остального:

В этой ссылке много полезных советов, некоторые из которых я повторю.

Каждый vdev (как зеркало или raidz) имеет один ashift. ashift = 9 составляет 512 байт секторов, ashift = 12 - 4 тыс. секторов. (рассчитывается как 2 ^ ashift = размер сектора)

Для обеспечения совместимости в будущем без необходимости уничтожения и повторного создания пула, как правило, рекомендуется использовать ashift = 12 независимо от реальных возможностей диска (поскольку его нельзя изменить после создания vdev).

По ссылке:

# gnop create -S 4096 ada0 # zpool create tank raidz ada0.nop ada1 ada2 # zdb | grep ashift ashift: 12 

Команда gnop создает устройство принудительного сквозного выравнивания 4k для ada0 как ada0.nop. Затем создается пул. ZFS будет использовать ashift = 12 для всего vdev. После создания пула / vdev рекомендуется избавиться от устройства ada0.nop passthrough.

# zpool export tank # gnop destroy ada0.nop # zpool import tank 

Теперь пул будет импортироваться с устройств ada0, ada1 и ada2. И у него все еще будет заблокированный ashift = 12, с которым он был создан.

Вот и все. С ZFS, управляющей целыми дисками, вы настроены и готовы к работе.

Предоставляя ZFS весь диск, вы также принимаете на себя риск того, что если в будущем вам понадобится заменить отказавший диск, а у купленной вами замены будет даже на один сектор меньше, чем у старого диска, вы не будете быть в состоянии использовать это. IMO, лучшая практика заключается в создании раздела, который немного меньше, чем весь диск. Такой запас позволил бы вам использовать другие модели дисков «той же» емкости. Marcin Kaminski 10 лет назад 0
Мех. Но, чтобы уточнить, как часто заменяющие диски (особенно со временем, являются элементом рассмотрения) уменьшаются в размерах? killermist 10 лет назад 0
Я имел это случиться со мной дважды в прошлом. Я бы предпочел настроить его таким образом, чтобы исключить возможность догадок в будущем. Marcin Kaminski 10 лет назад 1
«Лучшая практика» «загрузки ZFS на весь диск» - это Solaris-ism, который не применим к FreeBSD. Под Solaris ZFS отключит кеширование, если «накормит» раздел по сравнению с реальным диском. У FreeBSD такой проблемы нет. Adam Strohl 9 лет назад 0
@AdamStrohl Мех. (это технический термин.) Если вы считаете, что предложение использовать разделы ZFS вместо целых дисков - это отличная идея, предложите это в качестве ответа с источниками, которые говорят, что это [отличная идея] (внутри или вне FreeBSD). , (подсказка, это не что-то, напоминающее отличную (или даже хорошую) идею.) killermist 9 лет назад 0
@killermist Я отправил как ответ. Я наткнулся на несколько мест, где «разделы в порядке» было четко указано: http://lists.freebsd.org/pipermail/freebsd-questions/2013-January/… и http://forums.freebsd.org /threads/zfs-and-disk-labeling-question.33896 среди других. Кроме того, у нас есть десятки клиентов с ZFS в разделах на производстве, охватывающих множество серверов. Что конкретно "не очень хорошая идея" об этом? Может быть, я могу сделать некоторое тестирование? Adam Strohl 9 лет назад 0
1
Adam Strohl

Это 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стилевым тестированием.