【发布时间】:2014-07-24 03:29:59
【问题描述】:
默认图像有 10GB,但我需要更多(大约 30GB)。如果我使用其中一个默认映像创建 30GB 的磁盘,则可用空间为 10GB,而不是 30GB。我知道我可以使用 debootstrap 之类的工具安装发行版,但这似乎不必要地复杂。还有其他方法吗?
【问题讨论】:
标签: google-compute-engine disk-partitioning
默认图像有 10GB,但我需要更多(大约 30GB)。如果我使用其中一个默认映像创建 30GB 的磁盘,则可用空间为 10GB,而不是 30GB。我知道我可以使用 debootstrap 之类的工具安装发行版,但这似乎不必要地复杂。还有其他方法吗?
【问题讨论】:
标签: google-compute-engine disk-partitioning
这可能是撰写本文时的一项新功能,但请转到
因此,回答您的问题的一种方法是使用默认磁盘创建一个实例,然后通过 Compute Engine GUI 简单地调整它的大小。
【讨论】:
您可以创建大于 10GB 的启动磁盘,但您需要重新分区,因为默认情况下,提供的 VM 映像会扩展为 10GB,因此您需要使用 these instructions 并运行 fdisk,然后重新启动,然后运行resize2fs 将可用空间扩展到磁盘的完整大小。您可以使用startup scripts 将其自动化,使其作为实例创建的一部分运行。
编辑 1: 我已经开源了我的脚本,它们会在启动时使用 startup-script 元数据自动为您执行此操作。您可以在我专门为这个问题创建的GitHub repo 中找到示例代码,该代码已经过验证可以与 CentOS 和 Debian 一起使用。重新分区请参见fdisk.sh,部署命令请参见gcloud.sh。
编辑 2: 或者,您也可以创建 an additional disk 和 attach it to your instance,但您还需要 format and mount it 才能使用它。
【讨论】:
growroot.sh,它使用cloud-init 和cloud-initramfs-growroot,它可以很好地重新分区container-vm 映像。我已经将它合并到我的gcutil.sh 脚本中,所以它应该很容易使用。请尝试一下,让我知道它是否适合您。
以下是我调整 Google Cloud 计算实例大小的步骤。仅仅创建一个更大磁盘的新实例是不够的,您还需要修改分区并扩展文件系统,如下所示:
这里详细描述最后两个步骤:
https://cloud.google.com/compute/docs/disks/persistent-disks#manualrepartition
然后您需要根据需要切换到新实例,或者您可以使用新创建的磁盘映像重新启动原始实例。
【讨论】:
比直接编辑分区更安全的方法并且不需要维护自己的图像,是 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
分区会在下次启动时自动调整大小。
注意事项:
【讨论】:
首先使用现有图像从 UI 创建一个磁盘。现在在创建实例时使用此图像。
【讨论】:
您可以轻松地做到这一点,而无需手动调整磁盘大小/分区/格式化磁盘或 StackOverflow 上所有其他答案中引入的任何并发症。您真正需要做的就是:
以下是如何使用 Google Developers Console 执行此操作的详细说明:
首先,您必须创建一个新的空白磁盘,用作新实例的根分区。为此,请转到 Compute / Compute Engine / Disks 并点击“New disk”。请记住确保磁盘与您要启动的实例位于同一区域,否则您将无法使用它。接下来,将磁盘的“Source Type”更改为“Image”。然后选择适当的图像并指定所需的磁盘大小并点击创建。
现在您已准备好启动磁盘,请创建新实例(Compute / Compute Engine / VM Instances 并点击“ 新实例”)。在新的实例表单中,将 Boot Source 更改为 Existing Disk 并选择您刚刚创建的磁盘。
使用几个gcloud 命令来做同样的事情应该相对简单。
【讨论】:
我已将以下内容添加到实例的“启动脚本”元数据中,以便在前两次启动时调整大小:
# 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 的默认值相同,请运行 fdisk 以获得虚拟硬盘上允许的最大大小并重新启动。下次启动时,检查文件系统大小并将大小调整为分区的最大大小。执行这两个操作后,将在后续重新启动时跳过。
【讨论】:
考虑向您的实例添加额外的持久性磁盘,以保存用户应用程序数据。 以后可能会很有用。因为您的应用程序数据可能会以不同的方式发展和扩展,当然也与所选的操作系统无关。 例如,您可以独立制作该附加光盘的快照。有了它,您就可以在云中获得充分的数据灵活性,并且您不需要将操作系统与您的数据一起使用;) 附言当然,新的快照 Desics 可以更大。请参阅上面的说明
【讨论】:
当您创建实例并指定比默认值更大的根磁盘大小时,您的实例最终仍会使用 10GB 的分区表和文件系统大小。
为了使用额外的空间,您需要扩展 /dev/sda1 分区,然后调整其上的文件系统大小。
调整 /dev/sda1 分区的大小(这是危险的,只能在全新的干净实例中完成):
echo "16," | sudo sfdisk /dev/sda
sudo reboot
调整根文件系统的大小:
sudo resize2fs /dev/sda1
你应该很好地去追求这个。
【讨论】: