设备上没有剩余空间

82

当我尝试将一些文件通过scp传输到CentOS机器时,出现了“设备上没有剩余空间”的错误。

尝试检查:

[root@...]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol01 18G   18G     0 100% /

当我执行du -sh /命令时,它只返回5G的结果。

[... ~]$ df -i /
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup00-LogVol01
                     4685824  209516 4476308    5% /

好像文件系统已经满了。我该如何找出哪个文件占用了这么多的空间?


也许你可以在'Superuser'或'Unix&Linux'上获得更多/更好的答案。请展示你的scp命令和完整的df列表。你确定要复制到/dev/mapper/VolGroup00-LogVol01吗? - smartmeta
我尝试在那个服务器上启动一些服务。它也给出了相同的错误。 - Futuregeek
我真傻,我的满目标是一个符号链接到另一个已满的驱动器! - Sridhar Sarnobat
4个回答

80

du -shdf -h 的输出差异可能是因为某个大文件已被删除,但仍被某个进程打开。使用命令 lsof | grep deleted 检查哪些进程已打开了对已删除文件的描述符。您可以重新启动该进程以释放空间。


3
我尝试终止那些进程,现在可以了。谢谢! - Futuregeek
3
你如何重新启动这个进程? - IsraGab
如果是守护进程,只需停止并重新启动它。如果不是守护进程,只需使用 killkillall 命令杀死它并重新启动。 - VolenD
我该如何使用killall命令来结束与已删除文件相关联的进程? - Dr.PP
我在某个页面上读到了 lsof / | grep deleted,但是不理解它的作用。感谢您在这里的回答。 - Umesh Kaushik
显示剩余3条评论

65
也许你已经用尽了i节点,尝试运行df -i命令。
                     2591792  136322 2455470    6% /home
/dev/sdb1            1887488 1887488       0  100% /data

磁盘已使用6%,但是i节点表已满。


1
我们能再添加一些inode吗?:)(半开玩笑,半认真) - Ciprian Tomoiagă
tl;dr 不行,你只能通过创建一个具有更多inode的新文件系统,然后将现有文件系统复制到新文件系统中来添加更多inode。 - Chris Browne
1
你使用了/home的6%,但/dev/sbd1使用了100% - 这就是问题所在。很可能是因为你有太多的日志文件。通过运行以下命令来查找大文件:find / \( -path /proc -prune -a -path /dev -prune \) -o -type f -size +100M -exec ls -s1 {} \; 2>/dev/null| sort -n -r | head -n 20 - Robert Guice

15

如果在一台没有lsof的Linux系统中列出持有已删除文件的进程,这里是我的技巧:

    pushd /proc ; for i in [1-9]* ; do ls -l $i/fd | grep "(deleted)" && (echo -n "used by: " ; ps -p $i | grep -v PID ; echo ) ; done ; popd

1

您可以执行以下命令

lsof / | grep deleted

杀死进程ID,释放磁盘空间。


无法工作...... - Matej J
1
在Ubuntu Linux上使用lsof / | grep DEL - peterhil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接