Amazon EC2实例挂载新卷后仍报No space left on device错误
问题根因
从执行结果可以直接定位问题:
- 系统根分区
/dev/xvda1使用率已经达到100%,仅剩63M剩余空间,是触发OSError: [Errno 28] No space left on device报错的直接原因 - 新创建的100GiB存储卷已经被内核识别(对应设备为
/dev/xvdf),但未完成文件系统创建、挂载流程,操作系统不会向未挂载的块设备写入数据,因此新卷完全没有被利用,报错会持续出现。
操作步骤
注意:所有操作需要使用有sudo权限的用户执行,操作前确认块设备名不要写错,避免误操作损坏根分区数据。
- 为新卷创建ext4文件系统(新创建的空卷可直接执行该操作,若卷内有存量数据请勿执行,会清空所有数据)
如果执行时提示临时空间不足,可先删除根分区下无用的临时文件、旧日志释放少量空间,比如清理sudo mkfs -t ext4 /dev/xvdf/tmp目录下的过期文件、/var/log下的轮转旧日志即可。 - 创建用于挂载新卷的目录,建议将S3下载路径统一放在该目录下,例如创建
/data目录:sudo mkdir -p /data - 临时挂载新卷到该目录:
sudo mount /dev/xvdf /data - 配置开机自动挂载,避免实例重启后卷自动失联:
- 首先查询新卷的UUID,执行命令:
输出中sudo blkid /dev/xvdfUUID="xxxx-xxxx"字段的内容就是卷的唯一UUID,复制该值。 - 编辑fstab配置文件:
在文件末尾新增一行,替换其中的UUID值为你刚才复制的内容:sudo vi /etc/fstab
配置中UUID=你复制的UUID值 /data ext4 defaults,nofail 0 2nofail参数可以保证卷挂载异常时不会阻塞实例启动,避免无法远程连接的问题。保存退出后执行以下命令验证配置是否正确,无输出则代表配置正常:sudo mount -a
- 首先查询新卷的UUID,执行命令:
- 验证挂载结果,执行
df -h,如果输出中存在/dev/xvdf挂载到/data、可用空间约100G的条目,就代表新卷已经正常生效。
后续从S3下载文件时,将本地保存路径设置到/data目录下,就不会占用根分区空间,不会再触发磁盘不足的报错。
另外从lsblk输出可以看到还有一块8G的/dev/xvdb设备也处于未挂载状态,如果需要使用,按照上述相同流程操作即可。
内容的提问来源于stack exchange,提问作者Yafaa Ben Tili
相关产品推荐
相关产品推荐

