Назад | Перейти на главную страницу

Как уменьшить размер корневого тома AWS EBS?

Увеличить экземпляр EC2 легко, как дыхание (например, создать AMI, запустить экземпляр из него, а затем изменить размер хранилища).

Но уменьшить становится труднее. Я хочу уменьшить размер корневого тома Elastic Block Store (EBS) инстанса Amazon Web Services (AWS) EC2. В сети есть пара старых процедур высокого уровня. Более подробная версия, которую я нашел, - это ответ годичной давности на вопрос StackOverflow: как я могу уменьшить свой объем EBS, шаги имеют довольно высокий уровень:

Создайте новый том EBS желаемого размера (например, / dev / xvdg)

Запустите экземпляр и присоедините к нему оба тома EBS.

Проверьте файловую систему (исходного корневого тома): (например) e2fsck -f / dev / xvda1

Максимально уменьшить исходный корневой том: (например, ext2 / 3/4) resize2fs -M -p / dev / xvda1

Скопируйте данные с помощью dd:

  • Выберите размер блока (мне нравится 16 МБ)

  • Рассчитайте количество блоков (используя количество блоков из вывода resize2fs): блоки * 4 / (chunk_size_in_mb * 1024) - немного округлите для безопасности

  • Скопируйте данные: (например) dd if = / dev / xvda1 ibs = 16M of = / dev / xvdg obs = 16M count = 80

Измените размер файловой системы на новом (меньшем) томе EBS: (например) resize2fs -p / dev / xvdg

Проверьте файловую систему (исходного корневого тома): (например) e2fsck -f / dev / xvdg

Отсоедините новый корневой том EBS и присоедините его к исходному экземпляру.

Я не могу найти подробное пошаговое решение.

Мой корневой том EBS подключен к экземпляру HVM Ubuntu.

Любая помощь могла бы быть полезна.

Ни одно из других решений не будет работать, если том используется как корневое (загрузочное) устройство.

На вновь созданном диске отсутствует загрузочный раздел, поэтому на нем должен быть установлен GRUB и правильно установлены некоторые флаги, прежде чем экземпляр сможет использовать его в качестве корневого тома.

Мой (на сегодняшний день работает) решение для уменьшения корневого объема:

Задний план: У нас есть экземпляр A, корневой том которого мы хотим уменьшить. Назовем этот объем VA. Мы хотим уменьшить виртуальную память с 30 ГБ до 10 ГБ.

  1. Создайте новый экземпляр ec2, B, с той же ОС, что и экземпляр A. В качестве хранилища выберите том того же типа, что и VA, но размером 10 ГБ. (или каков ваш целевой размер). Итак, теперь у нас есть экземпляр B, который использует этот новый том (назовем его VB) в качестве корневого.
  2. Как только новый экземпляр (B) запущен. Остановите его и отсоедините корневой том (VB).

ПРИМЕЧАНИЕ. Следующие шаги в основном взяты из решения @bill:

  1. Остановите экземпляр, размер которого вы хотите изменить (A).

  2. Создайте моментальный снимок тома VA, а затем создайте том «SSD общего назначения» из этого моментального снимка. Этот том мы назовем ВАСНАП.

  3. Создайте новый экземпляр с помощью amazon Linux, мы назовем этот экземпляр C. Мы просто будем использовать этот экземпляр для копирования содержимого VASNAP в VB. Мы, вероятно, также могли бы использовать экземпляр A для выполнения этих шагов, но я предпочитаю делать это на независимой машине.

  4. Прикрепите следующие тома к экземпляру C. / dev / xvdf для VB. / dev / xvdg для ВАСНАП.

  5. Перезагрузите экземпляр C.

  6. Войдите в экземпляр C через SSH.

  7. Создайте эти новые каталоги:

mkdir /source /target

  1. Отформатируйте основной раздел VB с файловой системой ext4:

mkfs.ext4 /dev/xvdf1

Если ошибок нет, переходите к шагу 11. В противном случае, если у вас их нет /dev/xvdf1, вам необходимо создать раздел, выполнив следующие действия i-vii:

i) Если /dev/xvdf1 не существует по какой-либо причине, вам нужно его создать. Сначала введите:

sudo fdisk /dev/xvdf.

ii) Протрите диск, введя: wipefs

iii) Создайте новый раздел, введя: n

iv) Введите p создать первичный раздел

v) Продолжайте нажимать Enter, чтобы продолжить с настройками по умолчанию.

vi) Когда он снова запрашивает команду, введите w написать изменения и выйти.

vii) Убедитесь, что у вас есть /dev/xvdf1 раздел, выполнив: lsblk

Вы должны увидеть что-то вроде:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  250G  0 disk
└─xvda1 202:1    0  250G  0 part
xvdf    202:80   0   80G  0 disk
└─xvdf1 202:81   0   80G  0 part 
xvdg    202:96   0  250G  0 disk
└─xvdg1 202:97   0  250G  0 part

Теперь переходите к шагу 11.

  1. Смонтируйте его в этот каталог:

mount -t ext4 /dev/xvdf1 /target

  1. Это очень важно, файловой системе нужна метка e2label для Linux, чтобы распознать ее и загрузить, используйте "e2label / dev / xvda1" на активном экземпляре, чтобы увидеть, каким он должен быть, в данном случае метка: "/"

e2label /dev/xvdf1 /

  1. Смонтировать ВАСНАП на / источник:

mount -t ext4 /dev/xvdg1 /source

  1. Скопируйте содержимое:

