видалення файлів, але дискового простору все ще повно


26

Робота зі старим вікном CentOS 5.6, без налаштування lvm, моя коренева файлова система / заповнена, я очистив багато старих файлів журналів та файлів додатків, які мені не потрібні, розміром більше 2 -5 ГБ, проте моя система як і раніше повідомляє, що диск заповнений.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Будь-яка ідея, що я повинен спробувати зробити далі? на жаль, перезавантаження цього вікна наразі не є можливим.


1
Вибачте за те, що ви задали дурне запитання, але ви переконалися, що ваш /.Trash/порожній? Ви зробили sudo rm -Rf ~/.Trash/*?
Art Gertner

Це сервер, у мене не встановлено xwindow, тому в моєму кореневому обліковому записі немає папки .trash.
користувач1007727

Моє погано, я вважав /.Trash/ існує на всіх системах, схожих на unix.
Art Gertner

також ви можете спробувати команду sync ( linux.die.net/man/8/sync ), можливо, всі ваші операції все ще зберігаються в кеші.
weberik

Відповіді:


38

Тут можуть статися дві речі.

По-перше , у вашій файловій системі зарезервовано певний простір, на який rootможна записувати лише те, щоб критичний системний процес не перепадав, коли у нормальних користувачів не вистачає місця на диску. Ось чому ви бачите 124G 130G використаних, але нуль доступний. Можливо, файли, які ви видалили, привели використання до цього моменту, але не нижче порогового значення для звичайних користувачів.

Якщо це ваша ситуація, і ви відчайдушно, можливо, ви зможете змінити кількість відведеного місця root. Щоб зменшити його до 1% (за замовчуванням - 5%), ваша команда буде

# tune2fs -m 1 /dev/sda3

По-друге , операційна система не звільнить місце на диску для видалених файлів, які все ще відкриті. Якщо ви видалили (скажімо) один із файлів журналу Apache, вам потрібно буде перезапустити Apache, щоб звільнити місце.


1
так, другий має бути першим!
муля

Це питання і відповідь (и) додати більше інформації superuser.com/questions/444269 / ... .
luka5z

18

Якщо ви видалите файл, який використовується процесом, ви більше не можете його переглядати ls. Процес все ще записується у цей файл, поки ви не зупините процес.

Щоб переглянути ці видалені файли, просто запустіть lsof|grep delete


1
Це була проблема в моєму випадку. Дякую, дуже корисна інформація.
Даг Сондре Хансен

Відповідна відповідь: unix.stackexchange.com/questions/34140/…
icc97

10

Ще два способи отримати диск - це повний випуск:

1) приховано під точкою монтажу: linux покаже повний диск з файлами, "прихованими" під точкою кріплення. Якщо у вас є дані, записані на накопичувач, і встановити іншу файлову систему через нього, Linux правильно зазначає використання диска, навіть якщо ви не можете бачити файли під точкою монтажу. Якщо у вас є монтажі nfs, спробуйте перерахувати їх і подивіться, чи щось випадково було записано в цих каталогах перед монтуванням.

2) пошкоджені файли: я періодично бачу це на Windows до передачі файлів Linux через SMB. Один файл не може закрити дескриптор файлу, і ви закінчите файл 4 Гб сміття.

Це може бути виснажливішим, оскільки потрібно знайти підкаталог, у якому знаходиться файл, але це легко виправити, оскільки сам файл легко знімається. Я використовую duкоманду і перелічую кореневі підкаталоги, щоб дізнатися, де використовується простір файлів.

cd /
du -sh ./* 

Кількість каталогів вищого рівня зазвичай обмежена, тому я встановлюю людський читабельний прапор, -hщоб побачити, який підкаталог - це космічна свиня.

Потім ви вступаєте в проблемну дитину і повторюєте процес для всіх елементів у ній. Щоб зробити це легко помітити великі предмети, ми трохи змінимо дю і з'єднаємо її з сортуванням.

cd /<suspiciously large dir>
du -s ./* | sort -n

що дає найменший та найбільший вихід за розміром байтів для всіх файлів та каталогів

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

Як тільки ви помітите негабаритний файл, зазвичай його можна просто видалити.


Чудові поради! Я простежив папки під / за допомогою du і знайшов кілька надзвичайно великих системних зображень під Android SDK. Видалено їх і все повернулося до норми :)
Щеня

4

Ви можете дізнатися, які файли відкриті за допомогою lsof. Це може давати багато результатів, тому я обмежився в прикладі нижче рядками, що закінчуються журналом:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...

1

Якщо деякі файли буде видалено, але все ще використовується деяким процесом, то простір не буде звільнено. У цьому випадку або перезапустіть процес, який використовує файл, або анулюйте файл. Завжди добре застосовувати такі файли, а не видаляти їх. Щоб знайти видалені файли, але вони все ще використовуються деяким процесом

#lsof +L1

він дасть ідентифікатор процесу та дескриптор файлу. Видалити видалений файл за допомогою дескриптора файлу

#echo "" > /proc/$pid/fd/$fd 

1

Введіть команду

#lsof +L1

Який покаже список файлів, що зберігають пам'ять із видаленою цитатою.

Зверніть увагу на pid (ідентифікатор процесу) файла

Вбийте процес

#kill <pid>

Пам'ять буде звільнена процесом

Перевірте це за командою

#df -h

0

Крім того, що було пояснено, проблема може полягати в тому, що на іншому приєднаному дисковому пристрої на тому ж сервері є інша точка монтажу видаленого файлового каталогу. Перевірте поточні кріплення та записи fstab.


0

Актуальна проблема, що спостерігається в природі:

Переконайтесь, що ви видаляєте фактичні файли, а не посилання на файли. Це стосується особливо файлів журналів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.