我最近收到一条警告,说我的主分区已满。这是一个安装在 上的 Ext4 分区/home
,/dev/sda
是一块 240 GB 的 SSD:
hannes@XFLR6 ~> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 5.2G 13G 30% /
none 3.9G 792K 3.9G 1% /dev
none 3.9G 2.4M 3.9G 1% /dev/shm
none 3.9G 712K 3.9G 1% /var/run
none 3.9G 0 3.9G 0% /var/lock
/dev/sda5 193G 175G 7.9G 96% /home
/dev/sdb5 357G 92G 264G 26% /mnt/schacht
如您所见,df -h
(和 gparted)报告/dev/sda5
已满 96%。但是,Ubuntu 磁盘使用情况分析器du -h
仅找到大约 89 GB 的数据。~/.gvfs
是空的,下面没有安装其他文件系统/home
。怎么会这样?我已经尝试du
以 root 身份运行,但它没有任何变化。
root@XFLR6 ~# sudo fdisk -l /dev/sda
Disk /dev/sda: 240.1 GB, 240057409536 bytes
255 heads, 63 sectors/track, 29185 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003e4c5
Device Boot Start End Blocks Id System
/dev/sda1 * 1 2432 19530752 83 Linux
/dev/sda2 2432 28450 208984065 5 Extended
/dev/sda5 2432 27963 205077504 83 Linux
/dev/sda6 27963 28450 3905536 82 Linux swap / Solaris
编辑:哎呀 - 我只du
在 上运行,~
而不是在 上/home
- 有很多数据被无意复制到/home
。我的错,抱歉。
答案1
可能是某些进程仍打开了已删除的文件。如果是这种情况,则这些文件不会出现在输出中du
,但仍会被计入df
输出中。
检查这些的一个快速方法是以/proc
用户身份列出root
(提示sudo su
应该会给你一个 root shell)。任何打开但被删除的文件都将(deleted)
在符号链接目标名称的末尾。
ls -l /proc/*/fd/* | grep deleted | grep /home
应该会为您提供所有打开的文件的列表。获得该列表后,单击ls -lL
特定文件,即可获得文件的大小。
作为示例(/tmp
在我的系统上使用,因为这里没有示例/home
)我看到了用户拥有的几个文件mysql
。
richm@viking:/$ sudo su
root@viking:/# ls -l /proc/*/fd/* | grep deleted | grep /tmp
lrwx------ 1 root root 64 Oct 13 06:30 /proc/1489/fd/11 -> /tmp/ibwmCqpg (deleted)
lrwx------ 1 root root 64 Oct 13 06:30 /proc/1491/fd/12 -> /tmp/ib9MTMQi (deleted)
root@viking:/# ls -lL /proc/1489/fd/11
-rw------- 0 mysql2 mysql2 0 Aug 24 14:09 /proc/1489/fd/11
root@viking:/# ls -lL /proc/1491/fd/12
-rw------- 0 mysql mysql 1320 Oct 15 13:40 /proc/1491/fd/12
如果您有任何进程打开了大型已删除文件,则停止该进程应该足以回收磁盘空间。或者,重新启动应该可以达到同样的效果。
答案2
每个文件系统都只有一定数量的 inode 和块可供存储。即使有足够的空间,您也无法继续。
使用以下方法检查您的设置
dumpe2fs /dev/sda5
(这里只有前 50 行很重要)。
如果您有很多小于块大小的小文件,则会浪费大量空间。