如何增加Google Compute Engine中根磁盘的大小?

114

GCE中的根磁盘大小为10GB。如何增加它?我在控制台或gcutil标志中找不到选项。在AWS中可以轻松完成此操作。

GCE中的根磁盘大小为10GB。如何增加它?我在控制台或gcutil标志中找不到选项。在AWS中可以轻松完成此操作。


请参考类似问题的此答案 - Misha Brukman
1
在@MishaBrukman的步骤之后执行sudo growpart /dev/sda 1 && sudo xfs_growfs /dev/sda1。这不需要重新启动计算机。 - Martin Karari
10个回答

276
截至2016年3月31日,您可以在线调整持久磁盘的大小,无需停止或重新启动虚拟机,也无需拍摄快照,并且无需将其恢复到更大的磁盘。 博客文章详细介绍了此功能,您可以通过文档了解如何通过控制台执行此操作:
在 Google Cloud Platform 控制台中调整持久磁盘大小:
  1. 点击 Compute Engine 产品选项卡。
  2. 在“存储”部分下选择 磁盘
  3. 单击要调整大小的磁盘名称,以进入磁盘详细信息页面。
  4. 在磁盘详细信息页面顶部,单击“编辑”。
  5. 在“大小”字段中,输入磁盘的新大小。
  6. 在磁盘详细信息页面底部,单击“保存”以应用对磁盘的更改。
  7. 调整磁盘大小后,必须调整磁盘分区,以便操作系统可以访问额外的空间。
或通过 CLI:
gcloud compute disks resize example-disk --size 250

然后,在Debian/Ubuntu等系统上运行:
$ sudo apt install -y cloud-utils         # Debian jessie
$ sudo apt install -y cloud-guest-utils   # Debian stretch, Ubuntu
$ sudo growpart /dev/sda 1
$ sudo resize2fs /dev/sda1

或者,对于RedHat/Fedora/CentOS等:
$ sudo dnf install -y cloud-utils-growpart
$ sudo growpart /dev/sda 1
$ sudo xfs_growfs -d /                    # CentOS 6 needs `resize2fs`

请注意,某些操作系统将在重新启动时自动调整分区大小,无需使用诸如fdiskresize2fsxfs_growfs等工具进行任何手动步骤,因此只需调整磁盘大小并重新启动虚拟机即可使更改生效。

