сжатие тома 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 из = / dev / xvdg obs = 16M count = 80

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

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

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

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

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

Любая помощь будет очень признательна.

21
задан 23 May 2017 в 15:41
6 ответов

Альтернативный подход:

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

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

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

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

rsync -vaxSHAX /oldvol/ /newvol/

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

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

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

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

0
ответ дан 4 January 2021 в 07:51

В консоли 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

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

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

umount / target
umount / source

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

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

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

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

6
ответ дан 4 January 2021 в 07:51

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

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

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

Шаг 3. Прикрепите volume-resize и volume-copy к экземпляру.

Шаг 4. Форматируйте volume-resize.

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

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

Шаг 5. Смонтируйте изменение размера тома и копию тома 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

2
ответ дан 4 January 2021 в 07:51

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

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

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

Фоновое: У нас есть экземпляр A, чей корневой том мы хотим уменьшить. Давайте назовем этот том VA. Мы хотим уменьшить VA с 30GB, скажем, 10GB

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

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

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

  2. Создайте снэпшот тома VA, а затем создайте том "General Purpose SSD" из этого снэпшота. Этот том мы назовём VASNAP.

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

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

  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) Создайте новый раздел, введя:

sudo fdisk /dev/xvdf

i): 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 VASNAP on /source:

mount -t ext4 /dev/xvdg1 /source

  1. Copy the content:

rsync -vaxSHAX /source/ /target

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

  1. Umount VB:

umount /target

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

  2. Attach the new size volume (VB) to the instance as: "/dev/xvda"

  3. Boot instance A, теперь его корневое устройство 10GB :)

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

8
ответ дан 4 January 2021 в 07:51

Статья ниже - хорошее и простое учебное пособие по уменьшению размера EBS-объема. В ней легко следовать пошаговому руководству и скриншотам.

Уменьшение объема EBS в вашем экземпляре EC2

0
ответ дан 4 January 2021 в 07:51

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

Создайте новый том EBS. Например, если у вас изначально было 20 Гб, а вы хотите уменьшить его до 8 Гб, создайте новый том EBS объемом 8 Гб, обязательно в той же зоне доступности. Прикрепите его к экземпляру, корневой раздел которого нужно уменьшить.

2. Разделите, отформатируйте и синхронизируйте файлы на вновь созданном томе EBS.

(1. Проверьте ситуацию с разделами)

Сначала мы используем команду sudo parted -l для проверки информации о разделах исходного тома:

[root@ip-172-31-16-92 conf.d]# sudo parted -l
Model: NVMe Device (nvme)
Disk /dev/nvme0n1: 20G
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB               bbp   bios_grub
 2      2097kB  20480MB  24G  xfs          root

Видно, что этот том корневого устройства объемом 20 Гб разделен на два раздела, один из которых называется bbp, а другой - root. В разделе bbp нет файловой системы, но есть флаг bios_grub, который показывает, что эта система загружается с помощью grub. Также видно, что корневой том разбит на разделы с помощью gpt. Что касается того, что такое bios_grub, то на самом деле это загрузочный раздел BIOS. Ссылка следующая:

https://en.wikipedia.org/wiki/BIOS_boot_partition https://www.cnblogs.com/f-ck-need-u/p/7084627.html

Это около 1 МБ, и есть раздел под названием root, на котором мы должны сосредоточиться. В этом разделе хранятся все файлы исходной системы. Итак, идея резервного копирования заключается в том, чтобы перенести файлы из этого раздела в другой раздел меньшего размера на новом томе ebs.

