Якщо коротко, то ashift = степінь 2-ки результат якого дорівнює block size. Для нових дисків block size = 4K, тому, ashift = 12 (бо 2^12=4096). Для старих дисків все ще використовується ashift = 9. Чим більше ashift тим буде продуктивніше працювати пул, бо за 1 раз буде більше зчитуватися даних. Але є і інша сторона – зайняте місце. Справа в тому, що якщо у вас багато маленьких файлів, по декілька КБ, то при виборі більшого ashift’y буде більше зайнятого місця. В середньому (якщо порівнювати з ashift=9) це буде в 3 рази більше зайнятого місця. Тому, при виборі ashift треба бути уважним. Головний нюанс в тому, що ashift можна змінити лише при створенні zfs pool.
А ще є момент, коли міняєте диски в одному пулі на диски з різними block size, то пул може взагалі розвалитися при перебудові. Будьте уважні!
FreeBSD/Linux
zpool create -o ashift=12 ...
Дізнатися поточний ashift можна так:
zdb | grep ashift pool
Solaris
Тут немає опції -o ashift, тому все треба робити через файл /kernel/drv/sd.conf. Скажу одразу, що на Oracle Solaris це не працює. Можливо, воно запрацює на Illumos/OpenIndiana чи старих версіях (11.3, 11.2) Oracle Solaris. Ось що треба додати у файл:
sd-config-list = "ATA WDC WD7500BPKT", "physical-block-size:4096";
Дізнатися поточний ashift:
zdb -l /dev/rdsk/c2t5000CCA059D91391d0s0 | grep ashift