Зменшення обсягу обсягу Amazon EBS


25

Я бачив цю відповідь на збільшення обсягів EBS , але хотів би зменшити її.

Зображення сервера Ubuntu за замовчуванням - 15 Гб, тоді як мені дійсно потрібно лише 2 ГБ (я використовую інший об'єм даних). Чи є спосіб зменшити розмір гучності?

Відповіді:


27

У мене було те саме питання, що і у вас, тому я розробив, як це зробити.

По-перше, я зробив це з 32-розрядного амі-Ubuntu, підтримуваного EBS з регіону США-Схід, інші ОС або зображення можуть працювати інакше. Однак я підозрюю, що ви повинні бути в порядку, поки ви використовуєте файлову систему ext *. Це може працювати в інших файлових системах, але вам доведеться розібратися, як змінити їх розмір самостійно.

Основні дії:

  1. Додайте два томи до запущеного екземпляра, перший заснований на знімку, який ви хочете зменшити, а другий - порожній том, що має новий розмір, до якого ви хочете зменшити.

  2. Перевірте файлову систему першого тома та виправте всі помилки.

  3. Скоротіть файлову систему на першому томі, щоб вона була лише такою великою, скільки потрібно для зберігання даних.

  4. Скопіюйте файлову систему з першого тома в другий.

  5. Розгорніть файлову систему на другому томі до максимального розміру.

  6. Переконайтесь, що все виглядає добре, перевіривши другий том на помилки.

  7. Зробіть знімок другого тома.

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

Спочатку потрібно отримати деяку інформацію з амі, яку ви хочете зменшити. Зокрема, вам потрібні ідентифікатор ядра та ідентифікатор ramdisk, якщо такі є (зображення, яке я скоротив, не мав ramdisk). Вся ця інформація повинна бути доступна на консолі управління aws, у вікні AMI.

Ідентифікатор ядра схожий на kia-xxxxxxxx, а ідентифікатор знімка схожий на snap-xxxxxxxx, а ідентифікатори ramdisk схожі на RIA-xxxxxxxx.

Далі запустіть екземпляр Linux. Я запустив екземпляр Ubuntu. Якщо ви хочете, ви можете використовувати примірник t1.micro. Не потрібно багато сил для виконання наступних кроків.

Після роботи машини приєднайте записаний вами знімок із першого кроку. У моєму випадку я додав його до / dev / sdf

Потім створіть новий том, маючи потрібний розмір. У моєму випадку я створив об'єм об'ємом 5 ГБ, оскільки саме на такий розмір я хотів його зменшити. Не створюйте цей новий том із знімка. Нам потрібен новий порожній том. Потім додайте його до запущеного екземпляра, у моєму випадку я додав його як / dev / sdg

Далі, ssh в машину, але не монтуйте додані томи.

У цей момент я помилився на стороні параної, і я вирішив перевірити файлову систему на великий обсяг, просто щоб переконатися у відсутності помилок. Якщо ви впевнені, що таких немає, ви можете пропустити цей крок:

$ sudo e2fsck -f /dev/sdf

Далі я змінив розмір файлової системи на великому обсязі, щоб вона була лише такою великою, як дані на диску:

$ sudo resize2fs -M -p /dev/sdf

-M скорочує його, і -p друкує прогрес.

Resize2fs повинен повідомити, наскільки велика файлова система shrunkin. У моєму випадку вона дала мені розмір у 4К блоках.

Тепер ми копіюємо файлову систему shrunkin на новий диск. Ми збираємось скопіювати дані в 16МБ шматочки, тому нам потрібно розібратися, скільки 16МБ фрагментів нам потрібно скопіювати. Ось тут зручний розмір файлової системи.

У моєму випадку скорочена файлова система становила трохи більше 1 ГБ, тому що я був встановлений багато інших програм на базовій системі Ubuntu перед тим, як зробити знімок. Я, мабуть, міг би відійти, просто скопіювавши розмір файлової системи, округленої до найближчих 16 Мб, але я хотів відтворити її безпечно.

Отже, 128 разів 16МБ шматки = 2 Гб:

$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128

Я скопіював у блоки розміром 16 Мб, оскільки за допомогою EBS ви платите за кожне читання та запис, тому я хотів максимально зменшити їх кількість. Я не знаю, чи робив це так, але, мабуть, це не зашкодило.

Потім нам потрібно змінити розмір файлової системи, яку ми щойно скопіювали, до нового тома, щоб вона використовувала весь наявний простір у томі.

$ sudo resize2fs -p /dev/sdg

Нарешті, перевірте це, щоб переконатися, що все добре:

$ sudo e2fsck -f /dev/sdg

Це все, що нам потрібно зробити в цій машині, хоча це не завадило змонтувати новий том, як тест. Однак цей крок майже напевно необов’язковий, оскільки e2fsck мав би виникнути будь-яких проблем.

Зараз нам потрібно зробити знімок нового тома та створити на його основі AMI. Ми закінчили роботу з машиною, тож ви можете її припинити, якщо хочете.

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

Для останнього кроку потрібні інструменти командного рядка ec2.

Редагувати:

Оскільки ця відповідь була розміщена, консоль AWS дозволяє вам просто клацнути правою кнопкою миші знімок та вибрати Створити зображення зі знімка. Вам все одно потрібно буде вибрати відповідний ідентифікатор ядра. Якщо вона не відображається у списку, переконайтесь, що ви обрали відповідну архітектуру.

Ми використовуємо додаток-реєстратор ec2, щоб зареєструвати AMI на основі щойно зробленого знімка, тому запишіть значення snap-xxxxxxxx з зробленого вами знімка.

Потім слід використовувати команду типу:

ec2-register -C cert.pem -K sk.pem -n The_Name_of_Your_New_Image
-d Your_Description_of_This_New_AMI --kernel aki-xxxxxxxx
-b "/dev/sda1=snap-xxxxxxxx" --root-device-name /dev/sda1

Звичайно, потрібно замінити ідентифікатор ядра на той, який ви записали на початку, а ідентифікатор знімка на той, який ви створили на попередньому кроці. Вам також потрібно вказати на свій секретний ключ (званий sk.pem) вище та ваш x509 cert (званий cert.pem). Звичайно, ви можете вибрати все, що завгодно для назви та опису.

Сподіваюся, це допомагає.


Дякую, що допомогло! Для великих об'ємів (наприклад, 1 ТБ) ця процедура займає багато часу в мікроекземплярі. Я бачив no-fsck, засноване на rsync копіюванні томів (наприклад, тут ubuntuforums.org/showpost.php?p=9866025&postcount=27 ), але підхід на основі дд вважається набагато надійнішим навіть для некористуючих томів.
хронос

Перша команда sudo e2fsck -f /dev/sdfможе бути необхідним кроком перед тим, як змінити розмір (був у моєму конкретному випадку, Amazon Linux AMI).
notacouch

1
Повинно бути очевидним , але не забудьте зробити файлову систему на обсяг (/ Facepalm) згідно AWS документації, sudo mkfs -t ext4 /dev/sdg.
notacouch

1

Так, я теж це задумався. Наступний підручник є надмірним, але я думаю, що він містить необхідні інструменти: http://www.linuxconfig.org/Howto_CREATE_BUNDLE_UPLOAD_and_ACCESS_custom_Debian_AMI_using_ubuntu

Замість того, щоб встановити на новий образ диска, як зазначено вище, слід мати можливість запустити великий AMI, створити нову EBS, приєднати EBS до запущеного екземпляра та скопіювати запущений AMI на новий EBS. Нарешті, зареєструйте новий EBS як AMI.

Погляньте на цю публікацію в блозі, щоб дізнатися більше, особливо коментар freremark: http://alestic.com/2010/01/public-ebs-boot-amis-for-ubuntu-on-amazon-ec2

Нарешті, euca2ools здається чудовою заміною ec2-ami-інструментів - euca2ools включає фактичні набори! Вони мають усі ті ж назви, що й команди ec2- *, лише з префіксом euca-. http://open.eucalyptus.com/wiki/Euca2oolsUsing


0

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

У консолі AWS

 1. Stop the source EC2 instance
 2. Create a snapshot of the volume you want to shrink
 3. Use the snapshot to create a new 'source' volume
 4. Created a new volume with smaller size (made sure it was big enough for the data on source)
 5. Attached both volumes to any EC2 instance (mine were /dev/sdf = source & /dev/sdg = target)
 6. Start the EC2 instance

На екземпляр EC2

 7. sudo su -   (everything from here is run as root)
 8. mkdir /source /target
 9. mount -t ext4 /dev/sdf /source
 10. mkfs.ext4 /dev/sdg
 11. mount -t ext4 /dev/sdg /target
 12. rsync -aHAXxSP /source/ /target 
     ** notice that there is no trailing '/' after target if 
       you put one there your data will be copied to 
       /target/source and you will have to move it up a directory
 13. cat /boot/grub/grub.conf  (indicated that grub is using root=LABEL=/)
 14. cat /source/etc/fstab (indicated that fstab was also using LABEL=/)
 15. e2label /dev/sdg /
 16. umount /source
 17. umount /target

Знову в консолі AWS

 18. Stop the instance
 19. Detach ALL volumes from the instance
 20. Attach the 'target' volume to the instance using /dev/sda1 as the device
 21. Start the instance

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

У консолі AWS

 1. Create a new EC2 instance with the right sized root volume
 2. Stop the new instance
 3. Detach the /dev/sda1 volume from the new instance
    ** used the 'source' volume from before & the new volume we just detached
 4. Attached both volumes to the original EC2 instance (/dev/sdf & /dev/sdg)
 5. Start the instance with the attached volumes

На екземпляр EC2

 1. sudo su - 
 2. mkdir /source /target (only need to do this if you don't already have these directories)
 3. mount -t ext4 /dev/sdf /source
 4. mount -t ext4 /dev/sdg /target (no need to create a file system because it is already there)
 5. rsync -aHAXxSP /source/ /target 
 6. umount /source
 7. umount /target

Знову в консолі AWS

 1. Stop the instance
 2. Detach the 'source' and 'target' volumes from instance
 3. Attach the 'target' volume to the instance from step 1 using /dev/sda1 as the device
 4. Start the instance
 5. ** we use an elastic IP so we just reassigned the IP to the new instance

Сподіваюся, що це комусь допоможе


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