Недавно мне был задан вопрос о том, как можно изменить размер зеркала, созданного при помощи geom_mirror(4), после замены дисков на бОльшие? Честно говоря, самому использовать geom_mirror мне довелось немного, а после появления zfs и совсем как-то перестал. Но посмотрев в код, понял, что простого способа нет.
В итоге требуемый функционал был добавлен и сейчас он уже включён в 11.0-CURRENT. Теперь, после того как вы заменили диски и они синхронизировались, можно выполнить команду gmirror resize и изменить размер зеркала. Тут я применил подход, используемый в gpart(8). Если пользователь при выполнении команды не указывает конкретный размер, то размер расчитывается автоматически до максимально доступного. Т.е. команда:
просмотрит все компоненты зеркала, определит максимально доступный размер и установит его.
Впрочем, с помощью ключа -s можно задать и конкретный размер, который может быть и меньше текущего. Но если зеркало используется, то уменьшение зеркала выдаст ошибку EBUSY.
Кроме того, я добавил реализацию метода g_resize, про который я упоминал в предыдущей заметке. Теперь, если родительский провайдер изменит свой размер, то geom_mirror автоматически запишет свои метаданные в "новый" последний сектор. Это может быть использовано, например, при зеркалировании разделов. После изменения размера раздела при помощи gpart resize метаданные gmirror будут автоматически обновлены и записаны в последний сектор. Останется только выполнить ту же процедуру для второго компонента и сделать gmirror resize.
В итоге требуемый функционал был добавлен и сейчас он уже включён в 11.0-CURRENT. Теперь, после того как вы заменили диски и они синхронизировались, можно выполнить команду gmirror resize и изменить размер зеркала. Тут я применил подход, используемый в gpart(8). Если пользователь при выполнении команды не указывает конкретный размер, то размер расчитывается автоматически до максимально доступного. Т.е. команда:
# gmirror resize gm0
просмотрит все компоненты зеркала, определит максимально доступный размер и установит его.
Впрочем, с помощью ключа -s можно задать и конкретный размер, который может быть и меньше текущего. Но если зеркало используется, то уменьшение зеркала выдаст ошибку EBUSY.
Кроме того, я добавил реализацию метода g_resize, про который я упоминал в предыдущей заметке. Теперь, если родительский провайдер изменит свой размер, то geom_mirror автоматически запишет свои метаданные в "новый" последний сектор. Это может быть использовано, например, при зеркалировании разделов. После изменения размера раздела при помощи gpart resize метаданные gmirror будут автоматически обновлены и записаны в последний сектор. Останется только выполнить ту же процедуру для второго компонента и сделать gmirror resize.
А в 10-ке g_resize появится?
ОтветитьУдалитьДа. Сам метод там уже есть, но последние изменения в gpart и gmirror будут после релиза.
УдалитьА что потом сделать с этим счастьем? Ведь увеличить или уменьшить zfs или ufs без переформатирования и dump/restore (send/receive) всё равно не получится. Еще увеличить ufs при помощи growfs говорят можно, но я не рискнул бы.
ОтветитьУдалитьВариантов несколько. При увеличении провайдера ZFS растёт вполне себе неплохо (смотрите про autoexpand). Но держать ZFS на geom_mirror - IMHO, странновато. growfs для UFS тоже должно работать.
УдалитьТак же, вы почти всегда можете добавить новый раздел, чтобы использовать появившееся место.
С уменьшением могут быть проблемы, но тут тоже, зависит от ситуации.
Спасибо
УдалитьДобрый день.
ОтветитьУдалитьЯ совсем новичек во Free, прошу помогите пожалуйста разобраться как правильно сделать чтобы не убить рабочий сервер.
Стоит Фри 7.1, на ней файловый сервер. Запущен софтовый Реид 1 gmirror. Команды resize нет еще в этой версии. Диски в рейде по 2Тб заполнены. Купил 2 по 4Тб, заменил физически по очереди, стали перезаписались но размер зеркала остался тот же 1,8 ТБ.
если можно опишите детально по командно как сделать чтобы расширить зеркало до физических дисков в 4 ТБ?
Как правильно разрушить/остановить реид и заново его создать чтобы не потерять информацию?
Если возможности обновиться на что-то более современное нет, то я бы попробовал загрузиться с live-cd одной из свежих версий FreeBSD, и выполнил gmirror resize из этого окружения.
Удалить