默认镜像容量为10GB,但我需要更多(大约30GB)。如果我使用其中一个默认镜像创建一个30GB的硬盘,则可用空间为10GB,而不是30GB。我知道可以使用像debootstrap这样的工具安装发行版,但那似乎过于复杂。还有其他方法吗?
默认镜像容量为10GB,但我需要更多(大约30GB)。如果我使用其中一个默认镜像创建一个30GB的硬盘,则可用空间为10GB,而不是30GB。我知道可以使用像debootstrap这样的工具安装发行版,但那似乎过于复杂。还有其他方法吗?
截至本文撰写时,这可能是一个新功能,但是请前往以下网址:
因此,回答您的问题的一种方法是创建带有默认磁盘的实例,然后通过Compute Engine GUI调整其大小。
growroot.sh
的脚本,它使用cloud-init
和cloud-initramfs-growroot
来重新分区容器VM映像。我已将其合并到我的gcutil.sh
脚本中,因此使用起来应该很容易。请尝试一下并告诉我它是否适用于您。 - Misha Brukman使用几个gcloud
命令完成相同的操作应该是相对简单的。
## you'll need to be root or use sudo
yum -y install epel-release
yum -y install cloud-init cloud-initramfs-tools dracut-modules-growroot cloud-utils-growpart
rpm -qa kernel | sed -e 's/^kernel-//' | xargs -I {} dracut -f /boot/initramfs-{}.img {}
# reboot for the resize to take affect
下一次启动时,分区将自动调整大小。
注意:
# Resize /dev/sda1 primary disk partition to use full space if not already done
if [[ "$(fdisk -l /dev/sda1 | grep '^Disk.*10\.[0-9] GB' | sed 's/.*, \([0-9]*\) bytes$/\1/')" -eq 10735321600 ]]; then
echo -e "c\nu\nd\nn\np\n1\n\n\nw\n" | fdisk /dev/sda
reboot
elif [[ "$(df -P /dev/sda1 | tail -n +2 | awk '{print $2}')" -le 10319160 ]]; then
resize2fs /dev/sda1
fi
根据您的需求进行调整,并首先进行测试!我只在CentOS 6上进行了测试。此外,如果您想将实例磁盘保持在10 GB(IOPS最佳为200 GB或更大),则不一定有效,因此,除非IO对您无关紧要,否则建议始终创建较大的磁盘。
可以将这个通用思路应用于您的启动脚本:检查磁盘分区大小,以查看它是否大于Google提供的镜像默认值。如果与Google的默认值相同,则运行fdisk
以获取虚拟硬盘允许的最大大小并重新启动。下次启动时,请检查文件系统大小并调整到分区的最大大小。完成这两个操作后,将跳过后续重新启动。
当您创建一个实例并指定比默认值更大的根磁盘大小时,您的实例仍将以10GB的分区表和文件系统大小结束。
为了使用额外的空间,您需要扩展/dev/sda1分区,然后调整其上的文件系统大小。
要调整/dev/sda1分区的大小(这是危险的,应该只在全新干净的实例内完成):
echo "16," | sudo sfdisk /dev/sda
sudo reboot
调整根文件系统大小:
sudo resize2fs /dev/sda1
在这之后,你应该可以开始了。
首先从用户界面创建一个包含现有映像的磁盘。然后在创建实例时使用该映像。
以下是我用来调整 Google Cloud 计算实例大小的步骤。仅仅创建一个更大的磁盘新实例是不够的,您还需要按照以下方式修改分区并扩展文件系统:
最后两个步骤在此处有详细描述:
https://cloud.google.com/compute/docs/disks/persistent-disks#manualrepartition
然后,您需要根据需要切换到新实例,或者可以使用新创建的磁盘映像重新启动原始实例。