rsync -vaxSHAX /source/ /target

Примечание: нет "/" после "/ цели". Кроме того, может быть несколько ошибок, связанных с символическими ссылками и attrs, но изменение размера все еще выполнено успешно.

  1. Размонтировать VB:

umount /target

  1. Вернитесь в консоль AWS: отсоедините VB от экземпляра C, а также отсоедините VA от A.

  2. Присоедините том нового размера (VB) к экземпляру как: "/ dev / xvda"

  3. Загрузочный экземпляр A, теперь его корневое устройство занимает 10 ГБ :)

  4. Удалите оба экземпляра B и C, а также все тома, кроме VB, который теперь является корневым томом экземпляра A.

В Консоли AWS:

  1. Остановите экземпляр, размер которого хотите изменить

  2. Создайте снимок активного тома, а затем из этого снимка создайте том «SSD общего назначения».

  3. Создайте еще один том «SSD общего назначения» нужного размера.

  4. Присоедините эти 3 тома к экземпляру как:

    • / dev / sda1 для активного тома.
    • / dev / xvdf для тома, который является целевым размером.
    • / dev / xvdg для тома, созданного из моментального снимка активного тома.
  5. Запустите экземпляр.

  6. Войдите в новый экземпляр через SSH.

  7. создайте эти новые каталоги:

mkdir /source /target

  1. создать файловую систему ext4 на новом томе:

mkfs.ext4 /dev/xvdf

  1. смонтируйте его в этот каталог:

mount -t ext4 /dev/xvdf /target

  1. Это очень важно, файловой системе нужна метка e2label, чтобы Linux мог ее распознать и загрузить, используйте "e2label / dev / xvda1" на активном экземпляре, чтобы увидеть, каким он должен быть, в этом случае метка будет: "/"

e2label /dev/xvdf /

  1. смонтировать том, созданный из снимка:

mount -t ext4 /dev/xvdg /source

  1. Скопируйте содержимое:

rsync -ax /source/ /target

Примечание: нет "/" после "/ цели". Кроме того, может быть несколько ошибок, связанных с символическими ссылками и attrs, но изменение размера все еще выполнено успешно.

  1. Размонтируйте файловые системы:

umount /target
umount /source

  1. Вернитесь в консоль AWS: остановите экземпляр и отсоедините все тома.

  2. Присоедините том нового размера к экземпляру как: "/ dev / sda1"

  3. Запустите экземпляр, и он должен загрузиться.

ШАГ 10 ВАЖНО: Обозначьте новый том «e2label», как указано выше, иначе экземпляр будет загружаться в aws, но не пройдет проверку соединения.

Следующие шаги сработали для меня

Шаг 1. Создайте снимок тома root ebs и создайте новый том из снимка (назовем этот том-копией)

Шаг 2. Создайте новый экземпляр с корневым томом ebs желаемого размера. (назовем этот том измененным) На этом томе ebs будет правильный раздел для загрузки. (Создать новый том ebs с нуля у меня не получилось)

Шаг 3. Прикрепите изменение размера тома и копию тома к экземпляру.

Шаг 4. Форматирование объема - изменение размера.

sudo fdisk -l
    sudo mkfs -t ext4 /dev/xvdf1

Примечание: убедитесь, что указан объем раздела /dev/xvdf1 не /dev/xvdf

Шаг 5. Смонтируйте volume-resize и volume-copy mkdir / mnt / copy mkdir / mnt / resize.

sudo mount /dev/xvdh1 /mnt/copy
sudo mount /dev/xvdf1 /mnt/resize

Шаг 6. Скопируйте файлы

rsync -ax /mnt/copy/ /mnt/resize

Шаг 7. Убедитесь, что e2label совпадает с корневым томом.

sudo E2label /dev/xvdh1 > cloudimg-rootfs
sudo E2label /dev/xvdf1 cloudimg-rootfs

Шаг 8. Обновите grub.conf в копии тома, чтобы он соответствовал udid нового тома.

Найдите и замените uudid в /boot/grub/grub.cfg

ubuntu@server:~/mnt$ sudo blkid
/dev/xvdh1: LABEL="cloudimg-rootfs" UUID="1d61c588-f8fc-47c9-bdf5-07ae1a00e9a3" TYPE="ext4"
/dev/xvdf1: LABEL="cloudimg-rootfs" UUID="78786e15-f45d-46f9-8524-ae04402d1116" TYPE="ext4"

Шаг 9. Размонтируйте тома

Шаг 10. Присоедините новый том ebs с измененным размером к экземпляру / dev / sda1.

Вот альтернативный подход;

Подключите и смонтируйте старый том EBS на работающем экземпляре EC2. Если вы хотите скопировать загрузочный том, лучше всего сделать это в другом экземпляре, со старым томом, подключенным как данные, а не с томом, используемым в качестве действующей системы.

Создайте новый том EBS желаемого размера.

Присоедините новый том к экземпляру и (осторожно) отформатируйте на нем новую файловую систему (например, с помощью mkfs). Установите его.

Скопируйте содержимое старой файловой системы со старого тома на новый том:

rsync -vaxSHAX /oldvol/ /newvol/

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

Если вы копировали корневую файловую систему, то:

Создайте снимок EBS нового тома.

Зарегистрируйте снимок как новый AMI.

Приведенная ниже статья представляет собой хорошее и понятное руководство о том, как уменьшить размер тома EBS. Он имеет простое пошаговое руководство и скриншоты.

Уменьшите размер тома EBS в инстансе EC2