新制作文件系统占满:Error writing to file - write (28: No space left on device)
一、问题描述
新制作的文件系统刷机后,发现系统占满
Err:25 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/restricted SourcesError writing to output file - write (28: No space left on device) Error writing to file - write (28: No space left on device)
Ign:68 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/universe Sources
Ign:27 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/multiverse Sources
Ign:69 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/main arm64 Packages
Ign:29 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/main all Packages
Ign:70 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/main Translation-en
Ign:31 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/restricted arm64 Packages
Ign:32 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/restricted all Packages
Ign:33 http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports xenial-backports/restricted Translation-
查看设备信息:
root@xxxxx:/home/rk3308 # df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.8G 1.7G 0 100% /
devtmpfs 245M 0 245M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 9.9M 235M 5% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/mmcblk1p5 4.9M 33K 4.6M 1% /usrdata
tmpfs 49M 0 49M 0% /run/user/1000
root@xxxxx:/home/rk3308 # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk1rpmb 179:96 0 512K 0 disk
mmcblk1boot0 179:32 0 4M 1 disk
mmcblk1boot1 179:64 0 4M 1 disk
mmcblk1 179:0 0 7.3G 0 disk
├─mmcblk1p1 179:1 0 2M 0 part
├─mmcblk1p2 179:2 0 2M 0 part
├─mmcblk1p3 179:3 0 14M 0 part
├─mmcblk1p4 179:4 0 7G 0 part /
└─mmcblk1p5 179:5 0 262M 0 part /usrdata
root@xxxxx:/home/rk3308 #
二、解决方法
执行命令
sudo resize2fs /dev/xxxxxxx
此处我这里执行:
root@xxxxxx:/home/rk3308 # sudo resize2fs /dev/mmcblk1p4
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mmcblk1p4 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk1p4 is now 1835008 (4k) blocks long.root@xxxxxx:/home/rk3308 # df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/root 6.9G 1.7G 4.9G 26% /
devtmpfs 245M 0 245M 0% /dev
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 245M 9.9M 235M 5% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 245M 0 245M 0% /sys/fs/cgroup
/dev/mmcblk1p5 4.9M 33K 4.6M 1% /usrdata
tmpfs 49M 0 49M 0% /run/user/1000
root@xxxxxx:/home/rk3308 #
可见已正常恢复。
三、命令解析
命令作用:动态扩展 ext2/ext3/ext4 文件系统以占用其所在分区的全部可用空间,尤其适用于你遇到的根分区(/
)满载但实际磁盘有未利用空间的情况。
以下是详细解析:
命令核心作用
-
适配分区物理空间
- 当分区(如
/dev/mmcblk1p4
)的物理容量已通过工具(如fdisk
或lvextend
)扩大后,文件系统(如 ext4)并不会自动填充新增空间。 resize2fs
的作用是将文件系统的逻辑边界扩展到与分区物理边界对齐,使文件系统能使用所有新增空间。
- 当分区(如
-
无需卸载的在线操作
- 若内核支持在线调整(Linux 2.6+ 默认支持 ext3/ext4),该命令可在挂载状态下直接执行,无需中断服务。
- 这对根分区(
/
)等关键目录的扩容至关重要。
在我的上述案例中的具体效果
根据我的磁盘布局:
mmcblk1p4 179:4 0 7G 0 part / # 原大小7G,已用100%
执行 sudo resize2fs /dev/mmcblk1p4
后:
- 释放未用空间
文件系统将识别并占用分区中尚未使用的空间(例如,若你已通过fdisk
扩大了该分区),解决Avail=0
的问题。 - 即时生效
扩容后,df -h
会显示根分区可用空间增加,无需重启。
注意事项
-
前置条件
- 必须先扩大分区物理大小(例如用
fdisk
删除重建分区或lvextend
扩展逻辑卷),否则resize2fs
无法生效。 - 若未调整分区,该命令仅会提示
The filesystem is already X blocks long. Nothing to do!
。
- 必须先扩大分区物理大小(例如用
-
文件系统类型限制
仅适用于 ext2/ext3/ext4 文件系统(XFS 需用xfs_growfs
)。 -
强制操作风险
若需跳过安全检查(如文件系统损坏时),可加-f
参数,但可能导致数据丢失