Недавно я получил предупреждение, что мой домашний раздел заполнен. Это Ext4-раздел, установленный на /home
, /dev/sda
это SSD на 240 ГБ:
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 Disk Usage Analyzer и du -h
находят только около 89 ГБ данных. ~/.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
. Мой плохой, извини.
Каждая файловая система только имеет определенное количество inodes и блоков, которые могут быть сохранены на нем. Даже в случае, если существует достаточно пространства, Вы не можете пойти далее.
Проверьте свои настройки с
dumpe2fs /dev/sda5
(только лучшие 50 строк важны здесь).
Если у Вас есть много маленьких файлов, которые меньше, чем blocksize, много пространства потрачено впустую.
Могло случиться так, что некоторый процесс все еще удалил открытые файлы. Если это верно, затем они не появятся в du
вывод, но был бы все еще включен df
вывод.
Один быстрый способ проверить на них состоит в том, чтобы перечислить /proc
как пользователь root
(подсказка sudo su
должен получить Вас корневая оболочка). Любой открывается, но удаленные файлы будут иметь (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
Если у Вас есть какие-либо процессы с большими удаленными файлами, открытыми, затем останавливания процесса должно быть достаточно для исправления дискового пространства. Кроме того, перезагрузка должна сделать то же самое.