Как освободить место на диске

Как освободить место на дискеПо мере использования системы она начинает использовать всё больше и больше дискового пространства. И чем дальше, тем больше. И рано или поздно вы понимаете, что часть места ушла неизвестно куда. Давайте вспомним несколько способов освободить место на диске, удалив ненужную информацию. Все способы будут рассмотрены на примере операционной системы Debian GNU/Linux 8.2 «Jessie», но часть из них подходит и для других дистрибутивов, в том числе не являющихся потомками Debian’а.

Анализ использования дискового пространства

Прежде чем что-то делать, нужно проанализировать, что именно занимает так много места на диске, какие директории. Для этого подойдет программа baobab, визуально изображающая диск со всеми директориями или поддиректории какой-то директории. Выглядит это следующим образом (картинка из википедии):

Baobab-screenshot-ru

Выглядит наглядно, виден размер как в процентах, так и в единицах измерения.

Удаление ненужных программ

В первую очередь желательно удалить все программы, которыми вы не пользуетесь. Большинство людей используют достаточно ограниченный набор программ, а устанавливают обычно заметно больше, чем используют. Соответственно, если у вас есть лишние программы, они просто занимают место на диске, и их можно удалить командой

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. Достаточно часто возможностй контейнеров более, чем достаточно, и полная виртуализация, которая использует больше ресурсов, в том числе дискового пространства, — это все-таки некоторый оверхэд.

В заключение

Естественно, есть еще варианты оптимизации расходования дискового пространства и прочих системных ресурсов, если есть, что добавить, — пишите в комментариях.