четверг, 13 мая 2010 г.

Как увеличить место на диске ZFS(теория)

На одной из моих виртуалок(LDOM) под Solaris ВНЕЗАПНО кончилось место. Как обычно просят определенное колличество, а в итоге получается что не расчитали. Но диск то уже создан и просто так его не расширишь. Покопавшись в интернетах, нашел мануал как увеличить объем диска ZFS. Мануал на английском можно почитать тут. Я выкладываю выкладки на русском:

Итак,общая теория - диск можно расширить в принципе двумя методами:
1. Подключаем к к оригинальному диску второй диск большего размера в режиме зеркала, ждем когда зеркало засинкается, отключаем оригинальный диск, подключаем к виртуалке диск большего объема.
2. Подключаем диск такого же объема как оригинальный в зеркало, ждем когда диск засинкается, отключаем оригинальный, увеличиваем оригинальный диск, подключаем его к зеркалу, ждем когда засинкается, отключаем второй диск из зеркала - монтируем к виртуалке оригинальный диск большего объема.
В текущий момент пойдет разговор про второй метод.
Итак начнем:
1. Для проверки создадим 2 диска одинакового объема
# mkfile 1g file1
# mkfile 1g file2

2. Сделаем из них зеркало
# zpool create zphouston mirror /tmp/file1 /tmp/file2
# df -h /zphouston

Filesystem size used avail capacity Mounted on
zphouston 984M 24K 984M 1% /zphouston
мы получили обычное ZFS зеркало, размером всего в 984мб
3. Запишим на этот диск какойнить файл для проверки, что данные сохранились
допустим так:
# mkfile 20m /zphouston/20megfile
# sum /zphouston/20megfile |tee /zphouston/sum
0 40960 /zphouston/20megfile

Теперь о ужыс у нас допустим ВНЕЗАПНО кончилось место на зеркале и нам нада увеличить объем
4. отключаем один из дисков в зеркале, например диск 2 под названием file2
# zpool offline zphouston /tmp/file2
Bringing device /tmp/file2 offline
# zpool status zphouston
pool: zphouston
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
zphouston DEGRADED 0 0 0
mirror DEGRADED 0 0 0
/tmp/file1 ONLINE 0 0 0
/tmp/file2 OFFLINE 0 0 0
Все диск отключен.
5. Для чистоты эксперемента - удалим диск file2, он нам не нужен по большей части уже
# rm file2
6. Теперь создаем диск большего размера, допусти в 2гига
# mkfile 2g file2
7. Прикручиваем диск к зеркальному пулу следующим образом
# zpool replace zphouston /tmp/file2 /tmp/file2
8. Посмотрим, что же у нас получилось в текущий момент:
# zpool status
pool: zphouston
state: DEGRADED
scrub: resilver completed with 0 errors on Mon Feb 9 14:01:22 2009
config:

NAME STATE READ WRITE CKSUM
zphouston DEGRADED 0 0 0
mirror DEGRADED 0 0 0
/tmp/file1 ONLINE 0 0 0
replacing DEGRADED 0 0 0
/tmp/file2/old UNAVAIL 0 0 0 cannot open
/tmp/file2 ONLINE 0 0 0

errors: No known data errors
о ужыс, зеркало поломано, старый диск не доступен, все сломалось
9. Ждем некоторое время(зависит от объема диска, данных и т.д.) и смотрим снова статус:
# zpool status zphouston
pool: zphouston
state: ONLINE
scrub: resilver completed with 0 errors on Mon Feb 9 14:01:22 2009
config:

NAME STATE READ WRITE CKSUM
zphouston ONLINE 0 0 0
mirror ONLINE 0 0 0
/tmp/file1 ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0

errors: No known data errors
опа, уже все онлайн и щастье есть!
10. Сколько же у нас сейчас получилось места? Давайте посмотрим:
# df -h /zphouston
Filesystem size used avail capacity Mounted on
zphouston 984M 20M 964M 3% /zphouston
мда, не сильно изменилось, но так и должно быть!
11. Отключаем старый диск размером в 1гиг
# zpool detach zphouston /tmp/file1
12. А теперь сколько места?
# df -h /zphouston
Filesystem size used avail capacity Mounted on
zphouston 2.0G 20M 1.9G 1% /zphouston
2! гига, тоесть это то, чего мы и добивались
13. А что же у нас со статусом зеркала:
# zpool status zphouston
pool: zphouston
state: ONLINE
scrub: resilver completed with 0 errors on Mon Feb 9 14:01:22 2009
config:

NAME STATE READ WRITE CKSUM
zphouston ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0

errors: No known data errors
все в порядке, 1 диск светится и работает в штатном режиме.
14. Далее нам необходимо востановить зеркало, ну или не востанавливать если это не надо.
пожалуй востановим на всякий случай
удаляем старый фаил file1 размером в 1 гигобайт
# rm file1
создаем такойже фаил, только размером в 2 гига(чтобы зеркало было синхронизированно по объему)
# mkfile 2g file1
присоединяем новый фаил к пулу ZFS
# zpool attach zphouston /tmp/file2 /tmp/file1
проверяем статус зеркала
# zpool status zphouston
pool: zphouston
state: ONLINE
scrub: resilver completed with 0 errors on Mon Feb 9 14:12:38 2009
config:

NAME STATE READ WRITE CKSUM
zphouston ONLINE 0 0 0
mirror ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0
/tmp/file1 ONLINE 0 0 0

errors: No known data errors
ну и наконец, смотрим сколько получилось места:
# df -h /zphouston
Filesystem size used avail capacity Mounted on
zphouston 2.0G 20M 1.9G 1% /zphouston
все в порядке, 2гигобайта, тем самым мы увеличили диск
а что же с нашим файлом, который мы создали, посмотрим:
# sum /zphouston/20megfile
0 40960 /zphouston/20megfile
все наместе, щастье мы обрели

ЗЫЖ все выше описанные манипуляции делаем на свой страх и риск, не забываем бакапить, никакой отвественности за потерю данных я не несу, ибо это только теория, хоть и мне придется скоро испытать ее на практике, по этому будет отдельный пост.

Комментариев нет:

Отправить комментарий