【问题标题】:No space left on device [closed]设备上没有剩余空间[关闭]
【发布时间】:2014-08-31 12:54:35
【问题描述】:

当我尝试将一些文件 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% /

似乎文件系统已满。 我怎样才能找到哪个尺寸这么大?

【问题讨论】:

  • 也许您会在“超级用户”或“Unix 和 Linux”上获得更多/更好的答案。请显示您的 scp 命令和完整的 df 列表。你确定要复制到/dev/mapper/VolGroup00-LogVol01?
  • 我尝试在该服务器中启动一些服务。它也给出了同样的错误

标签: linux filesystems centos


【解决方案1】:

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

【讨论】:

  • 我试图杀死这些进程并且它正在工作。谢谢!
  • 永远不会猜到被删除的文件可能仍然存在。谢谢你。
  • 如何重启进程? @user3584460
  • @IsraGab 如果它是一个守护进程,只需停止并启动它。如果它不是守护进程,只需用killkillall 杀死,然后启动它。
  • 我如何将 killall 用于与已删除文件关联的进程?
【解决方案2】:

也许你的 inode 用完了。试试df -i

                     2591792  136322 2455470    6% /home
/dev/sdb1            1887488 1887488       0  100% /data

磁盘已使用 6%,但 inode 表已满。

【讨论】:

  • 我们可以添加更多的 inode 吗? :)) (部分开玩笑,部分严肃)
  • unix.stackexchange.com/questions/26598/… tl;dr 不,不是真的 - 您只能通过创建具有更多 inode 的新文件系统然后将现有文件系统复制到新文件系统来添加更多 inode。
  • 您使用了 /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
【解决方案3】:

要列出持有已删除文件的进程,请使用 no 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

【讨论】:

    【解决方案4】:

    可以执行以下命令

    lsof / |grep 已删除

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

    【讨论】:

    • 不工作.....
    • 在 Ubuntu Linux 上使用 lsof / | grep DEL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2012-01-14
    • 2012-05-15
    • 2018-11-22
    • 2015-07-21
    • 2020-12-16
    相关资源
    最近更新 更多