GCP计算引擎磁盘已满,公共映像上的文件系统未调整大小



GCP虚拟机在谷歌控制台中增加磁盘容量后,磁盘已满99.8%,尚未调整其文件系统的大小。

我在GCP上有一个基于公共映像ubuntu-2004-focal-v20220419的小型VM。有一个10GB的磁盘,带有根分区和文件系统。一些日志占用了99.8%的磁盘容量。我将磁盘大小增加到15GB(没有删除任何数据),然后重新启动VM。文件显示:

对于具有公共映像的虚拟机,在增加启动磁盘的大小并重新启动虚拟机后,计算引擎会自动调整根分区和文件系统的大小。

然而,我可以看到文件系统没有调整的大小

~$ sudo lsblk
sda       8:0    0    15G  0 disk 
├─sda1    8:1    0   9.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi

我想知道为什么会这样?我预计,根据上述文件,额外的5GB将自动与sda1合并。可能是因为磁盘太满了,所以一些GCP后台进程无法调整文件系统的大小?

我给出这个回应是为了帮助其他社区解决这个问题,@John Hanley在评论区做出了适当的回应。

重要注意事项:

  • 在修改磁盘上的文件系统之前,请创建一个快照
  • 启动磁盘使用MBR分区,其大小限制为2 TB。不要将启动磁盘的大小调整为超过2 TB
  • 我建议在修改存储之前关闭系统。列出项目

步骤1–在Google控制台中创建一个默认实例进行测试

默认磁盘大小为10 GB。

步骤2–连接到实例

转到谷歌控制台->计算引擎。将显示VM实例的列表。在带有实例的行上,单击"SSH"。您还可以使用CLI:"gcloud compute ssh<instance_name>"。

执行"df"命令并记录输出。

df > df_before_resize.txt
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              292220       0    292220   0% /dev
tmpfs              60672    3184     57488   6% /run
/dev/sda1       10253588 1645864   8067156  17% /
tmpfs             303352       0    303352   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             303352       0    303352   0% /sys/fs/cgroup

步骤3–关闭实例

步骤4–将磁盘大小调整为16 GB

转到谷歌控制台->计算引擎->磁盘。为实例选择磁盘。单击编辑按钮并将磁盘大小调整为16 GB。

步骤5–启动实例并使用SSH进行连接

步骤6–再次执行"df"命令

Filesystem     1K-blocks    Used Available Use% Mounted on
udev              292220       0    292220   0% /dev
tmpfs              60672    3176     57496   6% /run
/dev/sda1       15414196 1659504  13004496  12% /
tmpfs             303352       0    303352   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             303352       0    303352   0% /sys/fs/cgroup

比较/dev/sda1的行可以确认Google Compute上的Debian 9 Stretch确实会自动调整根文件系统的大小。现在我想知道怎么做。

步骤7–获取串行端口控制台输出

gcloud compute instances get-serial-port-output --zone us-east4-c instance-1 > console.log

gcloud计算实例的文档获取串行端口输出。

步骤8–分析控制台输出

这产生了大约1000条生产线。为了减少这种输出,我使用grep来搜索可能与调整文件系统大小有关的输出。注意我是怎么拼写"resiz"的。我希望搜索包括"调整大小"one_answers"调整大小"。

grep -e resiz -e expand console.log

这产生了以下内容:

Oct 28 [    3.979172] EXT4-fs (sda1): resizing filesystem from 2620928 to 3931643 blocks
Oct 28 00:11:57 localhost expand-root.sh[458]: Growing partition /dev/sda1
Oct 28 00:11:57 localhost expand-root.sh[458]: CHANGED: partition=1 start=4096 old: size=20967424 end=20971520 new: size=31453151,end=31457247
Oct 28 00:11:57 localhost expand-root.sh[458]: Resizing ext4 filesystem on /dev/sda1
Oct 28 00:11:57 localhost expand-root.sh[458]: resize2fs 1.43.4 (31-Jan-2017)
Oct 28 00:11:57 localhost kernel: [    3.979172] EXT4-fs (sda1): resizing filesystem from 2620928 to 3931643 blocks
[    4.577767] EXT4-fs (sda1): resized filesystem to 3931643
Oct 28 00:11:57 instance-1 kernel: [    4.577767] EXT4-fs (sda1): resized filesystem to 3931643
Oct 28 00:11:58 instance-1 expand-root.sh[458]: Filesystem at /dev/sda1 is mounted on /; on-line resizing required
Oct 28 00:11:58 instance-1 expand-root.sh[458]: old_desc_blocks = 2, new_desc_blocks = 2
Oct 28 00:11:58 instance-1 expand-root.sh[458]: The filesystem on /dev/sda1 is now 3931643 (4k) blocks long.

