如果我收到错误消息,提示我文件系统没有剩余空间,我应该如何提高 EBS 卷的大小?

上次更新时间:2020 年 5 月 7 日

当我尝试增加 Amazon Elastic Block Store (Amazon EBS) 卷的大小时,我收到一条错误消息,提示我的文件系统没有剩余空间。如何解决此问题?

简短描述

当扩展 EBS 卷上的根分区或根文件系统时,为避免出现设备上没有剩余空间错误,请使用临时文件系统 tmpfs,它会驻留在内存中。在 /tmp 挂载点下挂载 tmpfs 文件系统,然后再扩展您的根分区或根文件系统。

示例

以下示例显示了根 EBS 卷的块储存设备 /dev/nvme0n1 为 9 GiB,并且根分区(分区 1)已经为 8 GiB。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   9G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part

如果您尝试增加根分区(分区 1)的大小,您将收到以下错误之一:  

$ sudo growpart /dev/nvme0n1 1
/bin/growpart: line 248: /tmp/growpart.fklt5u/dump.out: No space left on device
FAILED: failed to dump sfdisk info for /dev/nvme0n1

-或者-

$ sudo growpart /dev/nvme0n1 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
FAILED: failed: sfdisk --list /dev/nvme0n1

注意:最佳实践是创建实例的 Amazon 系统映像 (AMI) 备份或附加到实例的根 EBS 卷的快照,然后再尝试这些解决步骤。创建备份后,即使遇到意外的问题,也可以恢复数据。

解决方法

1.    使用 SSH 连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例

2.    使用 df -h 命令验证“/”下挂载的根分区是否已满 (100%)。在以下示例中,/dev/nvme0n1p1 已使用 100% 的空间。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        460M     0  475M   0% /dev
tmpfs           478M     0  492M   0% /dev/shm
tmpfs           478M  432K  492M   1% /run
tmpfs           478M     0  492M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  8.0G  664K 100% /
tmpfs            96M     0   99M   0% /run/user/1000

3.    运行以下命令来收集有关附加的块存储设备以及根“/”挂载点的详细信息。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   9G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part
$ lsblk -f
NAME          FSTYPE LABEL           UUID                                 MOUNTPOINT
nvme0n1
├─nvme0n1p1   xfs    /               afcf1342-1d40-41bd-bde9-e4ea5d87e3b6 /
└─nvme0n1p128

在上述示例的输出中,根 EBS 卷的总空间为 9 GiB,但根分区 (/dev/nvme0n1p1) 或分区1 只有 8 GiB。文件系统类型是 XFS。

4.    为避免块存储设备上没有剩余空间错误,将临时文件系统 tmpfs 挂载到 /tmp 挂载点。这将创建一个 10 M 的 tmpfs,并挂载到 /tmp

$ sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp

5.    运行 growpart 命令来增加根分区或分区 1 的大小。用您的根分区替换 /dev/nvme0n1

$ sudo growpart /dev/nvme0n1 1 
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335

运行 lsblk 命令来验证分区 1 已扩展至 9 GiB。

$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0   9G  0 disk
├─nvme0n1p1   259:1    0   9G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part

6.    扩展文件系统。请参阅步骤 3 来验证根分区“/”的文件系统。

在以下示例中,对 XFS 类型的文件系统进行扩展。

$ sudo xfs_growfs -d /
data blocks changed from 2096635 to 2358779
         =                       sectsz=512   sunit=0 blks, lazy-count=1
log      =internal               bsize=4096   blocks=2560, version=2
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
         =                       sunit=0      swidth=0 blks
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       crc=1        finobt=1 spinodes=0
         =                       sectsz=512   attr=2, projid32bit=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
meta-data=/dev/nvme0n1p1         isize=512    agcount=4, agsize=524159 blks

在以下示例中,对分区 1 上的 EXT2/EXT3/EXT4 文件系统进行扩展:

$ sudo resize2fs /dev/nvme0n1p1

7.    扩展文件系统后,使用 df -h 命令来验证操作系统是否可以看到额外的空间。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        960M     0  960M   0% /dev
tmpfs           978M     0  978M   0% /dev/shm
tmpfs           978M  392K  978M   1% /run
tmpfs           978M     0  978M   0% /sys/fs/cgroup
/dev/nvme0n1p1  9.0G  8.0G 1022M  89% /
tmpfs           196M     0  196M   0% /run/user/1000
tmpfs            10M     0   10M   0% /tmp

8.    运行卸载命令来卸载 tmpfs 文件系统。

$ sudo umount /tmp

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?