среда, 20 ноября 2013 г.

Изменение размера зеркала GEOM_MIRROR

Недавно мне был задан вопрос о том, как можно изменить размер зеркала, созданного при помощи geom_mirror(4), после замены дисков на бОльшие? Честно говоря, самому использовать geom_mirror мне довелось немного, а после появления zfs и совсем как-то перестал. Но посмотрев в код, понял, что простого способа нет.

В итоге требуемый функционал был добавлен и сейчас он уже включён в 11.0-CURRENT. Теперь, после того как вы заменили диски и они синхронизировались, можно выполнить команду gmirror resize и изменить размер зеркала. Тут я применил подход, используемый в gpart(8). Если пользователь при выполнении команды не указывает конкретный размер, то размер расчитывается автоматически до максимально доступного. Т.е. команда:
# gmirror resize gm0

просмотрит все компоненты зеркала, определит максимально доступный размер и установит его.

Впрочем, с помощью ключа -s можно задать и конкретный размер, который может быть и меньше текущего. Но если зеркало используется, то уменьшение зеркала выдаст ошибку EBUSY.

Кроме того, я добавил реализацию метода g_resize, про который я упоминал в предыдущей заметке. Теперь, если родительский провайдер изменит свой размер, то geom_mirror автоматически запишет свои метаданные в "новый" последний сектор. Это может быть использовано, например, при зеркалировании разделов. После изменения размера раздела при помощи gpart resize метаданные gmirror будут автоматически обновлены и записаны в последний сектор. Останется только выполнить ту же процедуру для второго компонента и сделать gmirror resize.

7 комментариев:

  1. Ответы
    1. Да. Сам метод там уже есть, но последние изменения в gpart и gmirror будут после релиза.

      Удалить
  2. А что потом сделать с этим счастьем? Ведь увеличить или уменьшить zfs или ufs без переформатирования и dump/restore (send/receive) всё равно не получится. Еще увеличить ufs при помощи growfs говорят можно, но я не рискнул бы.

    ОтветитьУдалить
    Ответы
    1. Вариантов несколько. При увеличении провайдера ZFS растёт вполне себе неплохо (смотрите про autoexpand). Но держать ZFS на geom_mirror - IMHO, странновато. growfs для UFS тоже должно работать.
      Так же, вы почти всегда можете добавить новый раздел, чтобы использовать появившееся место.
      С уменьшением могут быть проблемы, но тут тоже, зависит от ситуации.

      Удалить
  3. Добрый день.
    Я совсем новичек во Free, прошу помогите пожалуйста разобраться как правильно сделать чтобы не убить рабочий сервер.

    Стоит Фри 7.1, на ней файловый сервер. Запущен софтовый Реид 1 gmirror. Команды resize нет еще в этой версии. Диски в рейде по 2Тб заполнены. Купил 2 по 4Тб, заменил физически по очереди, стали перезаписались но размер зеркала остался тот же 1,8 ТБ.
    если можно опишите детально по командно как сделать чтобы расширить зеркало до физических дисков в 4 ТБ?
    Как правильно разрушить/остановить реид и заново его создать чтобы не потерять информацию?

    ОтветитьУдалить
    Ответы
    1. Если возможности обновиться на что-то более современное нет, то я бы попробовал загрузиться с live-cd одной из свежих версий FreeBSD, и выполнил gmirror resize из этого окружения.

      Удалить