Вам нужно будет переписать ваши данные в расширенный zpool, чтобы сбалансировать его. В противном случае со временем ваши записи будут распределены по всему пулу.
Нет причин для сохранения zvol только на начальных устройствах. Если вы увеличите пул, ZFS будет охватывать обновленные данные на всех доступных базовых устройствах. В ZFS нет фиксированного разделения на разделы.
Ну, это своего рода хакерство, но, учитывая, что вы остановили машину с помощью zvol, вы можете zfs отправить файловую систему в локальный файл на localhost с именем bar.zvol, а затем вы снова получите файловую систему обратно. Это должно перебалансировать данные для вас.
zfs send tank/bar > bar.zvol
zfs receive tank/bar < bar.zvol
Лучшим решением, которое я нашел, было дублирование половины ваших данных в расширенном пуле, а затем удаление исходных дублированных данных.
Это «продолжение» ответа ewwhite:
Вам нужно будет переписать свои данные в расширенный zpool, чтобы перебалансируйте его
Я написал сценарий PHP (, доступный на github ), чтобы автоматизировать это на моем хосте Ubuntu 14.04.
Просто нужно установить инструмент PHP CLI с sudo apt-get установите php5-cli
и запустите скрипт, передав путь к данным ваших пулов в качестве первого аргумента. Например,
php main.php / путь / к / моим / файлам
В идеале сценарий следует запустить дважды для всех данных в пуле. Первый запуск сбалансирует использование диска, но отдельные файлы будут чрезмерно выделены дискам, которые были добавлены последними. Второй запуск гарантирует, что каждый файл будет «справедливо» распределен по дискам. Я говорю справедливо, а не равномерно, потому что он будет равномерно распределен только в том случае, если вы не смешиваете емкости дисков, как я с моим рейдом 10 пар разного размера (зеркало 4 ТБ + зеркало 3 ТБ + зеркало 3 ТБ).
Используйте инструмент iostat в течение определенного периода времени (например, iostat -m 5
) и проверьте записи. Если они совпадают, значит, вы достигли равномерного распределения. Они не идеальны даже на скриншоте ниже, потому что я использую пару дисков по 4 ТБ с 2 парами дисков по 3 ТБ в RAID 10, поэтому две четверки будут записаны на немного больше.
Если использование вашего диска «несбалансированное», то iostat покажет что-то похожее на снимок экрана ниже, на котором новые диски записываются непропорционально. Вы также можете сказать, что это новые диски, потому что операции чтения равны 0, поскольку на них нет данных.
Скрипт не идеален, это всего лишь обходной путь, но он работает для меня, пока в ZFS однажды не будет реализована функция перебалансировки, такая как в BTRFS (скрещенные пальцы).