В любых системах со временем и в процессе работы уменьшается свободное пространство. А это один из тех важнейших ресурсов, за которым системные администраторы должны следить особенно пристально. Порой после установки небольшого пакета оказывается, что за время своей работы этот пакет сгенерировал временных файлов. По объёму в несколько раз больше, чем сам этот пакет. Обычные текстовые log-файлы также могут занимать значительный объём. Если их генерация и хранение не настроены должным образом. Поэтому в системном администрировании очень важно регулярно проводить очистку файловых систем (ФС) от бесполезного объёма данных. Которые отъедают драгоценное дисковое пространство.
Временные и ненужные файлы
Как уже отмечалось, в любой работающей ОС (в особенности в активно работающей) всегда имеются ненужные и/или временные файлы. Так, к примеру в случае каких-либо сбоев системное ядро создаёт файлы с информацией об адресном пространстве программы (дампы памяти) на момент сбоя. Такие файлы обычно имеют имя core, core.pid или program.core. В зависимости от ситуации, в которой произошёл сбой и последующая генерация подобных файлов, их размер может быть в несколько мегабайт, а если сбои не учитывались администратором и происходили часто, то в совокупности теряется внушительный объём свободного пространства, который крайне расточительно отводить для хранения core-файлов, представляющих интерес только для разработчиков и специалистов по отладке программного обеспечения (ПО). В некоторых системах работу системных ядер можно сконфигурировать таким образом, чтобы дампы памяти вообще не генерировались, либо, чтобы они помещались в отдельный каталог и это очень удобно и для разработчиков, отладчиков, а также и для системных администраторов. Для уточнения этой информации следует обратиться к страницам справочного руководства используемой системы с помощью команды man core для Linux или man coreadm для Solaris.
В Linux-системах существуют также каталоги, специально предназначенные для хранения временных файлов — /tmp и /var/tmp. В этих каталогах программы сохраняют свои данные, актуальные только во время сеанса их запуска, например кеш закачек и т. д. Также эти каталоги используются текстовыми редакторами для хранения резервных копий документов и истории редактирования. И хотя в современных системах и существуют специализированные скрипты (обычно запускаются при старте системы), очищающие эти каталоги, однако не всегда ненужная информация может быть очищена таким образом, особенно это касается работающих длительное время серверов.
Естественно, подобные скрипты можно запускать и по расписанию, не дожидаясь плановой перезагрузки или технического обслуживания (ТО) серверов, используя cron, что часто и делают многие системные администраторы. Конечно, в таком случае скрипты очистки должны быть тщательно протестированы и соответствовать техническим регламентам, принятым в организации, чтобы исключить вероятность удалить что-то действительно нужное в системе, а также как можно меньше мешать основной работе системы.
Когда используется сетевая ФС NFSv3, то на серверах, которые её обслуживают также могут накапливаться внушительные объёмы ненужных файлов, которые обычно имеют имена, соответствующие «.nfsxxx», где xxx – некоторый числовой код.
Как удалить не нужные файлы
Самым эффективным средством по избавлению от «мусора» в системе по праву считается команда find. Для многих системных администраторов это вторая по частоте использования команда после sudo.
Для удаления неиспользуемых за прошедшие семь дней файлов с именем core можно воспользоваться командой следующего вида:
find / -xdev -type f '(' -name core -o name 'core.[0-9]*' -o name ’*.core' ')' -atime +7 -ехес rm -f { } ';'
В данном примере следует обратить особое внимание на параметр -xdev (в некоторых системах -x), который ограничивает использование команды find строго в пределах корневой файловой системы. Всё-таки излишняя осторожность не помешает. Да и вообще такой метод более удобен, когда в системе монтируются множество ФС. В таком случае нужно выполнять приведённую команду отдельно для каждой из файловых систем, поскольку, как правило каталог /var (в котором собирается много ненужных и временных файлов) часто является отдельной ФС — об этом нужно помнить. Параметр type -f указывает удалять только файлы, поскольку в каталоге с исходными кодами есть каталог core (с исходными кодами ядра), имя которого совпадает с маской в приведённой команде find, однако каталог core удалять крайне не желательно.
Для избавления от ненужных и временных файлов, создаваемых различными текстовыми редакторами можно использовать такую команду:
find / -xdev -atime +3 '(' -name '#*' -о -name '.#*' -о -name '*.CKP' -о -name '*~' -о -name '.nfs*' ')' -ехес rm -f { } ';'
В результате будут удалены файлы с именами, начинающимися на .#, # и .nfs, а также те, которые имеют расширение *.CKP и ~.
Важно помнить и о том, что если ФС была смонтирована с опцией noatime (для команды mount), то все вышеприведённые команды будут малоэффективны, поскольку опция noatime заставляет смонтированную ФС не хранить временные метки доступа к файлам, а все вышеприведённые примеры учитывают условие, отражающее время доступа к файлам. Поэтому в данном случае нужно усложнять условия поиска для команды find.
Следующая команда удаляет все подкаталоги каталога /tmp, причём только те, к которым не было обращений более трёх дней:
cd /tmp; find . ! -name . ! -name lost+found -type d -mtime +3 -ехес /bin/rm -rf { } ';'
В данном примере присутствует маска для исключения подкаталога lost+found. Это очень важно, т. к. этот подкаталог будет присутствовать в /tmp, в том случае, если /tmp является отдельной файловой системой. Естественно каталог lost+found ни в коем случае не должен быть удалён.
Если после проделанных выше действий у вас в системе не освободилось необходимого места, то ищем большие каталоги и файлы как это сделать читаем в этой статье