По мере использования системы она начинает использовать всё больше и больше дискового пространства. И чем дальше, тем больше. И рано или поздно вы понимаете, что часть места ушла неизвестно куда. Давайте вспомним несколько способов освободить место на диске, удалив ненужную информацию. Все способы будут рассмотрены на примере операционной системы Debian GNU/Linux 8.2 «Jessie», но часть из них подходит и для других дистрибутивов, в том числе не являющихся потомками Debian’а.
Анализ использования дискового пространства
Прежде чем что-то делать, нужно проанализировать, что именно занимает так много места на диске, какие директории. Для этого подойдет программа baobab, визуально изображающая диск со всеми директориями или поддиректории какой-то директории. Выглядит это следующим образом (картинка из википедии):
Выглядит наглядно, виден размер как в процентах, так и в единицах измерения.
Удаление ненужных программ
В первую очередь желательно удалить все программы, которыми вы не пользуетесь. Большинство людей используют достаточно ограниченный набор программ, а устанавливают обычно заметно больше, чем используют. Соответственно, если у вас есть лишние программы, они просто занимают место на диске, и их можно удалить командой
apt-get remove <название-пакета-с-программой>
Вместе с программами часто устанавливаются библиотеки. Часть из них будет удалена вместе с программой, а часть останется. И эту вторую часть обычно можно удалить командой
apt-get autoremove --purge
Удаление «осиротевших» пакетов
После удаления пакетов могут остаться такие пакеты, от которых уже ни один пакет в системе не зависит, и которые не будут удалены автоматически командой
apt-get autoremove --purge
Такие пакеты можно найти при помощи программы deborphan. Для этого придется установить пакет с одноименным названием
apt-get install deborphan
После запуска программа выводит список «осиротевших» пакетов, которые вы можете удалить либо вручную, либо при помощи такой простой конструкции:
deborphan | xargs dpkg --purge
Удаление настроек, оставшихся от удаленных пакетов
После удаления пакетов командой
apt-get remove ...
обычно остаются настройки программ, входящих в пакет, или какие-то файлы с данными, если не используется ключ —purge. Такие удаленные пакеты, для которых остались настройки, можно просмотреть при помощи команды
dpkg -l | grep ^rc
Результат должен выглядеть приблизительно так:
rc apache2 2.4.10-10+deb8u3 amd64 Apache HTTP Server rc apache2-bin 2.4.10-10+deb8u3 amd64 Apache HTTP Server (modules and other binary files) rc libapache2-mod-php5 5.6.14+dfsg-0+deb8u1 amd64 server-side, HTML-embedded scripting language (Apache 2 module) rc libapr1:amd64 1.5.1-3 amd64 Apache Portable Runtime Library rc libaprutil1:amd64 1.5.4-1 amd64 Apache Portable Runtime Utility Library rc libexo-common 0.10.2-4 all libexo common files rc libffi5:i386 3.0.10-3 i386 Foreign Function Interface library runtime rc libonig2:amd64 5.9.5-3.2 amd64 Oniguruma regular expressions library rc libqdbm14 1.8.78-5+b1 amd64 QDBM Database Libraries without GDBM wrapper[runtime] rc libvo-aacenc0:amd64 0.1.3-1 amd64 VisualOn AAC encoder library rc libyaml-cpp0.5v5:amd64 0.5.2+20151114-1 amd64 YAML parser and emitter for C++ rc mysql-server-5.5 5.5.46-0+deb8u1 amd64 MySQL database server binaries and system database setup rc php5-cli 5.6.14+dfsg-0+deb8u1 amd64 command-line interpreter for the php5 scripting language rc php5-common 5.6.14+dfsg-0+deb8u1 amd64 Common files for packages built from the php5 source rc php5-json 1.3.6-1 amd64 JSON module for php5 rc php5-mysql 5.6.14+dfsg-0+deb8u1 amd64 MySQL module for php5 rc php5-readline 5.6.14+dfsg-0+deb8u1 amd64 Readline module for php5 rc postgresql-9.4 9.4.5-0+deb8u1 amd64 object-relational SQL database, version 9.4 server rc postgresql-client-common 165 all manager for multiple PostgreSQL client versions rc postgresql-common 165 all PostgreSQL database-cluster manager
Удалить такие настройки можно такой командой:
dpkg -l | grep ^rc | awk '{print $2}' | xargs dpkg --purge
В процессе работы этой большой команды вы, возможно, увидите, что некоторые директории с настройками не были удалены, потому что не пусты. Вы можете их просмотреть и удалить вручную, если в этом действительно есть необходимость.
Удаление настроек программ из директории пользователя
Большинство программ, которые сохраняют настройки и данные, сохраняют их именно в домашней директории пользователя. Обычно это или директория, название которой начинается с точки, например
/home/<имя-пользователя>/.Skype
или директория с названием программы в директории
/home/<имя-пользователя>/.config
У меня, например, была директория ~/.config/google-chrome размером 3,5 гигабайта.
Удалить такие директории можно вручную, либо использовать для этого программу bleachbit. Она знает, где хранятся настройки и данные достаточно большого количества программ, и может вам помочь с их удалением. Она есть в стандартных репозиториях и ее можно поставить командой
apt-get install bleachbit
Хотя, честно говоря, когда вы разберетесь с тем, где хранятся настройки разных программ и как почистить кэш менеджера пакетов, может быть bleachbit вам и не потребуется.
Архивация данных
Это, пожалуй, самый старый и самый известный способ. И действительно, вы можете заархивировать данные, которые вам пока не очень нужны, и они будут занимать заметно меньше места. Из современных архиваторов стоит отметить xz, дающий неплохое сжатие, а из ставших уже классическими, естественно, tar + «bzip2 —best».
Использование файловой системы со сжатием
Если хотите, можете попробовать что-то не совсем обычное, что-то вроде fusecompress. Правда, собирать придется из исходных кодов и польза достаточно сомнительная, учитывая скорость работы.
Использование облачных хранилищ
Этот вариант для тех, кто не боится, что его данные будут просматривать разные корпорации. Для того, чтобы не занимать локальное дисковое пространство, облачное хранилище нужно монтировать как удаленную файловую систему при помощи davfs2. Для этого лучше всего подходит, как ни странно, Yandex.Disk. Есть, правда, небольшой минус. DavFS копирует синхронизируемые файлы в свою директорию, поэтому может при копировании файлов на удаленный сервер занимать дополнительное место.
Создание жестких ссылок на одинаковые файлы
Как вы знаете, жесткая ссылка ссылается на содержимое файла. Если найти два файла с одинаковым содержимым, то можно один удалить и заменить его на жесткую или, возможно, символическую ссылку. Но не забывайте, что создание жестких ссылок возможно только в пределах одной файловой системы. Для поиска дубликатов можно воспользоваться такими программами как dupeGuru или FSLint.
Эти способы не подходят. Как освободить место на диске?
Если способы выше не подходят, просто купите диск побольше и не морочьте людям голову.
Как уменьшить расход дискового пространства
Чтобы меньше заботиться о расходовании дискового пространства, можно предпринять ряд мер. Это вас, скорее всего, не спасет, но, всё-таки, немного поможет.
1. Отключить кэш менеджера пакетов или перенести его в оперативную память
В дистрибутивах на базе Red Hat кэширование обычно по умолчанию отключено в настройках yum. Для этого есть специальная опция «keepcache=0» в файле /etc/yum.conf. В дистрибутивах на базе Debian всё несколько сложнее. Штатной настройки, отвечающей за отключение кэша нет, но есть парочка воркараундов.
Первый воркараунд состоит в удалении пакетов после установки через директиву Dpkg::Post-Invoke. Для этого создадим файл /etc/apt/apt.conf.d/02autoclean и запишем в него следующее:
DPkg::Post-Invoke {"/bin/rm -f /var/cache/apt/archives/*.deb || true";};
Второй воркараунд состоит в задании пустых значений для следующих переменных:
Dir::Cache::srcpkgcache "srcpkgcache.bin"; Dir::Cache::pkgcache "pkgcache.bin";
В официальной документации указывается следующее:
Generation of caches can be turned off by setting pkgcache or srcpkgcache to "".
Поэтому, наверное, можно этот способ считать официальным.
2. Отключить логи
Для рабочей станции можно отключить логи совсем (в большинстве случаев на рабочей станции их смотрят ну ОЧЕНЬ редко, если вообще смотрят), либо уменьшить их количество, которое сохраняет logrotate, например, до 5. Для серверов отключать логи крайне не рекомендуется, лучше перенаправлять их на другой сервер, на котором rsyslog настроен на прием логов.
3. Использовать оперативную память для хранения данных, которые обычно пишутся на диск
Это может быть, например, кэш браузера, или еще какие-то временные данные, в том числе и кэш пакетного менеджера. Обычно такие данные не очень важны и их сохранность после перезагрузки не обязательна. На самом деле есть два варианта виртуальной файловой системы, которую можно использовать — это ramfs и tmpfs. Сейчас в основном используется tmpfs, которая по сути очень похожа на более старую ramfs, но которая позволяет ограничивать объем виртуального диска. Вот пример:
mkdir /mnt/ramdisk mount -t tmpfs -o size=768m tmpfs /mnt/ramdisk
После этого можно делать символические ссылки на /mnt/ramdisk и не забыть сделать соответствующую запись в /etc/fstab
Плюс такого подхода еще и в том, что операции ввода-вывода с RAM-диском в разы быстрее, чем на самом быстром SSD.
4. Если вы используете виртуальные машины наподобие VirtualBox, рассмотрите возможность использования контейнеров, например, LXC. Достаточно часто возможностй контейнеров более, чем достаточно, и полная виртуализация, которая использует больше ресурсов, в том числе дискового пространства, — это все-таки некоторый оверхэд.
В заключение
Естественно, есть еще варианты оптимизации расходования дискового пространства и прочих системных ресурсов, если есть, что добавить, — пишите в комментариях.