Есть ли способ, с помощью которого ZFS может быть предложено перераспределить данную файловую систему по всем дискам в ее zpool?
Я думаю о сценарии, в котором у меня есть том ZFS фиксированного размера, который экспортируется как LUN поверх FC. Текущий zpool небольшой, всего два зеркальных диска по 1 ТБ, а zvol всего 750 ГБ. Если бы я вдруг увеличил размер zpool до, скажем, 12 дисков по 1 ТБ, я считаю, что zvol все равно будет эффективно «размещаться» только на первых двух шпинделях.
Учитывая, что больше шпинделей = больше IOPS, какой метод я мог бы использовать, чтобы «перераспределить» zvol по всем 12 шпинделям, чтобы воспользоваться ими?
zfs send | zfs recv
Нет причин хранить zvol только на начальных устройствах. Если вы увеличите пул, ZFS распространит обновленные данные на все доступные базовые устройства. В ZFS нет фиксированных разделов.
источник
Это «продолжение» ответа Ewwhite:
Я написал PHP-скрипт ( доступный на github ) для автоматизации этого на моем хосте Ubuntu 14.04.
Нужно просто установить PHP CLI
sudo apt-get install php5-cli
и запустить скрипт, передавая путь к данным ваших пулов в качестве первого аргумента. Напримерphp main.php /path/to/my/files
В идеале вы должны запустить скрипт дважды для всех данных в пуле. При первом запуске будет сбалансировано использование дисков, но отдельные файлы будут чрезмерно выделены дискам, которые были добавлены последними. Второй запуск гарантирует, что каждый файл «справедливо» распределен по дискам. Я говорю честно, а не равномерно, потому что он будет распределен равномерно, только если вы не смешиваете емкость дисков, как я с моим рейдом 10 пар разных размеров (зеркало 4 ТБ + зеркало 3 ТБ + зеркало 3 ТБ).
Причины использования скрипта
Как я могу узнать, достигнуто ли даже использование диска?
Используйте инструмент iostat в течение определенного периода времени (например,
iostat -m 5
) и проверьте записи. Если они одинаковы, то вы добились равномерного распространения. Они не совсем даже на скриншоте ниже, потому что я использую пару 4 ТБ с 2 парами 3 ТБ дисков в RAID 10, поэтому две 4 будут записаны немного больше.Если загрузка вашего диска «несбалансированная», то iostat покажет нечто похожее на скриншот ниже, где новые диски записываются непропорционально. Вы также можете сказать, что они являются новыми дисками, потому что чтения равны 0, поскольку у них нет данных на них.
Сценарий не идеален, только обходной путь, но он работает для меня тем временем, пока однажды в ZFS не будет реализована функция балансировки, как в BTRFS (пальцы скрещены).
источник
Что ж, это немного хакерство, но, учитывая, что вы остановили машину с помощью zvol, вы могли бы zfs отправить файловую систему в локальный файл на локальном хосте с именем bar.zvol, а затем снова получить систему возврата файлов. Это должно сбалансировать данные для вас.
источник
лучшее решение, которое я нашел, было дублировать половину ваших данных в расширенном пуле, а затем удалить исходные дублированные данные.
источник