默认图像有 10GB,但我需要更多(大约 30GB)。如果我使用其中一个默认映像创建 30GB 的磁盘,则可用空间为 10GB,而不是 30GB。我知道我可以使用 debootstrap 之类的工具安装发行版,但这似乎不必要地复杂。还有其他方法吗?
9 回答
这可能是撰写本文时的一项新功能,但请访问
- https://console.cloud.google.com/compute/
- 单击左侧菜单中的磁盘
- 在加载的主窗格中,单击您的实例
- 在加载的上部水平菜单中,单击编辑
- 以前的磁盘大小将变为可编辑。将磁盘大小更改为所需的大小。
- 重新启动您的实例(sudo restart -r now)。重新启动时, df -h 列出您的新磁盘大小。
因此,回答您的问题的一种方法是使用默认磁盘创建一个实例,然后通过 Compute Engine GUI 简单地调整它的大小。
您可以创建大于 10GB 的启动磁盘,但您需要重新分区,因为默认情况下,提供的 VM 映像会扩展为 10GB,因此您需要使用这些说明并运行fdisk
、重新启动,然后运行resize2fs
以扩展可用空间为磁盘的完整大小。您可以使用启动脚本将其自动化,使其作为实例创建的一部分运行。
编辑 1:我已经开源了我的脚本,这些脚本会在启动时使用startup-script
元数据自动为您执行此操作。您可以在我专门为这个问题创建的GitHub 存储库中找到示例代码,该代码已被验证可与 CentOS 和 Debian 一起使用。有关fdisk.sh
重新分区和gcloud.sh
部署命令,请参阅。
您可以轻松地做到这一点,而无需手动调整磁盘大小/分区/格式化磁盘或 StackOverflow 上所有其他答案中引入的任何并发症。您真正需要做的就是:
- 根据要使用的映像单独创建具有所需容量的新磁盘。
- 选择该磁盘作为您正在创建的实例的引导磁盘。
以下是如何使用 Google Developers Console 执行此操作的详细说明:
首先,您必须创建一个新的空白磁盘用作新实例的根分区。为此,请转到Compute / Compute Engine / Disks并单击“ New disk ”。请记住确保磁盘与您要启动的实例位于同一区域,否则您将无法使用它。接下来,将磁盘的“ Source Type ”更改为“ Image ”。然后选择适当的图像并指定所需的磁盘大小并点击Create。
现在您已准备好启动磁盘,请创建新实例(Compute / Compute Engine / VM Instances并单击“ New instance ”)。在新的实例表单中,将Boot Source更改为Existing Disk并选择您刚刚创建的磁盘。
gcloud
使用几个命令来做同样的事情应该相对简单。
比直接编辑分区更安全且不需要维护自己的图像的方法是 dracut 的 growroot 模块和 cloud-init。
我已经在 Google Compute、AWS 和 Azure 上将它与 CentOS 6 和 7 一起使用。
## 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
分区将在下次启动时自动调整大小。
笔记:
- 这是内置在 Ubuntu 中的,这就是为什么您在那里看不到问题的原因。
- 分区大小问题出现在 RedHat 和 CentOS 的大多数预构建映像中,而不仅仅是 Google Cloud。这种方法应该适用于任何地方。
首先使用现有图像从 UI 创建一个磁盘。现在在创建实例时使用此图像。
考虑向您的实例添加额外的持久性磁盘,该磁盘将保存用户应用程序数据。以后可能会很有用。因为您的应用程序数据可能会以不同的方式发展和扩展,当然也与所选的操作系统无关。例如,您可以独立制作该附加光盘的快照。有了它,您就可以在云中获得数据的完全灵活性,并且您不需要将操作系统与您的数据一起使用;) PS 当然,新的快照 Desics 可以更大。请参阅上面的说明
当您创建实例并指定比默认值更大的根磁盘大小时,您的实例仍然会以 10GB 的分区表和文件系统大小结束。
为了使用额外的空间,您需要扩展 /dev/sda1 分区,然后调整其上的文件系统的大小。
要调整 /dev/sda1 分区的大小(这是危险的,只能在全新的 CLEAN 实例中完成):
echo "16," | sudo sfdisk /dev/sda
sudo reboot
要调整根文件系统的大小:
sudo resize2fs /dev/sda1
你应该很好去追求这个。
我已将以下内容添加到实例的“启动脚本”元数据中,以便在前两次启动时调整大小:
# 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
虚拟硬盘允许的最大大小并重新启动。下次启动时,检查文件系统大小并将大小调整为分区的最大大小。一旦执行了这两个操作,它将在后续重新启动时被跳过。
以下是我调整 Google Cloud 计算实例大小的步骤。仅仅创建一个更大磁盘的新实例是不够的,您还需要修改分区并扩展文件系统,如下所示:
- 在原始实例上创建新的磁盘快照
- 基于具有新所需大小的快照创建具有引导磁盘的新计算实例
- SSH 到您的新计算实例
- 以 root 身份使用 fdisk 调整分区大小
- 作为 root 使用 resize2fs 扩展根分区
最后两个步骤在这里详细描述:
https://cloud.google.com/compute/docs/disks/persistent-disks#manualrepartition
然后,您需要根据需要切换到新实例,或者您可以使用新创建的磁盘映像重新启动原始实例。