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

siotufzp  于 2022-12-11  发布在  Linux
关注(0)|答案(1)|浏览(109)

在Google控制台中增加磁盘容量后,磁盘已满99.8%的GCP VM尚未调整其文件系统的大小。
我在GCP上有一个基于公共映像ubuntu-2004-focal-v20220419的小VM。有一个10GB的磁盘,带有根分区和文件系统。一些日志占用了99.8%的磁盘容量。我将磁盘大小增加到15GB(没有删除任何数据),并重新启动VM。文档显示:
对于具有公共映像的虚拟机,在您增加 Boot 磁盘的大小并重新启动虚拟机后,计算引擎会自动调整根分区和文件系统的大小。
但是,我可以看到文件系统没有调整大小

~$ 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后台进程无法调整文件系统的大小?

jmo0nnb3

jmo0nnb31#

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

重要说明:

  • 在您修改磁盘上的文件系统之前,create a snapshot
  • Boot 磁盘使用MBR分区,其大小限制为2 TB。不要将启动磁盘的大小调整为超过2 TB。
  • 我建议在修改存储之前关闭系统。列表项
    步骤1 -在Google控制台中创建一个默认示例以进行测试。

默认磁盘大小为10 GB。

步骤2 -连接到示例。

进入Google控制台-〉计算引擎。将显示VM示例列表。在示例所在的行上,单击“SSH”。您也可以使用CLI:“gcloud计算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。

进入Google控制台-〉计算引擎-〉磁盘。选择示例的磁盘。单击编辑按钮并将磁盘大小调整为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/sda 1这一行,可以确认Google Compute上的Debian 9 Stretch确实会自动调整根文件系统的大小。

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

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

gcloud compute instances get-serial-port-output的文档。

步骤8 -分析控制台输出。

这产生了大约1,000行。为了减少这个输出,我使用grep来搜索可能与调整文件系统大小有关的输出。注意我是如何拼写“resiz”的。我希望搜索包括“resize”和“resizing”。

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-root.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运行在Google Cloud Compute Engine上,如果你调整根磁盘的大小,它会自动调整根卷的大小。非常好。
Google Cloud提供了在VM示例运行时调整磁盘大小的功能。您可以在系统运行时调整根磁盘和根文件系统的大小吗?如果可以,如何调整?
步骤1 -进入Google控制台-〉计算引擎-〉磁盘。选择示例的磁盘。
步骤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

请注意,磁盘大小报告为“25 Gib”,但分区大小仍为“15 G”。这意味着磁盘驱动器的大小调整为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 compute disks snapshot的文档。

第2步-调整磁盘大小。

此命令将调整VM示例磁盘的大小。修改所需的大小、磁盘名称和区域。请注意-quiet标志。这将阻止提示确认调整大小。

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

gcloud compute disks resize的文档。

步骤3 -调整根文件系统的大小。

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

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

gcloud compute ssh的文档。

第4步-验证调整大小。

在虚拟机示例上执行最后一个“df”命令,结果显示新的根文件系统为30 GB(30,896,016个数据块)。

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

这是完整的blog-link to @John汉利的文档。

相关问题