Профилактика диска#

Рациональное использование пространства на диске также входит в перечень задач по оптимизации системы. Хотя это и не влияет напрямую на производительность самой системы, это позволяет всё время иметь пространство на носителе, чтобы использовать его для хранения новой информации, поэтому в данном разделе затрагивается тема профилактики носителя или же его чистки от "мусора": различных временных данных, кэшей, баз данных.

Чистка при помощи Bleachbit#

Аналог CCleaner для Linux, помогает выполнить очистку системы от накопившегося в ней мусора.

Рекомендуется выполнять чистку системы уже после проведения всех оптимизаций.

../_images/generic-system-acceleration-4.png

Установить программу можно из официального репозитория Arch Linux:

sudo pacman -S bleachbit

Автоматическая очистка кэша pacman#

Кэш пакетов pacman имеет плохое свойство забиваться и со временем занимает много места на диске. Чтобы этого не происходило, создадим небольшой демон, который будет автоматически его очищать, например, каждую неделю. В этом нам поможет службу из состава пакета pacman-contrib, которая автоматически будет выполнять очистку кэша пакетов раз в неделю:

sudo pacman -S pacman-contrib
sudo systemctl enable paccache.timer

Оптимизация баз данных SQLite#

Базы данных типа SQLite часто используется для локального хранения с целью кэширования тех или иных данных. Например, Firefox использует SQLite базу внутри текущего профиля для хранения всех пиктограм ранее посещаемых сайтов. Базы такого типа поддаются оптимизации занимаемого места на диске через специальную операцию VACUUM.

Для профаликтики диска и экономии места вы можете захотеть периодически выполнять данную операцию над всеми базами данных в вашей домашней директории при помощи следующей команды:

find ~/ -type f -regextype posix-egrep -regex '.*\.(db|sqlite)' \
  -exec bash -c '[ "$(file -b --mime-type {})" = "application/vnd.sqlite3" ] && sqlite3 {} "VACUUM; REINDEX;"' \; 2>/dev/null

Предупреждение

Перед запуском данной команды рекомендуется закрыть все приложения, так как операция VACUUM не может быть выполнена для открытых и используемых в данный момент баз данных.

Данную команду рекомендуется периодически выполнять вручную или при помощи systemd-таймера по аналогии с очисткой кэша pacman как было показано выше.

Балансировка файловой системы Btrfs#

В файловой системе Btrfs используется многоступенчатая система выделения памяти, согласно которой сначала выделяется большой кусок пространства - один гигабайт, называемый "чанком" (chunk). Внутри этого чанка выделяются блоки данных меньшего размера - экстеты, размером не более 128 Мб.

Btrfs также объединяет несколько чанков в так называемые группы блоков, в зависимости от специфики их содержимого. Выделяют группу, занимаемую данными (DATA), метаданными (METADATA), системную группу (SYSTEM, обычно используемую для логического отображения физических устройств) и группу неиспользуемых блоков (UNALLOCATED), то есть не выделенное место среди файловой системы.

Здесь важно понимать, что определение нехватки дискового пространства осуществляется именно при помощи не выделенного объема, а не фактически занимаемого какими-либо данными, что может приводить к ситуации, в которой команда df говорит о достаточном свободном месте на носителе, но Btrfs при этом не может выделить новый чанк для его использования под пользовательские данные, в том числе из-за потенциально большого количества блоков ранее используемых в группе под метаданные. Это частая ситуация при активном использовании снимков (snapshots).

Чтобы этого не произошло, следует периодически выполнять процесс так называемой балансировки файловой системы. Он позволяет объединить несколько ранее выделенных, но не заполненных полностью данными в силу фрагментации, чанков в один, тем самым освобождая больше места для не выделенного пространства.

Запустить данный процесс можно при помощи следующей команды:

sudo btrfs balance start /

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

Команда выше запускает балансировку чанков в фоновом режиме. Чтобы отслеживать прогресс можно использовать следующую команду:

sudo watch -n 1 btrfs balance status /

Вы также можете в любой момент безопасно прервать процесс при помощи команды sudo btrfs balance stop /. А проверить результат до и после можно сравнив вывод команды sudo btrfs filesystem usage /. После завершения процесса объем не выделенной памяти должен увеличиться.