【问题标题】:How to get a bigger boot disk on Google Compute Engine [closed]如何在 Google Compute Engine 上获得更大的启动磁盘 [关闭]
【发布时间】:2014-07-24 03:29:59
【问题描述】:

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

【问题讨论】:

    标签: google-compute-engine disk-partitioning


    【解决方案1】:

    这可能是撰写本文时的一项新功能,但请转到

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

    因此,回答您的问题的一种方法是使用默认磁盘创建一个实例,然后通过 Compute Engine GUI 简单地调整它的大小。

    【讨论】:

    • 这只是对我有用的解决方案(使用 containerOS),您有无需重新启动 VM 的解决方法吗?
    【解决方案2】:

    您可以创建大于 10GB 的启动磁盘,但您需要重新分区,因为默认情况下,提供的 VM 映像会扩展为 10GB,因此您需要使用 these instructions 并运行 fdisk,然后重新启动,然后运行resize2fs 将可用空间扩展到磁盘的完整大小。您可以使用startup scripts 将其自动化,使其作为实例创建的一部分运行。

    编辑 1: 我已经开源了我的脚本,它们会在启动时使用 startup-script 元数据自动为您执行此操作。您可以在我专门为这个问题创建的GitHub repo 中找到示例代码,该代码已经过验证可以与 CentOS 和 Debian 一起使用。重新分区请参见fdisk.sh,部署命令请参见gcloud.sh

    编辑 2: 或者,您也可以创建 an additional diskattach it to your instance,但您还需要 format and mount it 才能使用它。

    【讨论】:

    • 只有部分图片支持吗?我正在尝试重新分区 container-vm 映像并在 Booting from Hard Disk... Booting from 0000:7c00 时挂起
    • @financeCoding 我已经验证它适用于 CentOS6 和 Debian7,因此 container-vm 映像 应该 也可以工作,因为它也基于 Debian7,但我已经验证它是否如您所描述的那样挂起。我仍在调查它,但还不确定这里发生了什么。当我弄清楚时,我会发布更新。
    • @financeCoding 我已经更新了my repo,添加了一个额外的脚本growroot.sh,它使用cloud-initcloud-initramfs-growroot,它可以很好地重新分区container-vm 映像。我已经将它合并到我的gcutil.sh 脚本中,所以它应该很容易使用。请尝试一下,让我知道它是否适合您。
    • @financeCoding 请参阅我的answer elsewhere,使用Packer 使用基于容器虚拟机的自动调整大小的图像。
    • 您的链接已损坏。要重新分区磁盘,请按照以下说明操作:cloud.google.com/compute/docs/disks/…
    【解决方案3】:

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

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

    这里详细描述最后两个步骤:

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

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

    【讨论】:

      【解决方案4】:

      比直接编辑分区更安全的方法并且不需要维护自己的图像,是 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。这种方法应该适用于任何地方。

      【讨论】:

        【解决方案5】:

        首先使用现有图像从 UI 创建一个磁盘。现在在创建实例时使用此图像。

        【讨论】:

        • 这只会创建另一个分区,您将拥有原始分区加上一个新分区,其中包含您在创建新映像时请求的空间。
        【解决方案6】:

        您可以轻松地做到这一点,而无需手动调整磁盘大小/分区/格式化磁盘或 StackOverflow 上所有其他答案中引入的任何并发症。您真正需要做的就是:

        1. 根据您要使用的映像单独创建具有所需容量的新磁盘。
        2. 选择该磁盘作为您正在创建的实例的启动磁盘。

        以下是如何使用 Google Developers Console 执行此操作的详细说明:

        首先,您必须创建一个新的空白磁盘,用作新实例的根分区。为此,请转到 Compute / Compute Engine / Disks 并点击“New disk”。请记住确保磁盘与您要启动的实例位于同一区域,否则您将无法使用它。接下来,将磁盘的“Source Type”更改为“Image”。然后选择适当的图像并指定所需的磁盘大小并点击创建

        现在您已准备好启动磁盘,请创建新实例(Compute / Compute Engine / VM Instances 并点击“ 新实例”)。在新的实例表单中,将 Boot Source 更改为 Existing Disk 并选择您刚刚创建的磁盘。

        使用几个gcloud 命令来做同样的事情应该相对简单。

        【讨论】:

        • 这可能也适用于基于快照的实例,但我不确定,因为我还没有尝试过。
        • 我尝试用 centos-6 重现它,但它不会自动调整大小。 :(
        • 您使用的是图像还是快照?你能提供更多细节吗?
        • 我在 asia-east1-b 区域尝试了图像和快照。 df 命令显示 10G,fdisk 显示 100G。 i.imgur.com/nsHiBDq.png
        • 很抱歉,文档说,centos 不支持自动调整大小:cloud.google.com/compute/docs/disks/…
        【解决方案7】:

        我已将以下内容添加到实例的“启动脚本”元数据中,以便在前两次启动时调整大小:

        # 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 以获得虚拟硬盘上允许的最大大小并重新启动。下次启动时,检查文件系统大小并将大小调整为分区的最大大小。执行这两个操作后,将在后续重新启动时跳过。

        【讨论】:

          【解决方案8】:

          考虑向您的实例添加额外的持久性磁盘,以保存用户应用程序数据。 以后可能会很有用。因为您的应用程序数据可能会以不同的方式发展和扩展,当然也与所选的操作系统无关。 例如,您可以独立制作该附加光盘的快照。有了它,您就可以在云中获得充分的数据灵活性,并且您不需要将操作系统与您的数据一起使用;) 附言当然,新的快照 Desics 可以更大。请参阅上面的说明

          【讨论】:

            【解决方案9】:

            当您创建实例并指定比默认值更大的根磁盘大小时,您的实例最终仍会使用 10GB 的分区表和文件系统大小。

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

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

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

            调整根文件系统的大小:

            sudo resize2fs /dev/sda1
            

            你应该很好地去追求这个。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-07-08
              • 1970-01-01
              • 2023-03-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-14
              • 1970-01-01
              相关资源
              最近更新 更多