ZFS буферизуют с несправедливостью ashift. Как плохо это?

У меня есть 3x1 ТБ 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
задан 16 December 2018 в 20:20

1 ответ

Выбор также маленького ashift значение по существу заставит диск делать read-modify-write внутренне, когда Вы сделаете записи. Заметите ли Вы, что хит производительности зависит от Вашего шаблона использования — Вы делаете много синхронных записей и нуждаетесь в очень высокой производительности? Если ответ будет то да, Вы заметите различие, но в противном случае Вы не могли бы. Асинхронные записи как не затронуты этим, потому что ZFS обрабатывает те записи в пакетном режиме вместе в большие обновления мультиблока, означая, что не будет большого количества записей подблока (потому что только первые и последние блоки в большой непрерывной записи могут быть подблоком).

Основная оборотная сторона переключения на блоки на 4 кибибита - то, что сжатие не будет работать также, так как оно может только вокруг сжатых блоков к ближайшим 4 кибибитам вместо ближайшего 512B. Если это имеет значение для Вас больше, чем верхний край производительность записи, возможно, оставьте ее, как.

Если производительность записи действительно имеет значение, необходимо восстановить пул. Я думаю, что самый легкий путь состоял бы в том, чтобы сделать a zfs send / zfs receive к новому пулу, который настроен путем, Вы хотите.

Относительно Вашего определенного предложения для того, как постараться не покупать все аппаратные средства для нового пула сразу и делать чистое send / receive: так как Вам уже записали данные с ashift 9, Вы не можете добавить диск с ashift 12 к пулу (ZFS не смог бы обратиться к блокам, которые являются 512B выровнены на диске, который составляет выровненные 4 кибибита; ashift установка на верхнем уровне vdevs, не диски) — следовательно предупреждение, что Вы видели. Могло бы быть возможно сделать новый пул на второй половине нового диска и скопировать все данные из первого пула к нему, но дублирование этого не совпадет с исходным пулом, так как Вы не можете создать RAIDZ1 из одного раздела одного диска. Возможно, Вы могли скопировать во второй пул без дублирования, затем реконфигурировать диски / разделы в исходном пуле в корректное ashift / дублирование, затем скопируйте все данные назад.

1
ответ дан 7 December 2019 в 15:09

Другие вопросы по тегам:

Похожие вопросы: