我遇到了一个客户服务器磁盘空间不足的问题。
命令的输出ls -lah
显示/var/lib/mysql
:
drwx------ 2 mysql mysql 16K Dec 30 2015 database_xyz
但是当我使用命令检查同一目录中的文件大小时du -sh *
,输出显示:
22G database_xyz
为什么这些命令的输出会显示两个完全不同的结果?
我的驱动器上只剩下2.2GB的空间了。
root@jon-cust-lifeincity:/var/lib/mysql# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-root 49G 44G 2.2G 96% /
tmpfs 1007M 0 1007M 0% /lib/init/rw
udev 1002M 108K 1002M 1% /dev
tmpfs 1007M 0 1007M 0% /dev/shm
/dev/sda1 228M 16M 200M 8% /boot
编辑:
事实证明那database_xyz
实际上是一个目录,而不是一个文件。所以这个混淆是我的大脑造成的。
答案1
看来你误解了你被告知的内容。该ls -lah
命令列出了当前目录的内容。在这个特定情况下,它是 /var/lib/mysql
。除其他事项外,你被告知了这一点
drwx------ 2 mysql mysql 16K Dec 30 2015 database_xyz
您误解了这句话的意思。
您可以将目录视为包含目录条目列表的平面文件。(简单来说)目录条目是文件名和指向该文件在磁盘上的位置的指针。此信息占用磁盘空间。
什么
drwx------ 2 mysql mysql 16K Dec 30 2015 database_xyz
告诉您,其中有一个/var/lib/mysql
名为的目录条目database.xyz
。该条目用于表示文件类型的信息d
,表明它是一个目录,此外,目录“文件”的大小为 16K。
答案2
了解尺寸数据库_xyz文件仅输入
du -sh database_xyz
你会得到准确的结果
答案3
ls
不是查找目录大小的合适工具。它仅适用于文件,不适用于目录。
我看到你正在列出目录的详细信息(第一个d
字符)
drwx------ 2 mysql mysql 16K Dec 30 2015 database_xyz
改用du
。这是一个类似帖子在 stackoverflow。