Используя полосатое зеркало (Raid 10) в качестве примера, если два диска расширены до четырех, как можно «повторно сбалансировать» (распределить) данные с двух дисков между двумя зеркалами?
То есть, как файлы, записанные на одно зеркало, можно записать на два зеркала, чтобы использовать чередующиеся диски?
Только недавно записанные (добавленные) данные разделяются между всеми текущими активными vdev, в ZFS нет явной операции перебалансировки.
Два возможных решения:
Чтобы быть более точным, я бы выбрал второе решение и передавал каждую файловую систему отдельно в моменты, когда загрузка системы низкая (например, ночью):
zfs snapshot -r
) файловой системы приличного размера (и последующих файловых систем рекурсивно)zfs send | zfs recv
с соответствующими параметрами для отправки снимка во вновь созданную временную файловую систему (может находиться в том же пуле, если позволяет пространство); эта файловая система должна находиться в том же месте иерархии, что и стараяzfs destroy
старый снимок и старая файловая системаzfs rename
временная система на старое имяzfs mount
, изменяя предыдущую ситуацию для вашей замененной файловой системывозможное третье решение (как упоминалось SirMaster на этом форуме FreeNAS Почта):
rm -rf original/
mv temp/ original/
Это работает, потому что ZFS будет пропорционально размещать записи на тот vdev, у которого больше всего свободного места, в данном случае на новые диски, которые были пустыми. (начиная с версии 0.7 zfs будет предпочитают более быстрые диски для записи, но предположим, что ваши 2 новых диска имеют такую же или большую производительность, чем исходные диски)
Наверное, медленнее, чем zfs send | zfs recv
, но проще, потому что вам не нужно создавать / уничтожать снимки.
Вы можете запустить zpool list -v
до и после, чтобы увидеть использование каждого vdev.
Также нашел php сценарий который выполняет процедуру копирования / удаления / переименования для каждого файла отдельно. Это было связано в ответ из аналогичного (но звол) вопрос на несколько лет старше. (лично не тестировал этот скрипт)