Немає більше місця на диску: Як знайти те, що займає місце?


81

У мене виникла проблема на одному з моїх серверів під керуванням 16.04: немає місця на диску.

Я поняття не маю, що займає простір. Чи є команда перелічити поточні розміри каталогів, щоб я міг перейти та опинитися в каталозі, зайнявши весь простір?


1
Перевірте аналізатор використання диска
Pranal Narayan

@PranalNarayan Немає графічного інтерфейсу, оскільки він є на моєму сервері. Боюся :(
Карл Моррісон

1
Чорт забираю , зараз я пішов шукати, знайшов цю помилку .
Сем

1
wrt "немає графічного інтерфейсу, це сервер": ви можете встановити додаток GUI (якщо припустити, що ви задоволені ним і бібліотеки підтримки знаходяться на сервері), а використання на локальному екрані через X11 з тунелем через SSH з чимось на зразок export DISPLAY=:0.0; ssh -Y <user>@<server> filelight(замініть filelightулюбленим інструментом). Звичайно, абсолютно не залишилося місця, якщо у вас ще не встановлений інструмент, вам все одно доведеться використовувати щось інше!
Девід Спіллетт

4
@DavidSpillett Як зазначено, на сервері не залишається місця . Тому я нічого не можу встановити.
Карл Моррісон

Відповіді:


93

Як завжди в Linux, існує більше ніж один спосіб зробити роботу. Однак якщо вам потрібно зробити це з CLI, це мій кращий метод:

Почніть з запуску цього файлу як root або з sudo:

du -cha --max-depth=1 / | grep -E "M|G"

Поглинання полягає в обмеженні повертаються ліній на ті, які повертаються зі значеннями в діапазоні Мегабайт або Гігабайт. Якщо ваші диски досить великі, ви можете також додати |Tсуми Терабайт. Ви можете отримати деякі помилки на /proc, /sysта / або /devтому, що вони не є реальними файлами на диску. Однак він все одно повинен забезпечити дійсний вихід для решти каталогів у корені. Після того як ви знайдете найбільші, ви можете запустити команду всередині цього каталогу, щоб звузити шлях винуватця. Так, наприклад, якщо це /varбуло найбільше, ви могли б зробити це наступним чином:

du -cha --max-depth=1 /var | grep -E "M|G"

Це повинно привести вас до проблемних дітей!

Додаткові міркування

Хоча вищезазначена команда, безумовно, зробить трюк, у коментарях нижче я зазнав конструктивної критики, яка вказала на деякі речі, які ви також можете включити.

  1. Наданий grepя міг призвести до того, що час від часу повертається значення "K", якщо у імені каталогу чи файлу є велика літера G або M. Якщо ви абсолютно не хочете, щоб жоден із вказаних K-каталогів відображався, ви хочете отримати Ваша гра-регекс буде більш креативною та складною. напрgrep -E "^[0-9\.]*[MG]"
  2. Якщо ви знаєте, в чому проблема, і на ній є інші приєднані диски, на які ви не хочете витрачати час, включаючи пошук, можете додати -xпрапор до своєї duкоманди. Опис чоловічої сторінки цього прапора:

      -x, --one-file-system
          skip directories on different file systems
    
  3. Ви можете сортувати результат duкоманди так, щоб найвище значення було внизу. Просто додайте це до кінця команди:| sort -h


Це саме те, що я роблю.
Гонки легкості по орбіті

5
Ваш греп повертає будь-які папки з літерами M або G на їх іменах, креативний регулярний вираз повинен містити цифри за допомогою додаткової крапки + M | G, можливо"^[0-9]*[.]*[0-9]*[MG]"
Xen2050

4
Якщо ви знаєте, що в цьому полягає проблема одного диска, ви можете скористатися -xопцією, щоб duзупинитись на цьому диску (надається в командному рядку). Ви також можете sort -hпровести правильне впорядкування мегабайт / гігабайт читабельних значень. Зазвичай я залишаю цей --max-depthваріант і просто шукаю весь диск таким чином, сортуючи відповідним чином, щоб отримати найбільші речі внизу.
Мюзер

1
@alexis Мій досвід полягає в тому, що іноді я стикаюся з іншим сміттям, встановленим нижче точки монтажу, в якій я зацікавлений (особливо, якщо це є /), і використання -xмені дає гарантію, що я не зникну з рахунків. Якщо у вас /повно, а у вас є окремо встановлений /homeабо що завгодно, використання -xв значній мірі необхідності позбутися непотрібних речей. Тому я вважаю, що просто використовувати це постійно, про всяк випадок.
Мюзер

1
Якщо у вас є сорт, вам не потрібна грепа.
OrangeDog

77

Ви можете використовувати ncduдля цього. Це працює дуже добре.

sudo apt install ncdu

введіть тут опис зображення


34
Я брикаю себе, як я фактично використовую цю програму, однак, оскільки не залишилося місця, я не можу її встановити ха-ха
Карл Моррісон

@KarlMorrison Я бачу декілька можливих рішень, просто встановіть його на sshfs на іншому комп’ютері та запустіть там ncdu (якщо ви вже маєте на ньому ssh-сервер ..) - або якщо на ньому немає SSH-сервера, ви можете це зробити Зворотний бік, встановіть ncdu на інший сервер і змонтуйте його за допомогою sshfs та запустіть ncdu з кріплення (припускаючи, що у вас вже є sshfs на сервері) - або якщо у вас немає жодного, ... якщо ncdu - це єдиний скрипт, ви може просто curl http://path/to/ncdu | sh, і він працюватиме в кеш-пам'яті IO stdin, але це зажадає певної удачі. Мабуть, є спосіб зробити також оперативний диск
hanshenrik

@KarlMorrison або ви можете завантажити живий образ Linux та встановити його там.

один раз встановлений тип sudo ncdu /з командного рядка. sudoтому що якщо ви не ставите sudo, він не буде розміщувати звіти про папки, що належать корінь, і /тому що, якщо ви не вводите, що він буде повідомляти лише рекурсивно вниз з папки, в якій ви перебуваєте
Макс Керролл

19

Я використовую цю команду

sudo du -aBM -d 1 . | sort -nr | head -20

Інколи мені потрібно запустити його з /каталогу, оскільки я щось розмістив у непарному місці.


Даючи вам +1 за його роботу! Однак рішення TopHats насправді читає мій диск швидше!
Карл Моррісон

Мені часто буває корисніше це робити без -d 1перемикача (і, як правило, lessзамість цього head -20), так що я отримую повний рекурсивно перелічений список усіх файлів і каталогів, відсортованих за обсягом, який вони споживають. Таким чином, якщо я бачу каталог, що займає багато місця, я можу просто прокрутити вниз, щоб побачити, чи більша частина простору займає якийсь конкретний файл або підкаталог у ньому. Це хороший спосіб знайти непотрібні файли та каталоги, які потрібно видалити, щоб звільнити місце: просто прокрутіть униз, доки не з’явиться щось, що ви впевнені, що не хочете зберігати, видаліть його та повторіть.
Ільмарі Каронен

@KarlMorrison не читає його швидше, він просто sortчекає завершення виходу до початку виведення.
muru

@muru Ну добре. Однак я отримую інформацію швидше, щоб я міг швидше подорожувати, якщо це кращий термін!
Карл Моррісон

13

Про способи пошуку каталогів, що займають більшу частину місця, вже існує багато хороших відповідей. Якщо у вас є підстави вважати, що основна проблема є великими файлами, а не багато маленьких, ви можете використовувати щось на кшталт find / -size +10M.


11

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

  1. Дізнайтеся, у якій файловій системі не вистачає місця

    df -h
    

    перерахує всю файлову систему, їх розмір та вільний простір. Ви витрачаєте час лише, якщо досліджуєте файлові системи, у яких достатньо місця. Припустимо, що повна файлова система є / myfilesystem. перевірити вихід df, чи є файлові системи, встановлені на підкаталогах / myfilesystems. Якщо це так, до цієї ситуації повинні бути пристосовані наступні заклики.

  2. Дізнайтеся, скільки місця використовується файлами цієї файлової системи

    du -sh /myfilesystem
    

    Параметр -x може використовуватися для гарантування врахування лише тих файлів, які є учасниками цієї файлової системи. Деякі варіанти Unix (наприклад, Solaris) не знають опцію -x для du. Тоді вам доведеться скористатися деякими обхідними шляхами, щоб знайти дію вашої файлової системи.

  3. Тепер перевірте, чи розмір видимих ​​файлів приблизно розмір використовуваного простору, відображеного df. Якщо так, ви можете почати знаходити великі файли / каталоги файлової системи / myfilesystem для очищення.

  4. щоб знайти найбільші підкаталоги каталогу /.../dir використання

    du -sk /.../dir/*|sort -n
    

    Варіант -k змушує дю виводити сиє в кілобайт без жодної одиниці. Це може бути дефолт у деяких системах. Потім ви можете пропустити цю опцію. Найбільші файли / підкаталоги будуть показані внизу виводу.

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

Але що сталося, якщо висновок du не є приблизно наявним простором, відображеним df?

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

  1. деякі процеси використовують файл, який вже був видалений. Тому ці файли були вилучені з каталогу, і їх неможливо побачити. Але для файлової системи їх блоки все ще використовуються до тих пір, поки прибутки не закриють файли. Ви можете спробувати знайти відповідні процеси (наприклад, з lsof) і змусити їх закрити ці файли (наприклад, зупинивши програму або вбивши процеси). Або ви просто перезавантажте машину.

  2. є файли в каталогах, які більше не видно, оскільки в одному з батьківських каталогів інша файлова система змонтована. Отже, якщо у вас є файл / myfilesysem / subdir / bigfile і тепер змонтуйте іншу файлову систему в / myfilesystem / subdir, ви більше не можете бачити цей файл і

    du -shx /myfilesystem 
    

    повідомить про значення, яке не містить розмір / myfilesystem / subdir / bigfile. Єдиний спосіб дізнатися, чи існують такі файли, - це відключити / myfilesystem / subir та перевірити

    ls -la /myfilesystem/subdir 
    

    якщо він містить файли.

  3. Можливо, існують спеціальні типи файлових систем, які використовують / резервують простір на диску, який не видно команді ls. Для його відображення потрібні спеціальні інструменти.

Окрім цього систематичного способу використання команди du, ви можете скористатися і іншими. Таким чином, ви можете скористатися командою find, щоб знайти файли, які перевищують якесь значення, яке ви надаєте, ви можете шукати файли, що перевищують якесь значення, яке ви надаєте, або які були створені нещодавно або мають спеціальне ім’я (наприклад, * .log, core, * .trc). Але ви завжди повинні робити df, як описано в 1, щоб ви працювали в правій файловій системі


На зайнятому сервері ви не завжди можете відключити речі. Але ви можете прив’язати монтування верхнього каталогу до тимчасового місця, і воно не буде включати інші версії та дозволить отримати доступ до прихованих файлів.
Зан Лінкс

Перед системою у мене часто виникали збої в монтажі, в результаті заповнення / кріплення сміття. Запис резервної копії в / mnt / резервну копію, наприклад, без підключеного USB-накопичувача. Тепер я переконуюсь, що ці підрозділи роботи мають вимоги до кріплення.
Зан Лінкс

@ZanLynx Дякую, я ніколи не чув про прив'язування кріплень раніше
miracle173

@ZanLynx: Не тільки на зайнятих серверах. Уявіть, що у вас є /tmpокрема файлова система (наприклад, tmpfs) і щось створене файлами, /tmpперш ніж вона стала точкою кріплення до іншої файлової системи. Тепер ці файли сидять у кореневій файловій системі, затьмарені точкою монтажу, і ви не можете отримати доступ до них без перезавантаження в режим відновлення (який не обробляється /etc/fstab) або, як ви запропонували, прив'язування.
Девід Фоерстер

9

Якщо ви також зацікавлені не використовувати команду, ось додаток: Filelight

Це дозволяє швидко візуалізувати використання дискового простору в будь-якій папці.

введіть тут опис зображення


Це сервер, в який я SSH, без GUI.
Карл Моррісон

@KarlMorrison Я думаю, що існують способи запускати програми GUI через ssh, але це ідея на потім, коли у вас є місце для встановлення пакетів
Xen2050

@David О так, я намагаюся вийти з цього. Це було потрібно на іншій платформі, яку я використовував. Я виправлю цей коментар.

@Karl так, це легко, якщо X вже встановлений на клієнті: ssh -X <your host>а потім запустіть свою програму з командного рядка

@MarkYisri справа в тому, що вам потрібно встановити програму та її залежності. І у випадку з Filelight потрібні принаймні KDElibs та Qt, яких насправді мало. Дивіться, наприклад, цю сторінку щодо файлового пакету Ubuntu , зверніть увагу, скільки залежностей він має.
Руслан


3

Я часто користуюся цим

du -sh /*/

Тоді, якщо я знайду якісь великі папки, я перейду до нього і проведу подальше дослідження

cd big_dir
du -sh */

Якщо потрібно, ви також можете зробити це сортування автоматично

du -s /*/ | sort -n

2

Насправді не відповідь - а додаток.

Вам не вистачає місця та не можете встановити ncdu з відповіді @erman.

Деякі пропозиції

  • sudo apt clean allщоб видалити пакети, які ви вже завантажили. БЕЗПЕЧНИЙ
  • sudo rm -f /var/log/*gzФайли журналу очищення старше тижня чи двох - новіші / поточні журнали не видалять. НАЙБІЛЬШЕ БЕЗПЕЧНО
  • sudo lsof | grep deletedсписок усіх відкритих файлів, але відфільтруйте до тих, які були видалені з диска. FAIRLY SAFE
  • sudo rm /tmp/*видаліть деякі тимчасові файли - якщо щось використовує їх, ви могли б порушити процес. НЕ ДІЙСНО, ЩО БЕЗПЕЧНО

Цей `lsof може повернути такі рядки:

server456 ~ $ lsof | grep deleted
init          1          root    9r      REG              253,0  10406312       3104 /var/lib/sss/mc/initgro                        ups (deleted)
salt-mini  4532          root    0r      REG              253,0        17     393614 /tmp/sh-thd-1492991421                         (deleted)

Не вдасться зробити багато для рядка init, але другий рядок передбачає, що у солі-minion відкритий файл, який був видалений, і блоки диска будуть повернуті, коли всі ручки файлів будуть закриті при перезапуску служби.

До інших поширених підозрюваних тут можна віднести syslog / rsyslog / syslog-ng, squid, apache або будь-який процес, на якому працює ваш сервер, який є "важким".


2

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

Що я зазвичай роблю:

  • записати duвихід у файл ( du / > du_output.txt);
  • скопіюйте файл на мою машину;
  • використовувати DuFSдля "монтажу" duвиводу у тимчасовій директорії; DuFSвикористовує FUSE для створення віртуальної файлової системи (= файли фактично не створені, це все підроблено) відповідно до duвиводу;
  • запустіть Filelight або інший інструмент GUI у цьому тимчасовому каталозі.

Відмова: Я писав dufs- саме тому, що мені часто доводиться з'ясовувати, що таке коси дискового простору на безголівкових машинах.


Ви можете просто сортувати -n du_output.txt
Zan Lynx

Я вважаю графічне відображення використовуваного космічного способу більш інтуїтивним.
Маттео Італія

-1

Подібно до @TopHat, але фільтрує деякі файли, якщо вони мають M, G або T у назві. Я не вірю, що він буде пропускати розмір у першому стовпці, але він не буде відповідати імені файлу, якщо ви не назвете файли творчо.

du -chad 1 . | grep -E '[0-9]M[[:blank:]]|[0-9]G[[:blank:]]|[0-9]T[[:blank:]]'

Тут викладено пояснення перемикачів командного рядка, оскільки я не знав, що робив c чи що.

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