第9步–找出用于调整根文件系统大小的命令

从控制台的输出中,我可以看到命令"expand-root.sh"。使用命令"which-expand-root.sh",我发现这个命令位于"/usr/bin/expand-rot.sh"处。

#!/bin/bash
# Expands a partition and filesystem using growpart and an appropriate
# filesystem tool for live filesystem expansion. Takes three arguments:
# DEVICE, such as "/dev/sda"
# PARTITION, such as "1"
# FILESYSTEM, such as "ext4"

DEVICE="${1}"
PARTITION="${2}"
FILESYSTEM="${3}"

if [[ -z "${DEVICE}" || -z "${PARTITION}" || -z "${FILESYSTEM}" ]]; then
echo "Requires: $0 DEVICE PARTITION FILESYSTEM"
exit 1
fi

# Grow partition using growpart
if [[ -x /usr/bin/growpart ]]; then
echo "Growing partition ${DEVICE}${PARTITION}"
/usr/bin/growpart "${DEVICE}" "${PARTITION}"
else
echo "/usr/bin/growpart was not found"
exit 1
fi

echo "Resizing ${FILESYSTEM} filesystem on ${DEVICE}${PARTITION}"
case "${FILESYSTEM}" in
xfs)  xfs_growfs / ;;
ext2) resize2fs "${DEVICE}${PARTITION}" ;;
ext3) resize2fs "${DEVICE}${PARTITION}" ;;
ext4) resize2fs "${DEVICE}${PARTITION}" ;;
*) echo "Unsupported filesystem,  unable to expand size." ;;
esac

如果你调整根磁盘的大小,在谷歌云计算引擎上运行的Debian 9 Stretch会自动调整根卷的大小。非常好。

谷歌云提供了在虚拟机实例运行时调整磁盘大小的功能。您能在系统运行时调整根磁盘和根文件系统的大小吗?如果是,如何?

步骤1-转到谷歌控制台->计算引擎->磁盘。为实例选择磁盘。

步骤2–单击"CREATE SNAPSHOT"按钮创建恢复快照。

步骤3–单击编辑按钮并将磁盘大小调整为25 GB。

步骤4–连接到实例。

步骤5–执行此命令以查看磁盘大小和分区布局:

fdisk -l

该命令产生以下输出:

Disk /dev/sda: 25 GiB, 26843545600 bytes, 52428800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x70df3223

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     4096 31457246 31453151  15G 83 Linux

请注意,磁盘大小报告为"25Gib",但分区大小仍然是"15G"。这意味着磁盘驱动器的大小被调整为25 GB,但根分区(文件系统)的大小保持不变。让我们在系统运行时尝试调整根文件系统的大小。

expand-root.sh /dev/sda 1 ext4
Growing partition /dev/sda1
CHANGED: partition=1 start=4096 old: size=31453151 end=31457247 new: size=52424671,end=52428767
Resizing ext4 filesystem on /dev/sda1
resize2fs 1.43.4 (31-Jan-2017)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/sda1 is now 6553083 (4k) blocks long.

自动调整大小

现在,让我们更进一步,从命令行或脚本中完全自动调整VM磁盘的大小和根文件系统的大小。

步骤1–快照磁盘

首先,我们将快照磁盘以备不时之需。

gcloud compute disks snapshot instance-1 --snapshot-names instance-1-snapshot --zone us-east4-c --description="This is a test snapshot"

gcloud计算磁盘快照的文档。

第2步–调整磁盘大小

此命令将调整VM实例磁盘的大小。根据需要的大小、磁盘名称和区域进行修改。请注意–quiet标志。这将阻止出现确认调整大小的提示。

gcloud compute disks resize instance-1 --zone us-east4-c --size 30GB --quiet

gcloud计算磁盘调整大小的文档。

步骤3–重新设置根文件系统的大小

此命令将使用SSH连接到实例并远程执行expand-root.sh程序。

gcloud compute ssh instance-1 --zone us-east4-c --command "sudo expand-root.sh /dev/sda 1 ext4"

gcloud计算ssh的文档。

第4步-验证尺寸

on VM实例上的最后一个"df"命令显示新的根文件系统是30GB(30896016个块)。

Filesystem     1K-blocks    Used Available Use% Mounted on
udev              292220       0    292220   0% /dev
tmpfs              60672    3180     57492   6% /run
/dev/sda1       30896016 1663296  27853564   6% /
tmpfs             303352       0    303352   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             303352       0    303352   0% /sys/fs/cgroup

这是@John Hanley文档的完整博客链接。

我已经在服务器故障社区发布了我的解决方案。我希望这对某人有帮助。https://serverfault.com/a/1119504/450511

相关内容

  • 没有找到相关文章

最新更新