一套完整、可直接复制执行的操作清单,按步骤来就能解决你的 EXT4 磁盘 “空间明明有,却显示 0 可用” 的问题遇到的是 EXT4 文件系统 “空间明明有,却显示剩余 0 字节” 的经典问题,这不是 bug,是 EXT4 的设计特性导致的 一步步拆解原因和解决方案

一套完整、可直接复制执行的操作清单,按步骤来就能解决你的 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/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 的保留块比例(推荐,永久解决)

这是最根本的方法,直接修改文件系统的预留空间比例。
  1. 先卸载磁盘(关键步骤!必须卸载才能修改)
    bash
    运行
    # 先查看磁盘设备名(比如 /dev/sdb1) lsblk # 卸载磁盘(把/dev/sdX1换成你的设备名) sudo umount /dev/sdX1
  2. 调整保留块比例
    • 如果你是个人用的非系统盘,完全可以把保留比例设为 0:
    bash
    运行
    # 把/dev/sdX1换成你的设备名 sudo tune2fs -m 0 /dev/sdX1
    • 如果你想留一点安全空间,比如留 1%:
    bash
    运行
    sudo tune2fs -m 1 /dev/sdX1
  3. 重新挂载磁盘
    bash
    运行
    sudo mount /dev/sdX1 /media/ubunto/SHARE
  4. 验证结果
    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看到的才是完整信息。






=======================================================


刀神道一奶-商品自动发货系统

联系我们 订单查询