Есть EC2 Instance с именем "Galaxy", и с EBS диском размером 250Gb и файловой системой ext4, нужно его урезать до 100Gb.
1. Создаем временный инстанс (В той же Availability zone, что и существующий инстанс), для копирования данных. Размер его диска нам не важен, к этому инстансу мы будем монтировать существующий EBS, и новый, уменьшенного размера.
2. Останавливаем инстанс с EBS диском, который собираемся уменьшать.
3. Переходим в Volumes, и нужному EBS диску делаем "Detach Volume". Так же после "Detach Volume", желательно сделать снапшот диска.
Его статус должен изменится на "available"
4. Создаем новый EBS диск нужного нам размера, в данном случае 100Gb. Диск должен быть в той же Availability zone, в которой находится текущий EBS диск и временный инстанс.
Теперь у нас 2 EBS диска в статусе "available"
5. Делаем "Attach Volume" старого EBS диска и нового к временному инстансу.
Они теперь в статусе "in-use"
6. Подключаемся через SSH на временный инстанс.
7. Проверяем наши диски, и так же по их размеру определяемся с именами. 2 EBS диска, с которого и на который мы будем копировать, не должны быть примонтированы.
sudo fdisk -l Disk /dev/xvda: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe6e324f2 Device Boot Start End Sectors Size Id Type /dev/xvda1 2048 4095 2048 1M 83 Linux /dev/xvda2 * 4096 20971486 20967391 10G 83 Linux Disk /dev/xvdf: 250 GiB, 268435456000 bytes, 524288000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xeeaf5908 Device Boot Start End Sectors Size Id Type /dev/xvdf1 * 2048 524287966 524285919 250G 83 Linux Disk /dev/xvdg: 100 GiB, 107374182400 bytes, 209715200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Внимательно смотрим имена старого и нового дисков
/dev/xvdf — Старый EBS диск, который будем уменьшать
/dev/xvdg — Новый EBS диск, на который будем копировать данные
8. Создадим директории для монтирования:
sudo mkdir /source /target
9. Создадим раздел на новом диске:
sudo fdisk /dev/xvdg n (create new partition) All option by default a (add boot) w
10. Создаем файловую систему ext4 на новом разделе:
sudo mkfs.ext4 /dev/xvdg1
11. Монтируем созданный раздел:
sudo mount -t ext4 /dev/xvdg1 /target
12. Обязательный шаг, так как без него не будет монтироваться новый раздел через fstab
sudo e2label /dev/xvdg1 "cloudimg-rootfs"
13. Монтируем раздел, с которого будем копировать данные:
sudo mount -t ext4 /dev/xvdf1 /source
14. Копируем данные со старого раздела на новый:
sudo rsync -avHAX /source/ /target
15. Переустанавливаем Grub на новом разделе:
sudo grub-install --boot-directory=/target/boot /dev/xvdg
16. Так же проверим, что UUID нового диска совпадают с UUID в файле "/target/boot/grub/grub.cfg". UUID можно посмотреть следующей командой:
sudo blkid
17. Размонтируем EBS диски:
sudo umount /source sudo umount /target
Теперь отмонтируем новый EBS диск (100Gb) от временного инстанса и монтируем к инстансу "Galaxy" как "/dev/sda1"
Теперь можно запускать инстанс "Galaxy" и проверять, если все хорошо, то временный инстанс и старый EBS диск можно удалять.
Попробовал таким образом изменить количество inodes на диске. Обнаружил опечатку — в grub-install аргументах надо —boot-directory вместо —root-directory В конце перед Attach надо сделать Detach (очевидно, но лучше указать все шаги) А моя проблема такая — диск нормально не загрузился. Причина мне не ясна и как исследовать непонятно, так как делал на AWS это в первый раз. А внешние признаки такие: загрузка пошла, сначала инстанс показал, что успешно загрузился (через некоторое время), но по ssh на него доступа не было (сервис на порту не отвечал от слова совсем — не слушал порт). Еще через некоторое время инстанс перешел снова в… Подробнее »
Привет!
По ключам в моем примере все корректно, так как все манипуляции проводились на Ubuntu с AWS Market’а, посмотрел на CentOS 7, там и правда только "—boot-directory" доступен, нужно пометку добавить, спасибо.
А что говорит "Actions -> Instance Settings -> Get instance screenshot" или "Actions -> Instance Settings -> Get System Log"?
Так же проверь, правильный ли путь используется для boot раздела, так как если ты просто поменял ключ, а значения оставил те же, у тебя boot директория установилась по следующему пути:
"/grub2" согласно хелпу "grub-install":
—boot-directory=DIR install GRUB images under the directory DIR/grub2 instead of the boot/grub2 directory
Удачи!
UDP. Столкнулся с такой же проблемой, не запустился инстанс по причине того, что в настройках граба остался старый UUID, после замены sed’ом все запустилось. Обновил статью.
Добрый день. у меня ругается
grub-install: error: cannot find EFI directory.