(2 Используйте parted для разметки и форматирования нового тома ebs.

Используйте lsblk для вывода списка блоков:

NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0   1M  0 part 
└─nvme0n1p2 259:2    0   20G  0 part /
nvme1n1     270:0    0   8G  0 disk 

Новый том ebs - это устройство nvme1n1, и нам нужно разбить его на разделы.

~# parted /dev/nvme1n1
GNU Parted 3.2 
Using /dev/xvdg 
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt  #Using the gpt layout would take up the first 1024 sectors 
(parted) mkpart bbp 1MB 2MB # Since the first 1024 sectors are used, the start address here is 1024kb or 1MB, and bbp is the partition name, that is, BIOS boot partition, which needs to take up 1MB, so the end address is 2MB
(parted) set 1 bios_grub on #Set partition 1 as BIOS boot partition

(parted) mkpart root xfs 2MB 100% #allocate the remaining space (2MB to 100%) to the root partition.


После разметки снова используйте lsblk, мы видим

NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0   1M  0 part 
└─nvme0n1p2 259:2    0   20G  0 part /
nvme1n1     270:0    0   8G  0 disk 
├─nvme1n1p1 270:1    0   1M  0 part 
└─nvme1n1p2 270:2    0   8G  0 part /

Вы видите, что есть еще два раздела, nvme1n1p1 и nvme1n1p2, где nvme1n1p2 - наш новый корневой раздел. Используйте следующую команду для форматирования раздела:

mkfs.xfs /dev/nvme1n1p2

После форматирования нам нужно смонтировать раздел, например, мы смонтируем его в /mnt/myroot.

mkdir -p /mnt/myroot
mount /dev/nvme1n1p2 /mnt/myroot
(3 Используйте rsync для переноса всего содержимого на соответствующий корневой раздел нового тома.
sudo rsync -axv / /mnt/myroot/ 

Обратите внимание, что вышеуказанный параметр -x очень важен, поскольку он служит для резервного копирования корневого каталога текущего экземпляра, Поэтому, если вы не добавите этот параметр, команда будет делать резервную копию /mnt/myroot в /mnt/myroot и попадет в бесконечный цикл. (Параметр -exclude также подходит). Команда rsync отличается от команды cp. Команда cp будет перезаписывать, а rsync - это синхронное инкрементное резервное копирование. Это сэкономит много времени. Выпейте кофе и дождитесь завершения синхронизации.

3.Замените uuid в соответствующем файле.

Поскольку том изменился, uuid тома также изменился. Необходимо заменить uuid в загрузочных файлах. Следующие два файла должны быть изменены:

/boot/grub2/grub.cfg #or /boot/grub/grub.cfg
/etc/fstab

Итак, что нужно изменить? Во-первых, нужно перечислить uuid соответствующего тома через blkid:

[root@ip-172-31-16-92 boot]# sudo blkid
/dev/nvme0n1p2: LABEL="/" UUID="add39d87-732e-4e76-9ad7-40a00dbb04e5" TYPE="xfs" PARTLABEL="Linux" PARTUUID="47de1259-f7c2-470b-b49b-5e054f378a95"
/dev/nvme1n1p2: UUID="566a022f-4cda-4a8a-8319-29344c538da9" TYPE="xfs" PARTLABEL="root" PARTUUID="581a7135-b164-4e9a-8ac4-a8a17db65bef"
/dev/nvme0n1: PTUUID="33e98a7e-ccdf-4af7-8a35-da18e704cdd4" PTTYPE="gpt"
/dev/nvme0n1p1: PARTLABEL="BIOS Boot Partition" PARTUUID="430fb5f4-e6d9-4c53-b89f-117c8989b982"
/dev/nvme1n1: PTUUID="0dc70bf8-b8a8-405c-93e1-71c3b8a887c7" PTTYPE="gpt"
/dev/nvme1n1p1: PARTLABEL="bbp" PARTUUID="82075e65-ae7c-4a90-90a1-ea1a82a52f93"

Вы видите, что uuid корневого раздела старого большого тома EBS - add39d87-732e-4e76-9ad7-40a00dbb04e5, а uuid нового малого тома EBS - 566a022f-4cda-4a8a-8319-29344c538da9. Используйте команду sed для его замены:

sed 's/add39d87-732e-4e76-9ad7-40a00dbb04e5/566a022f-4cda-4a8a-8319-29344c538da9/g' /boot/grub2/grub.cfg
sed 's/add39d87-732e-4e76-9ad7-40a00dbb04e5/566a022f-4cda-4a8a-8319-29344c538da9/g' /etc/fstab

Конечно, вы также можете попробовать вручную создать файлы grub, используя grub-install (В некоторых системах это grub2-install) здесь просто для удобства.

4.Отсоедините два тома, затем присоедините новый маленький том.

Затем используйте umount для размонтирования нового тома ebs:

umount /mnt/myroot/ 

Если появится сообщение, что цель занята. Вы можете использовать fuser -mv /mnt/myroot, чтобы увидеть, какой процесс работает в нем. То, что я нашел, это bash, а это значит, что вы должны выйти из этого каталога в bash. Используйте cd, чтобы вернуться в домашний каталог, и снова введите приведенную выше команду для umount.

Затем отсоедините оба тома (сначала остановите экземпляр, конечно), и снова присоедините новый том в качестве корневого устройства, заполнив имя устройства здесь. /dev/xvda, как показано ниже

Затем запустите экземпляр. Если ssh не работает, вы можете использовать следующие методы для отладки:

1. получить системный журнал

2. получить снимок экрана

Ссылка:

1.https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html#InitialSteps

2.https://www.daniloaz.com/en/partitioning-and-resizing-the-ebs-root-volume-of-an-aws-ec2-instance/

3.https://medium.com/@m.yunan.helmy/decrease-the-size-of-ebs-volume-in-your-ec2-instance-ea326e951bce

1
ответ дан 23 April 2021 в 23:59

Теги

Похожие вопросы