如何在Google Compute Engine上扩大启动磁盘

4

默认镜像容量为10GB,但我需要更多(大约30GB)。如果我使用其中一个默认镜像创建一个30GB的硬盘,则可用空间为10GB,而不是30GB。我知道可以使用像debootstrap这样的工具安装发行版,但那似乎过于复杂。还有其他方法吗?

9个回答

7

截至本文撰写时,这可能是一个新功能,但是请前往以下网址:

  1. https://console.cloud.google.com/compute/
  2. 点击左侧菜单中的Disks
  3. 在加载的主窗格中,点击您的实例
  4. 在加载的上方水平菜单中,点击编辑
  5. 原始磁盘大小将变为可编辑状态。将磁盘大小更改为所需大小。
  6. 重新启动实例(sudo restart -r now)。重启后,df-h将列出您的新磁盘大小。

因此,回答您的问题的一种方法是创建带有默认磁盘的实例,然后通过Compute Engine GUI调整其大小。


这是我唯一可行的解决方案(使用containerOS),你有没有不必重新启动虚拟机的解决方法? - Woody

6
您可以创建一个大于10GB的启动磁盘,但是您需要重新分区,因为默认情况下提供的VM映像会扩展到10GB,所以您需要使用这些说明并运行fdisk,重启后再运行resize2fs将可用空间扩展到磁盘的完整大小。您可以使用启动脚本自动化它,以便在实例创建的过程中运行。

编辑 1:我已经开源了我的脚本,并使用startup-script元数据在启动时自动完成这个操作。您可以在我专门为这个问题创建的GitHub仓库中找到示例代码,该代码已被验证可与CentOS和Debian一起使用。请查看fdisk.sh以进行分区和gcloud.sh以进行部署命令。

编辑2: 另外,您还可以创建其他磁盘将其附加到实例,但在使用之前,您还需要格式化和挂载它。


只有一些图像能够支持这个吗?我正在尝试重新分区容器-vm镜像,但重启卡在“从硬盘启动...”和“从0000:7c00启动...”。 - adam-singer
@financeCoding 我已经验证了它可以在CentOS6和Debian7上运行,因此基于Debian7的容器-vm镜像应该也可以工作,但我已经验证了它会像你描述的那样挂起。我仍在研究中,还不确定发生了什么。当我弄清楚时,我会发布更新。 - Misha Brukman
@financeCoding 我已经更新了我的存储库,添加了一个名为growroot.sh的脚本,它使用cloud-initcloud-initramfs-growroot来重新分区容器VM映像。我已将其合并到我的gcutil.sh脚本中,因此使用起来应该很容易。请尝试一下并告诉我它是否适用于您。 - Misha Brukman
1
@financeCoding 请查看我的其他回答,其中包含使用Packer基于container-vm的自动调整大小图像。 - Misha Brukman
1
你的链接已经失效。要重新分区磁盘,请按照以下说明操作:https://cloud.google.com/compute/docs/disks/persistent-disks#repartitionrootpd - basilboli
@basilboli — 感谢您的提醒!我已经更新了我的回答。顺便说一下,当我写这个答案的时候,链接是有效的,那是在2014年6月,但是现在已经改变了。另外,您也可以直接编辑他人的答案来修复诸如损坏的链接等问题。 - Misha Brukman

1
您可以轻松地完成此操作,而无需手动调整/分区/格式化磁盘或在StackOverflow上所有其他答案中引入的任何复杂性。你真正需要做的是:
1. 根据要使用的镜像单独创建一个新的具有所需容量的磁盘。 2. 将该磁盘选择为您正在创建的实例的启动磁盘。
以下是使用Google开发人员控制台执行此操作的详细说明:
首先,您必须创建一个新的空白磁盘,用作新实例的根分区。要做到这一点,请转到 Compute / Compute Engine / Disks 并单击“ New disk ”。记得确保磁盘与要启动的实例位于同一区域,否则您将无法使用它。接下来,将磁盘的“源类型”更改为“图像”。然后选择适当的映像并指定所需的磁盘大小,然后点击 Create 。
现在,您已经准备好了启动盘,请前往创建新实例(计算 / 计算引擎 / VM 实例 并单击“新建实例”)。在新实例表单中,将启动源更改为现有磁盘,并选择刚刚创建的磁盘。

使用几个gcloud命令完成相同的操作应该是相对简单的。


这个方法也可能适用于基于快照的实例,但我还没有尝试过。 - maljub01
1
我尝试在CentOS-6上复制它,但它不会自动调整大小。 :( - qrtt1
你是使用图像还是快照?能否提供更多细节? - maljub01
1
我已经在asia-east1-b区域尝试了一张镜像和快照。df命令显示10G,fdisk显示100G。http://i.imgur.com/nsHiBDq.png - qrtt1
2
非常抱歉,文档中提到,CentOS 不支持自动调整大小: https://cloud.google.com/compute/docs/disks/persistent-disks#checking_if_your_operating_system_supports_automatic_resizing - qrtt1
有趣。我必须承认,我在Ubuntu上尝试过它,并且只是假设它可以在任何地方工作 :/ - maljub01

1
比直接编辑分区更安全的方法是使用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上。这种方法应该在任何地方都可以工作。

0
我已经将以下内容添加到实例的“启动脚本”元数据中,以便在前两次启动时调整大小:
# 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以获取虚拟硬盘允许的最大大小并重新启动。下次启动时,请检查文件系统大小并调整到分区的最大大小。完成这两个操作后,将跳过后续重新启动。


0
考虑为您的实例增加额外的持久性磁盘,用于存储用户应用程序数据。这可能在以后非常有用。因为您的应用程序数据可能会以不同的方式发展和扩展,当然也与所选择的操作系统无关。例如,您可以单独对该附加磁盘进行快照。通过这种方式,您可以在云端获得数据的完全灵活性,而无需将操作系统与数据一同携带;) 附注:当然,新的快照磁盘可能会更大。请参阅上述说明。

0

当您创建一个实例并指定比默认值更大的根磁盘大小时,您的实例仍将以10GB的分区表和文件系统大小结束。

为了使用额外的空间,您需要扩展/dev/sda1分区,然后调整其上的文件系统大小。

要调整/dev/sda1分区的大小(这是危险的,应该只在全新干净的实例内完成):

echo "16," | sudo sfdisk /dev/sda
sudo reboot

调整根文件系统大小:

sudo resize2fs /dev/sda1

在这之后,你应该可以开始了。


0

首先从用户界面创建一个包含现有映像的磁盘。然后在创建实例时使用该映像。


这只会创建另一个分区,你将拥有原始分区和一个新的分区,其中包含你在创建新镜像时请求的空间。 - Elad Winkler

0

以下是我用来调整 Google Cloud 计算实例大小的步骤。仅仅创建一个更大的磁盘新实例是不够的,您还需要按照以下方式修改分区并扩展文件系统:

  • 在原始实例上创建新的磁盘快照
  • 使用所需的新尺寸基于该快照创建新的计算实例引导磁盘
  • ssh 到您的新计算实例
  • 以 root 身份使用 fdisk 调整分区大小
  • 以 root 身份使用 resize2fs 扩展根分区

最后两个步骤在此处有详细描述:

https://cloud.google.com/compute/docs/disks/persistent-disks#manualrepartition

然后,您需要根据需要切换到新实例,或者可以使用新创建的磁盘映像重新启动原始实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接