Як зменшити обсяг кореня AWS EBS?


16

Збільшити екземпляр EC2 легко як дихання (наприклад, створити AMI, запустити екземпляр з нього та змінити розмір пам’яті).

Але зменшити його стає складніше. Я хотів би зменшити розмір кореня тома Elastic Block Store (EBS) Amazon Web Services (AWS) EC2. У мережі є пари старих процедур високого рівня. Більш детальна версія, яку я знайшов, - це однорічна відповідь на питання StackOverflow: як я можу зменшити об'єм ємності , тому дії мають досить високий рівень:

Створіть новий том 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, якщо = / dev / xvda1 ibs = 16M = = dev / xvdg obs = 16M count = 80

Змініть розмір файлової системи на новому (меншому) обсязі EBS: (наприклад) resize2fs -p / dev / xvdg

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

Вилучіть новий кореневий об'єм EBS та приєднайте його до оригінального примірника

Я не можу знайти детальне покрокове рішення "як зробити".

Мій кореневий об'єм EBS приєднаний до екземпляра HVM Ubuntu.

Будь-яка допомога буде дуже вдячна.


Це виглядає як досить гарне покрокове рішення "як".
ceejayoz

dd - скопіюйте диск на диск dd, якщо = / dev / xvdf of = / dev / xvdh bs = 4k count = 227613 e2fsck -f / dev / xvdh1 resize2fs -p / dev / xvdh1
sirkubax

Відповіді:


6

На консолі 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, але не пройде перевірку з'єднання.


9
Я кілька разів пробігав ці кроки (Ubuntu 14.04), і кожен раз, коли я додаю новий том, екземпляр просто зупиняється. Хто-небудь ще відчуває цю проблему? Це ламає мій мозок!
thiesdiggity

2
Ви не єдиний. Я спробував це та інші рішення, і, як і ваша хороша самості, мій екземпляр також закривається.
blairmeister

1
@blairmeister У мене був той самий випуск, але вдалося змусити його працювати! Подивіться на мою відповідь нижче, якщо ви все ще застрягли :)
Рубен Серрате

мій e2label є cloudimg-rootfs ... слідуючи всім цим крокам, я можу підтвердити, що Ubuntu 14.04 не працює
NineCattoRules

1
Я відповідаю за цю відповідь, оскільки вона не охоплює достатньо випадків використання для обсягу (наприклад, як завантажувальний том) для захисту користувачів від ненавмисного пошкодження.
Джессі Адельман

6

Жодне з інших рішень не буде працювати, якщо гучність використовується як кореневий (завантажувальний) пристрій.

У новоствореного диска відсутній завантажувальний розділ, тому для того, щоб екземпляр міг використовувати його в якості кореневого тома, йому потрібно буде встановити GRUB та встановити деякі прапори правильно.

Моє (на сьогоднішній день працююче ) рішення для зменшення обсягу кореня:

Передумови: У нас є екземпляр A, об'єм кореня якого ми хочемо скоротити. Назвемо цей том VA. Ми хочемо зменшити VA з 30 Гб, скажімо, 10 Гб

  1. Створіть новий екземпляр ec2, B, з тією ж ОС, що і екземпляр A. У якості сховища виберіть том, аналогічний типу VA, але розміром 10 Гб. (або будь-який розмір цілі). Отже, тепер у нас є екземпляр B, який використовує цей новий том (назвемо його VB) як кореневий том.
  2. Після запуску нового екземпляра (B). Зупиніть його і від'єднайте об'єм кореня (VB).

ПРИМІТКА. Наступні кроки здебільшого зроблені з рішення @bill:

  1. Зупиніть екземпляр, який ви хочете змінити розмір (A).

  2. Створіть знімок обсягу VA, а потім створіть об'єм "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) Створіть новий розділ, ввівши: 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. Встановити VASNAP на / джерело:

mount -t ext4 /dev/xvdg1 /source

  1. Скопіюйте вміст:

rsync -vaxSHAX /source/ /target

Примітка. Немає "/" наступного "/ цільового". Також може бути кілька помилок щодо символьних посилань та attrs, але зміна розміру все-таки була успішною

  1. Umount VB:

umount /target

  1. Ще в консолі AWS: Dettach VB від екземпляра C, а також віддаляємо VA від A.

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

  3. Завантажувальний примірник A, тепер його кореневий пристрій становить 10 Гб :)

  4. Видаліть і екземпляри B і C, а також усі томи, крім VB, що є кореневим томом екземпляра A.


Яка ваша ОС?
NineCattoRules

@NineCattoRules Amazon Linux
Ruben Serrate

Я спробував на Ubuntu 14.04, і це не працює
NineCattoRules

@NineCattoRules Так ... я можу підтвердити, що це працює для Amazon Linux, довелося це робити недавно.
Рубен Серрат

1
Чи не слід ми додавати гучність на кроці 17 в /dev/sda1інцедію /dev/xvda@RubenSerrate?
альпер

2

Наступні кроки працювали для мене

Крок 1. Створіть знімок тома кореня ebs та створіть новий том із знімка (назвемо цей том-копією)

Крок 2. Створіть новий екземпляр з томом кореня ebs з потрібним розміром. (Давайте назвемо цей розмір за обсягом) Цей том ebs матиме правильний розділ для завантаження. (Створення нового обсягу ebs з нуля не працювало для мене)

Крок 3. Приєднайте розмір гучності та копію тома до екземпляра.

Крок 4. Відформатуйте розмір гучності.

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 до instance / dev / sda1


1
Поєднання моєї відповіді @ruben із оновленням UUID на груб - це те, що було для мене.
Джонатан Мейм

Невелика примітка, оскільки я лише витрачав деякий час: Запуск blkidбез sudoповернення кешованих результатів без їх перевірки. Таким чином, схоже, UUID не змінився.
Ахіл Наір

0

Ось альтернативний підхід;

Приєднайте та встановіть старий том EBS на запущеному екземплярі EC2. Якщо ви хочете скопіювати об'єм завантаження, найкраще зробити це в іншому екземплярі, зі старим томом, встановленим як дані, а не з томом, який використовується як жива система.

Створіть новий об'єм EBS потрібного розміру.

Приєднайте новий том до екземпляра та (ретельно) відформатуйте на ньому нову файлову систему (наприклад, використовуючи mkfs). Монтуйте його.

Скопіюйте вміст старої файлової системи зі старого тома в новий том:

rsync -vaxSHAX /oldvol/ /newvol/

Відключіть новий том і від'єднайте його від екземпляра.

Якщо ви копіювали кореневу файлову систему, то:

Створіть EBS-знімок нового тома.

Зареєструйте знімок як новий AMI.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.