ZFS: Перераспределить zvol по всем дискам в шпульке?

Развертывание является тем же, является ли изображение 64 битами или 32 битами. Можно развернуть изображения от того же сервера развертывания.

12
задан 16 December 2011 в 12:04
5 ответов

Вам нужно будет переписать ваши данные в расширенный zpool, чтобы сбалансировать его. В противном случае со временем ваши записи будут распределены по всему пулу.

8
ответ дан 2 December 2019 в 21:38

Нет причин для сохранения zvol только на начальных устройствах. Если вы увеличите пул, ZFS будет охватывать обновленные данные на всех доступных базовых устройствах. В ZFS нет фиксированного разделения на разделы.

3
ответ дан 2 December 2019 в 21:38

Ну, это своего рода хакерство, но, учитывая, что вы остановили машину с помощью zvol, вы можете zfs отправить файловую систему в локальный файл на localhost с именем bar.zvol, а затем вы снова получите файловую систему обратно. Это должно перебалансировать данные для вас.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol
0
ответ дан 2 December 2019 в 21:38

Лучшим решением, которое я нашел, было дублирование половины ваших данных в расширенном пуле, а затем удаление исходных дублированных данных.

-1
ответ дан 2 December 2019 в 21:38

Это «продолжение» ответа ewwhite:

Вам нужно будет переписать свои данные в расширенный zpool, чтобы перебалансируйте его

Я написал сценарий PHP (, доступный на github ), чтобы автоматизировать это на моем хосте Ubuntu 14.04.

Просто нужно установить инструмент PHP CLI с sudo apt-get установите php5-cli и запустите скрипт, передав путь к данным ваших пулов в качестве первого аргумента. Например,

php main.php / путь / к / моим / файлам

В идеале сценарий следует запустить дважды для всех данных в пуле. Первый запуск сбалансирует использование диска, но отдельные файлы будут чрезмерно выделены дискам, которые были добавлены последними. Второй запуск гарантирует, что каждый файл будет «справедливо» распределен по дискам. Я говорю справедливо, а не равномерно, потому что он будет равномерно распределен только в том случае, если вы не смешиваете емкости дисков, как я с моим рейдом 10 пар разного размера (зеркало 4 ТБ + зеркало 3 ТБ + зеркало 3 ТБ).

Причины использования Скрипт

  • Я должен исправить проблему "на месте". Например. Я не могу записать данные в другую систему, удалить их здесь и снова записать.
  • Я заполнил свой пул более чем на 50%, поэтому я не мог просто скопировать всю файловую систему сразу перед удалением оригинала.
  • Если есть только определенные файлы, которые должны работать нормально, то можно просто запустить скрипт дважды над этими файлами. Однако второй прогон эффективен только , если первый прогон успешно сбалансировал использование дисков.
  • У меня много данных, и я хочу видеть индикацию достигнутого прогресса.

Как узнать, достигнута ли равномерная загрузка диска?

Используйте инструмент iostat в течение определенного периода времени (например, iostat -m 5 ) и проверьте записи. Если они совпадают, значит, вы достигли равномерного распределения. Они не идеальны даже на скриншоте ниже, потому что я использую пару дисков по 4 ТБ с 2 парами дисков по 3 ТБ в RAID 10, поэтому две четверки будут записаны на немного больше. enter image description here

Если использование вашего диска «несбалансированное», то iostat покажет что-то похожее на снимок экрана ниже, на котором новые диски записываются непропорционально. Вы также можете сказать, что это новые диски, потому что операции чтения равны 0, поскольку на них нет данных. enter image description here

Скрипт не идеален, это всего лишь обходной путь, но он работает для меня, пока в ZFS однажды не будет реализована функция перебалансировки, такая как в BTRFS (скрещенные пальцы).

0
ответ дан 2 December 2019 в 21:38

Теги

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