Я бачив цю відповідь на збільшення обсягів EBS , але хотів би зменшити її.
Зображення сервера Ubuntu за замовчуванням - 15 Гб, тоді як мені дійсно потрібно лише 2 ГБ (я використовую інший об'єм даних). Чи є спосіб зменшити розмір гучності?
Я бачив цю відповідь на збільшення обсягів EBS , але хотів би зменшити її.
Зображення сервера Ubuntu за замовчуванням - 15 Гб, тоді як мені дійсно потрібно лише 2 ГБ (я використовую інший об'єм даних). Чи є спосіб зменшити розмір гучності?
Відповіді:
У мене було те саме питання, що і у вас, тому я розробив, як це зробити.
По-перше, я зробив це з 32-розрядного амі-Ubuntu, підтримуваного EBS з регіону США-Схід, інші ОС або зображення можуть працювати інакше. Однак я підозрюю, що ви повинні бути в порядку, поки ви використовуєте файлову систему ext *. Це може працювати в інших файлових системах, але вам доведеться розібратися, як змінити їх розмір самостійно.
Основні дії:
Додайте два томи до запущеного екземпляра, перший заснований на знімку, який ви хочете зменшити, а другий - порожній том, що має новий розмір, до якого ви хочете зменшити.
Перевірте файлову систему першого тома та виправте всі помилки.
Скоротіть файлову систему на першому томі, щоб вона була лише такою великою, скільки потрібно для зберігання даних.
Скопіюйте файлову систему з першого тома в другий.
Розгорніть файлову систему на другому томі до максимального розміру.
Переконайтесь, що все виглядає добре, перевіривши другий том на помилки.
Зробіть знімок другого тома.
Створіть машинне зображення на основі знімка другого тома, який ви тільки що взяли.
Спочатку потрібно отримати деяку інформацію з амі, яку ви хочете зменшити. Зокрема, вам потрібні ідентифікатор ядра та ідентифікатор 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). Звичайно, ви можете вибрати все, що завгодно для назви та опису.
Сподіваюся, це допомагає.
sudo e2fsck -f /dev/sdf
може бути необхідним кроком перед тим, як змінити розмір (був у моєму конкретному випадку, Amazon Linux AMI).
sudo mkfs -t ext4 /dev/sdg
.
Так, я теж це задумався. Наступний підручник є надмірним, але я думаю, що він містить необхідні інструменти: 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
Я хотів зменшити розмір обсягу, який використовується загальним екземпляром 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
Сподіваюся, що це комусь допоможе