Що їсть мій диск?


13

Я запускаю Linux Mint 14 Nadia. У розділі Linux є 10G. Коли система запускається, duповідомляє про 80% використання. Потім використання повільно зростає, поки не досягне 100% і система не стане непридатною. (Це може статися в порядку днів або тижнів). Після перезавантаження використання скидає до 80%.

Найдивніше з усіх, що duне показує змін.

Ось висновок цих команд (Windows і розділи зовнішнього диска є залишеними):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(Примітка: я використовую сплячку. Після сплячки режим користування залишається таким же, а після перезавантаження він скидає до 80%.)

Як я відстежую, що їсть простір?

Я прочитав це питання . Я все ще в темряві. Як дізнатись, яка програма відповідає за таку поведінку?

Після редагування : знайшов його. Простір вимагає журнал ядра, який бачить dmesg. Це заповнюється, тому що моя машина генерує помилки зі швидкістю 5 секунди. (Це пов'язано з цією помилкою .) Нехай майбутні читачі мають подібну проблему - повільно заповнюючи дисковий простір, небачений du- не забудуть спробувати dmesgпошукати причину.


1
Я віддаю перевагу ncduнад простою duдля пошуку великих файлів | каталогів. Він сканує все дерево каталогів, перш ніж він дозволяє вам робити що-небудь; ви можете пройти його певним шляхом (наприклад, ncdu /varабо навіть просто ncdu ~)
Blacklight Shining

Кілька гідних відповідей уже на цьому сайті.
Sparhawk

Відповіді:


15

Повторне виконання

sudo du -x   -d1 -h /

(внизу дерева каталогів) повинно вказати, де витрачається простір. Це, мабуть, пояснює без подальшого розслідування, яка програма викликає це.

невидимі файли

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

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

Ви можете знайти ці файли за допомогою find:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

Це може стати одним величезним файлом або купою менших файлів, які викликають ваші проблеми. Зараз у моїй системі існує близько 30 таких файлів (які належать лише до п’яти процесів). ls -lпоказує розмір цих файлів, але, здається, отримати це значення неможливо find.

Після вбивства процесу простір знову стає доступним для файлової системи ( df).


Це не стосується мого питання. duповідомляє про відсутність зміни споживаного простору: 7,3 Г на старті та 7,3 Г після проходження часу. dfзвітує 7,3 Г безкоштовно на старті та до 10 Г за часом. Я не можу знайти проблему du.
Аррі

@Arry Дійсно, я читав занадто швидко.
Hauke ​​Laging

8

Використовуйте щось подібне

lsof -s | grep deleted | sort -k 8

щоб побачити, які процеси зберігають видалені файли відкритими. Важливими полями є друге (PID) та восьме (третє з останнього; розмір файлу).

(Зверніть увагу на дублювані рядки, не рахуйте їх двічі. Перевірте PID і шлях до файлу (останнє поле) або номер вводу (друге до останнього поля).)

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


Хороша пропозиція, але на моїй машині ця команда повідомляє лише про 2 відкритих видалених файли розміром 2k, що далеко не в 2.7G, споживаному за деякий час.
Аррі

Це було чудовою пропозицією, і це дійсно допомогло мені вирішити проблему, подібну до батьківського питання. У мене було величезне розбіжність між командами df та du. У моєму конкретному випадку у мене є обертові журнали та служба, яка пересилає журнали (logstash у цьому прикладі). Служба реєстрації даних зберігала повернені журнали відкритими, навіть коли їх видалено. Це спричинило розбіжність між du та df. Після того, як послуга реєстрації даних була перезапущена, на диску з’явився вільний простір.
аем

У мене був процес написання файлу лише для додатків, який зростав нескінченно і з часом заповнив мій диск. Тоді я вирішив запустити цей файл, але процес не закрив його дескриптор файлів, тому він якось все ще використовується. Перезапуск процесу та обмеження розміру AOF вирішили мою проблему.
aviggiano

Варто зауважити, що для цього потрібні привілеї root. Також я використовував sudo lsof -s | grep deleted | sort -hk7числовий сорт. Без -h, сортування робить смішні лексичні речі з цифрами.
Дерек

Це дивовижні речі. Оголошено
Течі

4
find / -size +10000k -print0 | xargs -0 ls -l -h

Використовуйте це , щоб знайти рекурсивно , що заповнення більш 10MB + з /(корінь), а також відображати його з лотами деталей з ls -lв xargs. Якщо ви запишете 1000000 (2 додаткові нулі), ви можете отримати, наприклад, 1 ГБ +.

du / -h --max-depth=1 | sort -h

Ви також можете використовувати du і просто викопати його вручну.


1

Щоразу, коли це трапляється, я завжди починаю свою увагу в певних підкаталогах. Слід мати на увазі структуру FHS, якої дотримується більшість дистрибутивів Linux.

Спочатку загляньте /var, а потім /home.

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

Ви також можете звузити фокус на підкаталогах в будь-якому з цих місць. Після того, як ви змучені зазирнути туди, я, як правило, переїжджаю до /rootостаннього підкаталогу в /.

Якщо це дистрибутив на основі Red Hat, кеш, який yumвикористовується для оновлення, може зайняти велику кількість місця. Ви можете скористатися цією командою, щоб очистити її:

$ yum clean packages

Інші дистрибутиви , що використання aptможе зробити що - щось подібне, apt-get clean.

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

$ ls -la /

Зверніть особливу увагу на крапки з файлами! Речі, названі .blah, наприклад.



0

У мене майже однакова ситуація.

У моєму випадку причиною став VMware. Один з інших VMwares на тій же машині, він займав місця на диску. Ось чому використання мого дискового простору становило 100%.

Після видалення великих файлів з VMware сусіда він працює правильно.

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