df 命令未显示正确值

Muh*_*ana 8 rhel disk-usage mysql df

这是一个 RHEL 服务器,我在它上面运行一个 MySQL 服务器,数据库和日志文件(但是,日志被禁用)位于/srv有足够空间可用的目录中。

最近我有一个崩溃的表,所以我尝试修复它,但第二天我发现 MySQL 无法响应许多查询,并显示一个错误,表明没有磁盘空间:

ERROR 1030 (HY000): Got error 28 from storage engine
Run Code Online (Sandbox Code Playgroud)

所以我运行以下命令来查看什么占用了空间

[root@tms /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server-slash
                      9.9G  9.5G     0 100% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             485M   58M  402M  13% /boot
/dev/mapper/server-var
                      739G  252G  450G  36% /srv
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是它是/目录。但更令人惊讶的是,在该目录/并不表示已用空间超过2 GB,而df节目总面积9.9 GB/

[root@tms /]# du -sh /*
7.5M    /bin
48M     /boot
200K    /dev
24M     /etc
4.0K    /home
223M    /lib
21M     /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
183M    /opt
...deleted some file-not-found errors for files under /proc
0       /proc
144K    /root
14M     /sbin
4.0K    /selinux
252G    /srv
0       /sys
44K     /tmp
917M    /usr
259M    /var
Run Code Online (Sandbox Code Playgroud)

那么为什么会df显示错误的值呢?我怎样才能找出实际占用空间的内容?

JRF*_*son 14

一种常见的编程技术是创建一个临时文件并立即 unlink() 它。这使得文件(及其空间)在程序运行期间可用,但在使用它的程序终止时自动导致其删除。优点之一是无需编写结语(清理)代码。

要确定您是否有一个打开未链接文件的进程,请执行以下操作:

lsof -a +L1 /dev/server_slash
Run Code Online (Sandbox Code Playgroud)

(或者)

lsof +D /dev/server_slash +L1
Run Code Online (Sandbox Code Playgroud)

查找 NLINK 值为零 (0) 的任何文件。这些将是链接数为零的文件,当最后一个进程终止时,这些文件将消失。SIZE/OFFSET 列将提供相关文件的字符大小。


Baa*_*rud 8

1)df不报告在 unix 风格的文件系统上为 root 保留的空间(默认为 5%)。所以df总是会报告比你应该有的少。

2)虽然在这里,我猜你已经在没有安装 srv-partition 的情况下运行了你的数据库。如果没有挂载 srv-partition,事情将被写入挂载点,即。到 /-partition 中的 srv-directory 下。(root-partition),因此占用了 /-partition 上的大量空间。

但是,当你安装在SRV-目录SRV分区,所有的/ -partition的SRV-目录下的文件变成“隐藏”由你“安装在”它的分区-但空间仍已用完,尽管您无法看到它或访问它以将其删除。

尝试卸载 srv 分区(转到 singleuser-moder/runlevel 1/maintenance 模式,以便一切都停止),检查它是否确实已卸载(使用mount),并查看是否有文件隐藏在您通常用作挂载点的目录下( usr, srv, home, var, tmp, ...) 在 / 分区中。我敢打赌,您会在其中一些中找到重要的东西。完成并重新启动后,请确保 srv-partition 确实按照应有的方式安装。

这 - 您可以在通常由挂载分区隐藏的目录中拥有内容 - 实际上有时很有用。