Увеличить экземпляр 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 ГБ.
ПРИМЕЧАНИЕ. Следующие шаги в основном взяты из решения @bill:
Остановите экземпляр, размер которого вы хотите изменить (A).
Создайте моментальный снимок тома VA, а затем создайте том «SSD общего назначения» из этого моментального снимка. Этот том мы назовем ВАСНАП.
Создайте новый экземпляр с помощью amazon Linux, мы назовем этот экземпляр C. Мы просто будем использовать этот экземпляр для копирования содержимого VASNAP в VB. Мы, вероятно, также могли бы использовать экземпляр A для выполнения этих шагов, но я предпочитаю делать это на независимой машине.
Прикрепите следующие тома к экземпляру C. / dev / xvdf для VB. / dev / xvdg для ВАСНАП.
Перезагрузите экземпляр C.
Войдите в экземпляр C через SSH.
Создайте эти новые каталоги:
mkdir /source /target
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.
mount -t ext4 /dev/xvdf1 /target
e2label /dev/xvdf1 /
mount -t ext4 /dev/xvdg1 /source
rsync -vaxSHAX /source/ /target
Примечание: нет "/" после "/ цели". Кроме того, может быть несколько ошибок, связанных с символическими ссылками и attrs, но изменение размера все еще выполнено успешно.
umount /target
Вернитесь в консоль AWS: отсоедините VB от экземпляра C, а также отсоедините VA от A.
Присоедините том нового размера (VB) к экземпляру как: "/ dev / xvda"
Загрузочный экземпляр A, теперь его корневое устройство занимает 10 ГБ :)
Удалите оба экземпляра B и C, а также все тома, кроме VB, который теперь является корневым томом экземпляра A.
В Консоли AWS:
Остановите экземпляр, размер которого хотите изменить
Создайте снимок активного тома, а затем из этого снимка создайте том «SSD общего назначения».
Создайте еще один том «SSD общего назначения» нужного размера.
Присоедините эти 3 тома к экземпляру как:
Запустите экземпляр.
Войдите в новый экземпляр через SSH.
создайте эти новые каталоги:
mkdir /source /target
mkfs.ext4 /dev/xvdf
mount -t ext4 /dev/xvdf /target
e2label /dev/xvdf /
mount -t ext4 /dev/xvdg /source
rsync -ax /source/ /target
Примечание: нет "/" после "/ цели". Кроме того, может быть несколько ошибок, связанных с символическими ссылками и attrs, но изменение размера все еще выполнено успешно.
umount /target
umount /source
Вернитесь в консоль AWS: остановите экземпляр и отсоедините все тома.
Присоедините том нового размера к экземпляру как: "/ dev / sda1"
Запустите экземпляр, и он должен загрузиться.
ШАГ 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. Он имеет простое пошаговое руководство и скриншоты.