ZFS Zpool с неправильным пеплом. Насколько это плохо?
У меня есть 3x1TB ZFS (ZoL) RAIDZ1. Один диск не удалось. Я заменяю его диском на 4 ТБ.
$ sudo zpool replace pool <old guid> /dev/disk/by-id/<new id>
cannot replace <old guid> with /dev/disk/by-id/<new id>:
new device has a different optimal sector size;
use the option '-o ashift=N' to override the optimal size
$ zdb -C | grep ashift
ashift: 9
$ sudo zpool replace pool <old guid> /dev/disk/by-id/<new id> -o ashift=9
Это работает. Массив теперь переворачивается. Однако, если честно, я не понял влияния этого параметра. Я просто хотел как можно скорее заменить неисправный диск, а в ближайшем будущем заменить другие диски емкостью 1 ТБ на диски емкостью 4 ТБ. Но в ретроспективе, производительность со смещением выравнивания 2^9 описывается как ужасная.
Я понимаю, что этот параметр неизменен. После замены двух других дисков я не могу изменить ashift
значение до 2^12, что, если я правильно понимаю, рекомендуется для дисков 4ТБ.
Я только что выстрелил себе в ногу? Как лучше поступить? Могу ли я отключить autoexpand
и создать новый том в новом массиве с ashift=12
и скопировать старый том на новый том на том же диске? Это возможно и рекомендуется?
1 ответ
Выбор слишком маленький ashift
значение по существу заставит диск выполнять чтение-изменение-запись внутри, когда вы делаете запись. Заметите ли вы, что снижение производительности зависит от вашей схемы использования - много ли вы делаете синхронных записей и нуждаетесь в очень высокой производительности? Если ответ "да", вы заметите разницу, но если нет, то, возможно, нет. Это не влияет на асинхронные записи, потому что ZFS объединяет эти записи в большие многоблочные обновления, что означает, что не будет много записей субблоков (поскольку только первые и последние блоки в большой непрерывной записи могут быть вложенными -блок).
Основным недостатком переключения на блоки 4 КБ является то, что сжатие также не будет работать, поскольку оно может округлять только сжатые блоки до ближайших 4 КБ вместо ближайших 512 В. Если для вас это важнее, чем топовая производительность записи, оставьте все как есть.
Если производительность записи действительно имеет значение, вам следует перестроить пул. Я думаю, что самый простой способ будет сделать zfs send
/ zfs receive
в новый пул, который настроен так, как вы хотите.
Что касается вашего конкретного предложения о том, как избежать покупки всего оборудования для нового пула сразу и делать чистые send
/ receive
: так как у вас уже есть данные, записанные с ashift
9, вы не можете добавить диск с ashift
12 в пул (ZFS не сможет адресовать блоки, которые выровнены по 512 В на диске, выровненном по 4 КБ; ashift
это настройка на vdevs верхнего уровня, а не на дисках) - отсюда и предупреждение, которое вы видели. Может быть возможно создать новый пул во второй половине нового диска и скопировать в него все данные из первого пула, но избыточность этого не будет такой же, как у исходного пула, так как вы не можете создать RAIDZ1 из одного раздела одного диска. Возможно, вы могли бы скопировать во второй пул без избыточности, а затем перенастроить диски / разделы в исходном пуле в правильный ashift
/ избыточность, затем скопируйте все данные обратно.