如果我收到一条提示文件系统上没有剩余空间的错误信息,如何增加 EBS 卷的大小?

3 分钟阅读
0

我想增加 Amazon Elastic Block Store(Amazon EBS)卷的大小。但是,我收到一条提示文件系统上没有剩余空间的错误信息。

简短描述

在您试图扩展 EBS 卷上的根分区或根文件系统时,可能会收到 No space left on device 错误。若要避免此错误,请使用虚拟内存中的临时文件系统(tmpfs)。将 tmpfs文件系统挂载到 /tmp 挂载点下,然后扩展您的根分区或根文件系统。

以下示例显示根 EBS 卷块设备(/dev/nvme0n1)为 9 GiB,根分区(分区 1)已为 8 GiB:

$ lsblkNAME          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 1CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
FAILED: failed: sfdisk --list /dev/nvme0n1

**注意:**在继续操作之前,最佳做法是创建该实例的亚马逊机器映像(AMI)备份。或者,创建连接到您的实例的根 EBS 卷的快照。创建了备份,您才能在发生不可预见的问题时恢复数据。

解决方法

  1. 将 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例与 SSH 相连接

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

    $ df -hFilesystem      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

    若要收集有关您连接的块设备和根**/**挂载点的详细信息,请运行以下命令:

    $ lsblkNAME          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 -fNAME          FSTYPE LABEL           UUID                                 MOUNTPOINT
    nvme0n1
    ├─nvme0n1p1   xfs    /               afcf1342-1d40-41bd-bde9-e4ea5d87e3b6 /
    └─nvme0n1p128

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

  3. 为避免出现 No space left on the block device 错误,请将临时文件系统 tmpfs 挂载到 /tmp 挂载点。这将创建一个挂载到 /tmp 的 10 M tmpfs

    $ sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
  4. 若要增加根分区或分区 1 的大小,请运行 growpart 命令。将 /dev/nvme0n1 替换为您的根分区:

    $ sudo growpart /dev/nvme0n1 1 CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=18870239 end=18874335
  5. 若要验证您是否已将分区 1 Gib 扩展到 9 GiB,请运行 lsblk 命令:

    $ lsblkNAME          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 -hFilesystem      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
AWS 官方
AWS 官方已更新 6 个月前