Google Compute Engine - сжатие дисков
У меня 5 ТБ HD, и я хочу уменьшить его до 2 ТБ.
Я использую Google Compute Engine PaaS.
Как я могу это сделать?
Можете ли вы предложить какие-либо инструменты для выполнения этого вручную, если это не может быть решено инструментами Google?
2 ответа
Если диск не загрузочный, вы можете сделать следующее:
- добавьте новый диск нужного размера и отформатируйте его.
- смонтировать новый диск
- cp -r --preserve=all /mnt/disk1/. / Шоссе /disk2/
- отредактируйте /etc/fstab, чтобы смонтировать новый диск вместо старого
Если у вас есть стандартный диск и вы хотите сократить время работы cp. Сначала вы можете создать новый ssd-диск из моментального снимка и скопировать его на 2T ssd-диск. Затем сделайте снимок с диска 2T и создайте новый стандартный диск 2T.
Если ваш диск является загрузочным, вы можете использовать такой инструмент, как fsarchiver:
- Создайте архив с загрузочного диска.
fsarchiver savefs /mnt/backup/boot_disk.fsa /dev/sda
- Восстановите архив на новом диске
fsarchiver restfs /mnt/backup/boot_disk.fsa id=0,dest=/dev/sdb
Мой ответ очень специфичен для экземпляров Centos 7 на платформе Google Compute Engine. Некоторая информация, вероятно, может быть использована из этого для других типов ОС, но это выходит за рамки моего опыта.
Мой вариант использования заключался в уменьшении корневого устройства 400G, подключенного к устаревшему экземпляру Centos7, до 20G. К сожалению, на корневом устройстве был только один раздел (без раздела EFI), поэтому, когда я попробовалfsarchiver
, это не удалось с ошибкой оnot able to mount /dev/sdb1 as vfat
(sdb1
былXFS
корневой раздел моего целевого экземпляра, смонтированного на более сжатом экземпляре).
Процесс, который в конечном итоге сработал для меня, выглядит следующим образом:
- Создайте новый экземпляр клона (это будет сжатый диск).
- Создайте временный экземпляр (здесь происходят все действия командной строки, выполняемые как
root
). - Завершите работу и отредактируйте его, чтобы отсоединить корневой диск (обычно он называется так же, как имя экземпляра, НО допустим «target-1-root»).
- Подключите как дополнительный диск к . Это становится
/dev/sdb
. - Подключите новый диск размером на 10 ГБ, превышающим дисковое пространство, необходимое для нового загрузочного диска (в моем случае базовый 10 ГБ + 10 ГБ дополнительно), с именем . - это становится
/dev/sdc
- Инициализируйте таблицу разделов, аналогичную (MBR или GPT, можно увидеть через
fsdisk -l /dev/sdb
и создано с использованием ) - Создайте корневой раздел для (с помощью fdisk) и отформатируйте его так, чтобы он соответствовал (для меня xfs), используя
mkfs.xfs /dev/sdc1
(или похожиеmkfs.$FSTYPE
) - Создайте точки монтирования:
mkdir -p /media/old /media/new
-
mount /dev/sdc1 /media/old
(target-1-root
) -
mount /dev/sdb1 /media/new
() - Скопируйте данные:
rsync -a /media/old/ /media/new/
- Сохраните начальные сектора (начало до начала первого раздела):
- Проверить:
fdisk -l /dev/sdc
- для меня это был 2048 год:Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x0009c1de Device Boot Start End Blocks Id System /dev/sdc1 2048 41943039 20970496 83 Linux
- Размеры двух дисков должны совпадать (предварительно проверьте шаг инициализации раздела)
- Проверить:
- перезапишите загрузочный сектор /dev/sdc загрузочным сектором старого диска, используя
dd if=/dev/sdb of=/dev/sdc bs=512 count=2048
- это информация взята изfdisk -l
выше. - Верните перезаписанную таблицу разделов к правильным значениям, используя
fdisk /dev/sdc
(у fdisk есть встроенная справка, используйте ее)- удалить плохой раздел слишком большого размера
- создайте новый раздел с правильными данными, как указано выше.
- наконец-то сделал его загрузочным
- Проверьте UUID нового корневого раздела (
lsblk -o name,uuid
) и обновите его по мере необходимости:-
/media/new/etc/fstab
-
/media/new/boot/grub2/grub.cfg
-
-
umount /media/new
- Отсоединиться от
shrinker-1
- Отредактируйте и прикрепите
target-1-newroot
в качестве корневого устройства. Также включите последовательную консоль для устранения сбоев загрузки, если таковые имеются. - Загрузитесь
target-1
, войдите в систему и проверьте, что все идет так, как ожидалось.
И последнее, но не менее важное: рассмотрите возможность отправки мнеRasPi CM4-${ANY_MMC}-2GB-Wifi
используя сбережения :смех: .