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 列将提供相关文件的字符大小。
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 确实按照应有的方式安装。
这 - 您可以在通常由挂载分区隐藏的目录中拥有内容 - 实际上有时很有用。