понедельник, 26 января 2015 г.

Уменьшение размера (shrink, resize) рутового раздела для EBS инстансов на Amazon



Появилась задачка. Сделать AMI с root-разделом на EBS, но размером меньше, чем в существующей (у меня было 32 Gb, нужно 10 Gb). AMI-шка уже настроена, и времени на перенастройку стандартной терять не хочется (трудоемкий и скучный процесс с вероятностью допустить ошибки в настройке).

Увеличить размер раздела особо нетрудно и статей в инете на эту тему множество. А вот уменьшить?


Считаем, что данные на root разделе у нас занимают немного места, менее половины раздела (что типично для AMI).

Тогда последовательность действий очень проста.
Считаем, что на оригинальной AMI рутовый раздел 32Gb, нужно сделать образ с размером рут-раздела 10Gb
1. Запускаем инстанс-"заготовку" с 32Gb рут разделом.
2. Запускаем еще один инстанс, он понадобится как промежуточный, для копирования данных.
3. После успешного запуска и отработки всех стартовых скриптов останавливаем (Stop) инстанс-заготовку, отсоединяем (detach) от него рутовый раздел и подключаем к промежуточному инстансу (например, как /dev/sdf ). ВАЖНО! Следует запомнить имя диска. под которым он был подключен, чтобы потом правильно вернуть его на место.
4. Туда же подключаем свежесозданный пустой EBS раздел нужного нам размера ( 10Gb в нашем примере), как /dev/sdg (имя можно выбрать по вкусу)
5. Разделы монтировать не надо
6. Запускаем проверку диска с данными
# fsck -f /dev/sdf
7. Изменяем размер на требуемый
# resize2fs /dev/sdf 10G
Resizing the filesystem on /dev/sdf to 2621440 (4k) blocks.
The filesystem on /dev/sdf is now 2621440 blocks long.

8. Копируем данные с большого диска на маленький. Из результата выполнения предыдущей команды берем данные о размере раздела. В нашем случае это 2621440 блоков по 4к. Для уменьшения количества дисковых операций имеет смысл пересчитать для блоков в 1Мб. Получится 10240 блоков по 1048576 байт. Эти числа и подставим в команду копирования
# dd if=/dev/sdf of=/dev/sdg count=10240 bs=1048576

9. По завершению можно еще раз проверить целостность fs (для очистки совести). после чего отключаем 10Gb диск (detach) от промежуточного инстанса и подключаем к инстансу-заготовке. ВАЖНО! Имя диска должно остаться прежним (например, для paravirtual EBS имя рутового раздела будет /dev/sda1, но возможны и варианты, например, /dev/xvda)

10. Запускаем инстанс-заготовку (Start), убеждаемся в успешном старте и создаем AMI привычным способом.













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

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