Miałem to samo pytanie co ty, więc wymyśliłem, jak to zrobić.
Po pierwsze, zrobiłem to z 32-bitowego ami wspieranego przez EBS Ubuntu z regionu USA-Wschód, inne systemy operacyjne lub obrazy mogą działać inaczej. Podejrzewam jednak, że powinieneś być w porządku, o ile używasz systemu plików ext *. Może działać na innych systemach plików, ale musisz dowiedzieć się, jak samodzielnie zmienić ich rozmiar.
Kroki są w zasadzie:
Dołącz dwa woluminy do działającej instancji, pierwszy oparty na migawce, którą chcesz zmniejszyć, a drugi pusty wolumin o nowym rozmiarze, do którego chcesz się zmniejszyć.
Sprawdź system plików pierwszego woluminu i napraw wszelkie błędy.
Zmniejsz system plików na pierwszym woluminie, aby był tak duży, jak to konieczne, aby pomieścić dane.
Skopiuj system plików z pierwszego woluminu do drugiego.
Rozwiń system plików na drugim woluminie do jego maksymalnego rozmiaru.
Upewnij się, że wszystko wygląda dobrze, sprawdzając drugi wolumin pod kątem błędów.
Zrób migawkę drugiego tomu.
Utwórz obraz maszyny na podstawie migawki drugiego właśnie pobranego woluminu.
Najpierw musisz uzyskać informacje z ami, które chcesz zmniejszyć. W szczególności potrzebujesz identyfikatora jądra i identyfikatora ramdysku, jeśli taki istnieje (obraz, który zmniejszyłem, nie miał ramdysku). Wszystkie te informacje powinny być dostępne z konsoli zarządzania aws, w oknie AMI.
Identyfikator jądra wygląda jak kia-xxxxxxxx, a identyfikator migawki wygląda jak snap-xxxxxxxx, a identyfikatory ramdysku wyglądają jak RIA-xxxxxxxx.
Następnie uruchom instancję Linuksa. Uruchomiłem instancję Ubuntu. Jeśli chcesz, możesz użyć instancji t1.micro. Wykonanie tych kolejnych kroków nie wymaga dużej mocy.
Po uruchomieniu komputera dołącz migawkę zapisaną w pierwszym kroku. W moim przypadku załączyłem go do / dev / sdf
Następnie utwórz nowy wolumin o żądanym rozmiarze. W moim przypadku utworzyłem wolumin 5 GB, ponieważ chciałem go zmniejszyć. Nie twórz tego nowego woluminu z migawki. Potrzebujemy nowego pustego woluminu. Następnie dołącz go do działającej instancji, w moim przypadku podłączyłem go jako / dev / sdg
Następnie ssh do komputera, ale nie montuj dołączonych woluminów.
W tym momencie popełniłem błąd po stronie paranoi i zdecydowałem się sprawdzić system plików na dużym woluminie, aby upewnić się, że nie ma błędów. Jeśli masz pewność, że ich nie ma, możesz pominąć ten krok:
$ sudo e2fsck -f /dev/sdf
Następnie zmieniłem rozmiar systemu plików na dużym woluminie, tak aby był on tak duży jak dane na dysku:
$ sudo resize2fs -M -p /dev/sdf
-M zmniejsza go, a -p drukuje postęp.
Resize2fs powinien powiedzieć ci, jak duży jest skurczony system plików. W moim przypadku dał mi rozmiar w blokach 4K.
Teraz kopiujemy skurczony system plików na nowy dysk. Skopiujemy dane w kawałkach 16 MB, więc musimy dowiedzieć się, ile kawałków 16 MB musimy skopiować. W tym miejscu przydatny jest ten zmniejszony rozmiar systemu plików.
W moim przypadku zmniejszony system plików miał nieco ponad 1 GB, ponieważ przed zrobieniem migawki zainstalowałem wiele innych programów w podstawowym systemie Ubuntu. Prawdopodobnie mogłem uniknąć kopiowania rozmiaru systemu plików w zaokrągleniu do najbliższych 16 MB, ale chciałem grać bezpiecznie.
Zatem 128 razy 16 MB fragmentów = 2 GB:
$ sudo dd if=/dev/sdf ibs=16M of=/dev/sdg obs=16M count=128
Skopiowałem w blokach 16 MB, ponieważ w EBS płacisz za każdy odczyt i zapis, więc chciałem zminimalizować ich liczbę tak bardzo, jak to możliwe. Nie wiem, czy zrobił to w ten sposób, ale prawdopodobnie nie zaszkodziło.
Następnie musimy zmienić rozmiar systemu plików, który właśnie skopiowaliśmy na nowy wolumin, aby wykorzystał całą dostępną przestrzeń na woluminie.
$ sudo resize2fs -p /dev/sdg
Na koniec sprawdź, czy wszystko jest w porządku:
$ sudo e2fsck -f /dev/sdg
To wszystko, co musimy zrobić na tym komputerze, choć zamontowanie nowego woluminu nie zaszkodziło, tak jak w teście. Jednak ten krok jest prawie na pewno opcjonalny, ponieważ e2fsck powinien był wykryć jakiekolwiek problemy.
Musimy teraz wykonać migawkę nowego woluminu i utworzyć na jego podstawie AMI. Skończyliśmy z maszyną, więc możesz ją zakończyć, jeśli chcesz.
Upewnij się, że mały wolumin nie jest zamontowany, jeśli go zamontowałeś, a następnie wykonaj jego migawkę. Ponownie możesz to zrobić w konsoli zarządzania.
Ostatni krok wymaga narzędzi ec2 z linii poleceń.
EDYTOWAĆ:
Ponieważ ta odpowiedź została opublikowana, konsola AWS pozwala po prostu kliknąć migawkę prawym przyciskiem myszy i wybrać opcję Utwórz obraz z migawki. Nadal będziesz musiał wybrać odpowiedni identyfikator jądra. Jeśli nie ma go na liście, upewnij się, że wybrałeś odpowiednią architekturę.
Używamy aplikacji ec2-register do zarejestrowania AMI na podstawie właśnie wykonanej migawki, więc zapisz wartość snap-xxxxxxxx z właśnie wykonanej migawki.
Następnie powinieneś użyć polecenia takiego jak:
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
Oczywiście musisz zastąpić identyfikator jądra tym, który zapisałeś na początku, a ID migawki tym, który utworzyłeś w poprzednim kroku. Musisz także skierować go na swój tajny klucz (zwany sk.pem) powyżej i swój certyfikat x509 (zwany cert.pem). Możesz oczywiście wybrać cokolwiek chcesz dla nazwy i opisu.
Mam nadzieję że to pomoże.