3
请参考此页面(https://cloud.google.com/compute/docs/disks/create-root-persistent-disks#repartitionrootpd)以获取支持自动调整分区大小的操作系统。您可以使用`resize2fs`实时调整非根分区的大小,无需重启,但如果是引导分区,则需要重新启动计算机,且不需要额外的命令。 - Misha Brukman
3
谢谢回复,我只需要重新启动一下它就好了。 - Aftab Naveed
1
@user1700890 — 你是否打开了你项目中的磁盘列表,然后首先点击了特定的磁盘?接着,你应该在该特定磁盘页面顶部看到一个编辑按钮。 - Misha Brukman
20
无需重新启动计算机:sudo growpart /dev/sda 1 && sudo resize2fs /dev/sda1 - gdaras
4
在不重新启动CentOS/XFS的情况下扩大磁盘:dnf install cloud-utils-growpart -y && growpart /dev/sda 1 && xfs_growfs -d / - tisc0
显示剩余8条评论

26
  1. 从快照创建一个新的硬盘,但在此过程中增加大小。
  2. 使用新的、扩大后的磁盘创建一个新的实例。
  3. 将分区扩大以识别新空间(https://cloud.google.com/compute/docs/disks/persistent-disks#repartitionrootpd)(注意:特别关注起始扇区,不要盲目地按回车键,但可以盲目地按结束扇区上的回车键)。
  4. sudo resize2fs /dev/sda1 (请注意,这一步在谷歌云文档中未提到)。

2
很好,运行成功了。但需要注意需要重新启动。 - aholbreich
在云文档中也提到了第四步。将文件系统调整为分区的完整大小:user@mytestinstance:~$ sudo resize2fs /dev/sda1resize2fs 1.42.5 (29-Jul-2012)/dev/sda1上的文件系统已挂载到/;需要在线调整大小 old_desc_blocks = 1,new_desc_blocks = 4 /dev/sda1上的文件系统现在有13106944个块长。 - Kevin Siji
是的,第四步现在已经存在了,在我写作时还没有。 - user1130176
8
一个非常出色的回答。 - orrymr
4
请注意,下面Misha Brukman给出的答案提供了一种更加简便和快速的选择。 - Aldekein
显示剩余2条评论

5
这更像是对@user1130176答案的补充,但如果您正在运行CentOS 7+,则需要执行以下操作来完成第4步(扩展文件系统):xfs_growfs /dev/sda1
CentOS 7上的新磁盘类型为xfs。希望这能帮助您,所有链接中并不是很清楚。

-bash: xfs_growfs: 命令未找到,这个命令在哪里可以找到? - omerio
如果你使用的是 CentOS,可能是不同的/旧版本。基本上,如果你使用的是 CentOS 6,你会有 resize2fs,而如果你使用的是 CentOS,你会有 xfs_growfs - mohsenrezaeithe
您可以查看此自动化脚本: https://gist.github.com/OmarTrigui/7d6ec92c8f2ef83ba15b80e30fb6a5be - Omar_0x80

5
在大多数情况下,这将更简单、灵活:创建一个大小适当的第二个数据磁盘,并将其连接到实例

要调整持久磁盘(包括根磁盘)的大小,需先对磁盘进行快照,然后从该快照创建一个新的更大磁盘


3

自从新的GCoud命令行工具推出后,您可以在实例创建时选择启动磁盘的大小和类型:

gcloud compute instances create foo-instance --boot-disk-size 100 --image "xxxxxx"

然后按照以下说明调整根分区大小:https://cloud.google.com/compute/docs/disks#repartitionrootpd 文档:https://cloud.google.com/sdk/gcloud/reference/compute/instances/create 编辑:调整根分区大小后,您必须重新启动实例,以强制系统重新读取分区表。这使得此技巧无法在启动脚本(在每次启动/重新启动时执行)中使用。

它可以用作启动脚本,但您必须小心区分当前所处的状态,并根据磁盘的状态执行不同的操作(或不执行任何操作)。有关更多详细信息,请参见我的答案,其中链接到我编写的一个名为fdisk.sh的脚本,该脚本正是这样做的。 - Misha Brukman

3

我知道这个话题很老,但是我刚刚使用了比上面解释的方法更简单的方法来实现。在云控制台用户界面上完成,无需担心或执行任何特殊命令,只需点击几次即可。

但是,它需要创建一个新实例,而不是调整已运行实例上的磁盘大小。

  1. 创建您要扩大的磁盘的快照

    单击实例,然后单击磁盘,然后您将看到“创建快照”,给它一个名称,然后等待快照的创建。(您无需关闭实例)

  2. 从快照中创建一个新实例并指定新的大小

    单击快照,然后您将看到“创建实例”,然后您可以查看启动磁盘选项,单击更改,然后将其大小更改为新的大小。(您可能还想将所有默认实例设置更改为所需设置)

这是一种无可挑剔的方式来扩大磁盘而不会引起任何分区错误,也不需要执行任何命令或特殊操作。

唯一的缺点是您需要创建一个新实例。 您不能只是在已有的实例上执行。


尝试了这个方法,但由于内存不足仍无法登录到新实例。 - joash

2
现在,您可以就地调整持久磁盘的大小:(参考链接)
gcloud compute disks resize DISK_NAME [DISK_NAME …] --size SIZE [--zone ZONE]

这只会调整物理设备的大小,文件系统(以及可能的分区)仍然需要在此之后进行调整。


1
首先创建一个所需大小和图像的磁盘,然后使用"Existing Disk"作为引导源创建您的实例。

0

对于其他找不到有效答案的人,我找到了这个某人友善地发布的脚本:

https://gist.github.com/xelwarto/6f5c6556613c9215b1e1

# Requires cloud-utils-growpart to be installed

# Resize ROOT FS
part=`df --output=source / |grep "/dev/"`
if [ ! -z "$part" ] ; then
  len=${#part}
  p=`echo $part|cut -c$len`
  d=`echo $part|cut -c1-$(($len-1))`

  growpart "$d" "$p"
  xfs_growfs "$part"
fi

0

现在命令已经更改,最好遵循谷歌文档。截至2022年9月2日。

https://cloud.google.com/compute/docs/disks/resize-persistent-disk

调整磁盘大小之前:

mgadage8@vm:~$ lsblk 名称 主:次 RM 大小 RO 类型 挂载点 sda 8:0 0 30G 0 磁盘 ├─sda1 8:1 0 9.9G 0 分区 / ├─sda14 8:14 0 3M 0 分区 └─sda15 8:15 0 124M 0 分区 /boot/efi mgadage8@vm:~$ df -h 文件系统 大小 已用 可用 使用% 挂载点 udev 1.8G 0 1.8G 0% /dev tmpfs 368M 368K 368M 1% /run /dev/sda1 9.7G 1.7G 7.5G 19% / tmpfs 1.8G 0 1.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda15 124M 5.9M 118M 5% /boot/efi tmpfs 368M 0 368M 0% /run/user/1000


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