2

У меня есть 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

Начиная с пункта 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, управляющей целыми дисками, вы настроены и готовы к работе.

1

Это 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .