我正在使用Debian。df -h
显示我正在使用大约 275GB:
Filesystem Size Used Avail Use% Mounted on
rootfs 315G 274G 26G 92% /
udev 10M 0 10M 0% /dev
tmpfs 6.4G 200K 6.4G 1% /run
/dev/disk/by-label/DOROOT 315G 274G 26G 92% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 13G 4.0K 13G 1% /run/shm
我想知道 274GB 去哪儿了。下列的答案在这里,我可以看到文件系统正在使用大约 50GB:
$ du -h / --max-depth 3
...
51G /
我也碰巧知道我有一个很大的 Postgres 数据库,所以我可以去检查它使用了多少空间:
$ psql
=> SELECT pg_database.datname, pg_database_size(pg_database.datname), pg_size_pretty(pg_database_size(pg_database.datname)) FROM pg_database ORDER BY pg_database_size DESC;
datname | pg_database_size | pg_size_pretty
-------------+------------------+----------------
mydatabase | 230809349908 | 215 GB
postgres | 6688532 | 6532 kB
template1 | 6570500 | 6417 kB
template0 | 6562308 | 6409 kB
因此,Postgres 使用了大约 215GB,文件系统使用了大约 50GB。
但如何查看剩余的 10GB 去哪儿了呢?
这不是什么大不了的事,但我只是想知道如何追踪这一点。
答案1
多余的空间很可能被分配给打开但已删除的文件。
du
将仅显示那些可通过文件系统访问的文件(即:具有文件名)。删除文件时,其文件名将从目录中删除,但仅当所有进程关闭该文件的打开文件句柄时,磁盘块(和索引节点)才会被释放。遇到此问题的最简单方法是删除打开的日志文件,并期望释放空间。然后,您要么必须强制持有进程关闭其文件句柄,要么终止这些进程(退出的进程总是关闭其所有文件句柄)。进程还有其他方式使用文件(将其作为二进制文件运行、将其作为共享对象加载、将其映射到内存空间)。
要查看正在运行的进程保存了哪些打开但已删除的文件,您可以使用诸如 之类的实用程序lsof
,或者您可以查看/proc/*
.在那里,每个正在运行的进程都有一个目录,以其 PID 命名(例如:/proc/1
PID 号为 1)。在该目录下,一个名为 的符号链接exe
显示了作为进程运行的二进制文件,一个名为 的文件maps
显示了映射到进程内存空间的文件,一个名为 的目录fd
列出了该进程的所有打开的文件句柄。如果您在那里看到(已删除),就是这样。
答案2
为了以交互方式探索文件系统的使用情况,您可以使用诸如xdiskfree
,kdiskfree
或baobab
。
您将获得与 中基本相同的信息,du
但您不必为每个子目录使用它,而只需单击目录即可查看详细信息。
答案3
如前所述,您可以使用 du -sh 命令来确定任何文件夹的总空间使用情况。
您需要使用 sudo 运行此命令,以确保它捕获文件夹中所有内容的大小信息。
-s 选项使 du 递归地检查磁盘使用情况。
-h 选项是为了使输出可读。当您掌握了窍门后,您可以尝试使用和不使用 -h 选项运行 du 并比较输出。有时您可能会发现不带 -h 的输出很有用。
您还可以向 du 命令提交通配符以评估多个文件夹的使用情况。所以:
sudo du -sh /home/*
将为您提供 /home 中每个文件夹的总使用情况
答案4
由于du /
报告 51GB,因此您正在使用 51GB。可能有一些您没有看到的已用空间,例如已删除的文件或被安装点隐藏的文件(请参阅末尾为什么有这么多不同的方法来测量磁盘使用情况?——事实上,整个答案可能很有趣)。但就你的情况而言,这不太可能。
如果 PostgresQL 数据库位于您的文件系统内,那么它将显示为文件并且将计入总数。显然,由于它比您看到的文件大,因此数据库位于您有权访问的目录树之外的其他位置。
315GB 可以与其他用户共享。或者,存储空间可能是经过组织的,以便您可以使用 315GB 文件系统,但您只能看到其中的一部分作为目录树,而数据库位于您看不到的另一部分中。例如,有一个卷/clients/richard
,它有两个子目录root
和database
,并且您只能看到目录树/clients/richard/root
(即您的进程是chrooted那里)。
剩余的 10GB 可能是一些恢复系统(许多 VPS 都有此服务,您可以在其中启动到恢复系统,以防您需要修复无法启动的主系统)。或者它可能是只有 root 可以使用的紧急储备(在中搜索“reserve”)为什么有这么多不同的方法来测量磁盘使用情况?)。