一套完整、可直接复制执行的操作清单,按步骤来就能解决你的 EXT4 磁盘 “空间明明有,却显示 0 可用” 的问题
======================================
一套完整、可直接复制执行的操作清单,按步骤来就能解决你的 EXT4 磁盘 “空间明明有,却显示 0 可用” 的问题。
==================================================================
===========
# 把 /dev/sdX1 换成你刚才查到的设备名(比如 /dev/sdb1) sudo umount /dev/sdc2
=====================================
sudo fuser -km /media/ubunto/SHARE sudo umount /dev/sdc2
====================
sudo tune2fs -m 1 /dev/sdc2
# 先创建挂载点(如果不存在的话) sudo mkdir -p /media/ubunto/SHARE # 挂载磁盘(替换 /dev/sdX1) sudo mount /dev/sdc2 /media/ubunto/SHARE
===========================================================
==================================================================
===========
# 把 /dev/sdX1 换成你刚才查到的设备名(比如 /dev/sdb1) sudo umount /dev/sdc2
=====================================
sudo fuser -km /media/ubunto/SHARE sudo umount /dev/sdc2
====================
sudo tune2fs -m 1 /dev/sdc2
# 先创建挂载点(如果不存在的话) sudo mkdir -p /media/ubunto/SHARE # 挂载磁盘(替换 /dev/sdX1) sudo mount /dev/sdc2 /media/ubunto/SHARE
===========================================================
一、准备工作:确认磁盘信息
先打开终端,执行以下命令,获取磁盘设备名(比如/dev/sdb1):
bash
运行
lsblk
输出示例:
plaintext
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi └─sda2 8:2 0 238G 0 part / sdb 8:16 0 421.8G 0 disk └─sdb1 8:17 0 421.8G 0 part /media/ubunto/SHARE
这里你的目标设备就是sdb1(你的设备名可能不同,比如sdc1,记下来,后面要替换)。
二、步骤 1:卸载磁盘(必须先卸载!)
先确保磁盘没有被占用,关闭所有打开这个磁盘文件的窗口 / 程序,然后执行卸载:
bash
运行
# 把 /dev/sdX1 换成你刚才查到的设备名(比如 /dev/sdb1) sudo umount /dev/sdX1
如果提示 “目标忙”,执行下面命令强制卸载(或先关闭占用进程):
bash
运行
sudo fuser -km /media/ubunto/SHARE sudo umount /dev/sdX1
三、步骤 2:修改 EXT4 保留块比例(核心操作)
你的是非系统盘,直接把保留比例设为0即可,释放全部空间给普通用户:
bash
运行
# 把 /dev/sdX1 换成你的设备名 sudo tune2fs -m 0 /dev/sdX1
如果想留一点安全空间(比如 1%),可以用下面这条(可选):
bash
运行
sudo tune2fs -m 1 /dev/sdX1
四、步骤 3:重新挂载磁盘
修改完保留块后,重新挂载磁盘:
bash
运行
# 先创建挂载点(如果不存在的话) sudo mkdir -p /media/ubunto/SHARE # 挂载磁盘(替换 /dev/sdX1) sudo mount /dev/sdX1 /media/ubunto/SHARE
五、步骤 4:验证结果
执行下面命令,确认可用空间恢复正常:
bash
运行
df -h /media/ubunto/SHARE
正常输出示例:
plaintext
Filesystem Size Used Avail Use% Mounted on /dev/sdX1 422G 402G 20G 95% /media/ubunto/SHARE
此时图形界面的 “剩余空间” 也会同步更新,普通用户就能正常写入了。
(可选)额外排查:inode 是否耗尽
如果上面操作后还是提示空间不足,检查一下 inode 是否用完了:
bash
运行
df -i /media/ubunto/SHARE
- 如果IUse%显示接近100%,说明 inode 耗尽(文件数量上限用完了),需要删除部分无用小文件,或备份数据后重新格式化磁盘。
(可选)文件系统错误检查
如果磁盘长期未检查,可能有日志错误导致空间计算异常:
bash
运行
# 卸载磁盘后执行(替换 /dev/sdX1) sudo e2fsck -f /dev/sdX1
提示 “需要修复” 时,输入y确认即可。
(可选)永久挂载配置(/etc/fstab)
如果你是通过/etc/fstab自动挂载的磁盘,修改完保留块后,重启不会失效。如果想优化挂载参数,可以编辑/etc/fstab:
bash
运行
sudo nano /etc/fstab
找到你的 SHARE 磁盘那一行,修改为类似这样(示例):
plaintext
/dev/sdX1 /media/ubunto/SHARE ext4 defaults,noatime 0 2
保存后执行:
bash
运行
sudo mount -a
⚠️ 注意事项:
- 所有命令里的/dev/sdX1必须替换成你自己的设备名,别直接复制!
- 必须先卸载磁盘,才能用tune2fs修改保留块。
- 这个方法不会影响磁盘里的任何数据,是安全的。
================================================================================
看到没有?在 Ubuntu 上面,我这个磁盘它还有空间的。你看到没有?那个白色的就是没有用的空间,一共 400 428G, 用了的话还有一些的,但是它那里字符的话,剩余字符是 0 字符。也就是说它显示它那边的话是说不能用了。这实际上它有能用的,用电脑打用那个,反正这个磁盘的话是 EXT4 的,它是有空间的,之前能的都能读,怎么办呢?
你遇到的是 EXT4 文件系统 “空间明明有,却显示剩余 0 字节” 的经典问题,这不是 bug,是 EXT4 的设计特性导致的。我帮你一步步拆解原因和解决方案
核心原因:EXT4 的 “保留块” 机制
EXT3/EXT4 文件系统默认会为root用户预留 5% 的磁盘空间,用于防止系统进程在磁盘满时崩溃。你的磁盘总容量是421.8 GB,计算一下:
- 5% 保留空间 ≈421.8 × 5% ≈ 21.1 GB
- 你当前已用402.1 GB,402.1 + 21.1 ≈ 423.2 GB(和你的总容量几乎一致)
-
所以对普通用户来说,可用空间已经被 “用完了”,但对 root 用户来说,还有这部分保留空间可以用。
这就是为什么图形界面显示 “剩余 0 字节”,但你感觉还有空间的原因。
️ 分步解决方法
方法 1:临时以 root 权限写入(应急用)
如果只是临时需要写入文件,可以用sudo提权操作:
bash
运行
# 复制文件到你的SHARE目录,用root权限 sudo cp 你的文件 /media/ubunto/SHARE/
但这个方法治标不治本,普通用户还是无法写入。
方法 2:调整 EXT4 的保留块比例(推荐,永久解决)
这是最根本的方法,直接修改文件系统的预留空间比例。
-
先卸载磁盘(关键步骤!必须卸载才能修改)bash运行
# 先查看磁盘设备名(比如 /dev/sdb1) lsblk # 卸载磁盘(把/dev/sdX1换成你的设备名) sudo umount /dev/sdX1
-
调整保留块比例
- 如果你是个人用的非系统盘,完全可以把保留比例设为 0:
bash运行# 把/dev/sdX1换成你的设备名 sudo tune2fs -m 0 /dev/sdX1
- 如果你想留一点安全空间,比如留 1%:
bash运行sudo tune2fs -m 1 /dev/sdX1
-
重新挂载磁盘bash运行
sudo mount /dev/sdX1 /media/ubunto/SHARE
-
验证结果bash运行
df -h /media/ubunto/SHARE
你会看到 “可用空间” 已经恢复正常了!
方法 3:检查 inode 是否耗尽(排除另一种可能)
EXT4 有两个限制:磁盘块(空间) 和 inode(文件数量)。你目录里有176,735项,如果 inode 用完了,也会显示 “剩余 0”。
bash
运行
# 查看inode使用情况 df -i /media/ubunto/SHARE
如果IUse%接近 100%,说明 inode 耗尽了,解决方法:
- 删除一些无用的小文件(比如大量缓存、临时文件)
- 备份数据后重新格式化磁盘,创建时指定更大的 inode 数量(不推荐新手操作)
方法 4:检查文件系统错误
磁盘挂载时间长了可能有日志错误,也会导致空间计算异常:
bash
运行
# 卸载磁盘后执行检查(/dev/sdX1换成你的设备) sudo e2fsck -f /dev/sdX1
补充说明
- 你这个/media/ubunto/SHARE是一个外部挂载的磁盘(不是系统盘),所以完全可以把保留块设为 0,不会影响系统稳定性。
- 如果你是通过/etc/fstab挂载的磁盘,修改完保留块后,重启也不会失效。
- 图形界面的 “剩余空间” 显示的是普通用户可用空间,不包含 root 保留部分,所以会显示 0,命令行df -h看到的才是完整信息。
=======================================================