Я столкнулся с проблемой на одном из моих серверов под управлением 16.04: на диске не осталось места.
Я понятия не имею, что занимает место. Есть ли команда для вывода списка текущих размеров каталогов, чтобы я мог пройти и оказаться в каталоге, занимающем все пространство?
disk-usage
Карл Моррисон
источник
источник
export DISPLAY=:0.0; ssh -Y <user>@<server> filelight
(заменитеfilelight
предпочитаемым инструментом). Конечно, когда места не осталось, если у вас еще нет установленного инструмента, вам все равно придется использовать что-то еще!Ответы:
Как всегда в Linux, есть несколько способов выполнить работу. Однако, если вам нужно сделать это из CLI, это мой предпочтительный метод:
Я начинаю с запуска этого как root или с sudo:
Grep - ограничить возвращаемые строки теми, которые возвращаются со значениями в мегабайтах или гигабайтах. Если ваши диски достаточно велики, вы можете добавить
|T
также количество терабайт. Вы можете получить некоторые ошибки в/proc
,/sys
и / или ,/dev
так как они не являются реальными файлами на диске. Тем не менее, он по-прежнему должен обеспечивать корректный вывод для остальных каталогов в корне. После того, как вы найдете самые большие, вы можете запустить команду внутри этого каталога, чтобы сузить свой путь к преступнику. Так, например, если бы/var
был самый большой, вы могли бы сделать это следующим образом:Это должно привести вас к проблеме детей!
Дополнительные соображения
Хотя приведенная выше команда, безусловно, справится, у меня была некоторая конструктивная критика в комментариях ниже, которые указали на некоторые вещи, которые вы также можете включить.
grep
I может привести к тому, что случайное значение «K» будет возвращено, если имя каталога или файла имеет заглавную букву G или M. Если вы абсолютно не хотите, чтобы какой-либо из K-значных каталогов отображался, вы бы хотели, чтобы его подняли ваша игра регулярных выражений, чтобы быть более творческим и сложным. напримерgrep -E "^[0-9\.]*[MG]"
Если вы знаете, какой диск является проблемой, и на нем есть другие подключенные диски, которые вы не хотите тратить впустую, включая поиск, вы можете добавить
-x
флаг к своейdu
команде. Описание man-страницы этого флага:Вы можете отсортировать вывод
du
команды так, чтобы самое высокое значение было внизу. Просто добавьте это в конец команды:| sort -h
источник
"^[0-9]*[.]*[0-9]*[MG]"
-x
опцию, чтобыdu
остаться на этом диске (предоставляется в командной строке). Вы также можете проложить канал,sort -h
чтобы правильно отсортировать мегабайты / гигабайты понятные человеку значения. Я обычно отказывался от--max-depth
опции и просто искал весь диск таким образом, сортируя соответственно, чтобы получить самые большие вещи в нижней части./
), и использование-x
дает мне гарантию, что я не буду неправильно подсчитывать вещи. Если ваша система/
заполнена, и у вас есть отдельно смонтированный/home
или какой - либо другой инструмент , использование-x
- это в значительной степени необходимость избавиться от ненужных вещей. Так что я считаю, что проще использовать его постоянно, на всякий случай.Вы можете использовать
ncdu
для этого. Это работает очень хорошо.источник
curl http://path/to/ncdu | sh
, и он будет работать в кэше ввода-вывода ввода-вывода в памяти, но это потребует некоторой удачи. возможно, есть способ создатьsudo ncdu /
из командной строки.sudo
потому что, если вы не введете sudo, он не будет сообщать о размерах папок, принадлежащих пользователю root, и/
потому что, если вы не введете его, он будет сообщать только рекурсивно вниз из папки, в которой вы находитесьЯ использую эту команду
sudo du -aBM -d 1 . | sort -nr | head -20
Иногда мне нужно запустить его из
/
каталога, так как я поместил что-то в нечетное место.источник
-d 1
переключателя (и обычно сless
вместоhead -20
), чтобы получить полный рекурсивно перечисляемый список всех файлов и каталогов, отсортированных по месту, которое они занимают. Таким образом, если я вижу каталог, занимающий много места, я могу просто прокрутить вниз, чтобы увидеть, действительно ли большая часть пространства занята каким-то конкретным файлом или подкаталогом в нем. Это хороший способ найти ненужные файлы и каталоги, которые нужно удалить, чтобы освободить место: просто прокрутите вниз, пока не увидите то, что вы не хотите сохранить, удалите его и повторите.sort
ожидает завершения вывода, прежде чем начать вывод.Уже есть много хороших ответов о том, как найти каталоги, занимающие большую часть пространства. Если у вас есть основания полагать, что главной проблемой является небольшое количество больших файлов, а не множество маленьких, вы можете использовать что-то подобное
find / -size +10M
.источник
Я не знаю Ubuntu и не могу проверить свой ответ, но опубликую здесь мой ответ, основываясь на моем опыте работы в качестве администратора unix давным-давно.
Узнайте, какой файловой системе не хватает места
перечислит всю файловую систему, их размер и свободное пространство. Вы тратите время только тогда, когда исследуете файловые системы, на которых достаточно места. Предположим, что полной файловой системой является / myfilesystem. проверьте вывод df, если есть файловые системы, смонтированные в подкаталогах / myfilesystems. Если это так, следующие спецслужбы должны быть адаптированы к этой ситуации.
Узнайте, сколько места используется файлами этой файловой системы
Опция -x может использоваться для гарантии того, что будут учитываться только файлы, которые являются членами этой файловой системы. Некоторые варианты Unix (например, Solaris) не знают опцию -x для du. Затем вы должны использовать некоторые обходные пути, чтобы найти ду вашей файловой системы.
Теперь проверьте, является ли du видимых файлов приблизительно размером используемого пространства, отображаемого df. Если это так, вы можете начать поиск больших файлов / каталогов файловой системы / myfilesystem для очистки.
найти самые большие подкаталоги каталога /.../dir использовать
опция -k заставляет du выводить sie в килобайтах без единицы измерения. Это может быть по умолчанию в некоторых системах. Тогда вы можете опустить эту опцию. Самые большие файлы / подкаталоги будут показаны внизу вывода.
Если вы нашли большой файл / каталог, который вам больше не нужен, вы можете удалить его соответствующим образом. Не беспокойтесь о маленьких каталогах в верхней части вывода. Это не решит вашу проблему, если вы удалите их. Если вам все еще не хватает места, вы можете повторить шаг 4 в подкаталогах larges, которые отображаются внизу списка.
Но что случилось, если вывод du не приблизительно равен доступному пространству, отображаемому df?
Если вывод du больше, то вы пропустили подкаталог, в котором смонтирована другая файловая система. Если вывод du намного меньше, то файлы som не отображаются ни в одном каталоге, который вы проверяете. Там могут быть разные причины его явлений.
некоторые процессы используют файл, который уже был удален. Поэтому эти файлы были удалены из каталога, и вы их не видите. Но для файловой системы их блоки все еще используются, пока процессы не закроют файлы. Вы можете попытаться найти соответствующие процессы (например, с помощью lsof) и заставить их закрыть эти файлы (например, остановив приложение или убив процессы). Или вы просто перезагружаете свою машину.
в каталогах есть файлы, которые больше не видны, потому что в одном из их родительских каталогов смонтирована другая файловая система. Так что если у вас есть файл / myfilesysem / subdir / bigfile и теперь монтируете другую файловую систему в / myfilesystem / subdir, то вы больше не сможете видеть этот файл и
сообщит о значении, которое не содержит размер / myfilesystem / subdir / bigfile. Единственный способ узнать, существуют ли такие файлы, это размонтировать / myfilesystem / subir и проверить с помощью
если он содержит файлы.
Могут быть специальные типы файловых систем, которые используют / резервируют место на диске, который не виден команде ls. Вам нужны специальные инструменты для отображения этого.
Помимо этого систематического использования команды du, есть и другие, которые вы можете использовать. Таким образом, вы можете использовать команду find для поиска файлов, размер которых превышает заданное вами значение, вы можете искать файлы, размер которых превышает заданное вами значение или которые были недавно созданы или имеют специальное имя (например, * .log, core, * .trc). Но вы всегда должны делать df, как описано в 1, чтобы вы работали на правильной файловой системе
источник
/tmp
отдельная файловая система (например, tmpfs) и что-то создало файлы/tmp
до того, как они стали точкой монтирования в другой файловой системе. Теперь эти файлы находятся в корневой файловой системе, скрытые точкой монтирования, и вы не можете получить к ним доступ без перезагрузки в режиме восстановления (который не обрабатывается/etc/fstab
) или, как вы предлагаете, bind-mount.Если вы также заинтересованы в том, чтобы не использовать команду, вот приложение: Filelight
Это позволяет быстро визуализировать, что использует дисковое пространство в любой папке.
источник
ssh -X <your host>
а затем запустите вашу программу из командной строкиПопробуйте
sudo apt-get autoremove
удалить неиспользуемые файлы, если вы этого еще не сделалиисточник
Я часто использую этот
Тогда, если я найду несколько больших папок, я переключусь на это и сделаю дальнейшее исследование
При необходимости вы также можете сделать это автоматически с
источник
Не совсем ответ - но приложение.
Вам не хватает места и вы не можете установить ncdu из ответа @erman.
Некоторые предложения
sudo apt clean all
удалить пакеты, которые вы уже скачали. БЕЗОПАСНЫЙsudo rm -f /var/log/*gz
очистить файлы журналов старше недели или двух - не удалит новые / текущие журналы. САМЫЙ БЕЗОПАСНЫЙsudo lsof | grep deleted
перечислите все открытые файлы, но отфильтруйте их до тех, которые были удалены с диска. ЧЕСТНО БЕЗОПАСНЫЙsudo rm /tmp/*
удалите некоторые временные файлы - если что-то их использует, вы можете расстроить процесс. НЕ ДЕЙСТВИТЕЛЬНО ЭТО БЕЗОПАСНОЭто может возвращать такие строки:
Ничего не могу сделать для строки инициализации, но вторая строка предполагает, что salt-minion имеет открытый файл, который был удален, и блоки диска будут возвращены после закрытия всех дескрипторов файла после перезапуска службы.
Другими распространенными подозрениями здесь могут быть syslog / rsyslog / syslog-ng, squid, apache или любой процесс, запущенный на вашем сервере, который является «тяжелым».
источник
Я считаю особенно ценным вывод таких инструментов, как Filelight, но, как и в вашем случае, на серверах обычно нет установленного графического интерфейса, но
du
команда всегда доступна.Что я обычно делаю, это:
du
вывод в файл (du / > du_output.txt
);DuFS
для «монтирования»du
вывода во временный каталог;DuFS
использует FUSE для создания виртуальной файловой системы (= файлы на самом деле не создаются, это все подделка) в соответствии сdu
выводом;Отказ от ответственности: я написал
dufs
- именно потому, что мне часто приходится выяснять, какое место занимает дисковое пространство на безголовых машинах.источник
Аналогичен @TopHat, но фильтрует некоторые файлы, если в их имени есть M, G или T. Я не верю, что он пропустит размер в первом столбце, но он не будет совпадать с именем файла, если вы не будете называть файлы творчески.
Переключатели командной строки объясняются здесь, так как я не знал, что сделал c или a.
источник