Вопрос или проблема
Кто-нибудь знает, почему в каталоге $HOME/.local/share/flatpak/repo
так много файлов (69 тыс.) и он такой большой (2 Гб)? Что это такое? Я почти никогда не использую flatpak…
Думаю, не важно включать каталог flatpak в резервную копию (deja-dup).
P.S. похоже, там есть жесткие ссылки, потому что в папке flatpak в два раза больше файлов, но такой же общий размер.
Flatpak пакеты работают в режиме песочницы, поэтому, по замыслу, flatpak занимает значительное количество дискового пространства для отдельного приложения, даже если оно небольшое, потому что оно затягивает все зависимости для приложения и работает независимо. Преимущество этой конструкции в том, что вам не нужно беспокоиться о зависимостях и обновлениях системы, которые могут нарушить работу вашего приложения. Однако это занимает большое количество дискового пространства.
В результате единственное, что может сделать пользователь, — это следить за размером flatpak и периодически его очищать. Лично у меня есть скрипт под названием «генеральная уборка», который я использую периодически для очистки системы (и в его рамках есть раздел, связанный с flatpak).
Общая уборка
- Приложения Flatpak могут делиться некоторыми пакетами времени выполнения, которые представляют собой базовые зависимости для приложений: если время выполнения установлено в вашей системе, но не используется ни одним приложением flatpak (
flatpak list --app --columns=application,runtime
показывает, какое приложение использует какое время выполнения), вы можете удалить его с помощьюflatpak uninstall --unused
. Это очищение, которое может оказать значительное воздействие при первом запуске, но, как вы можете себе представить, очистка может быть незначительной после первого использования. - Приложения Flatpak могут создавать объекты в папке
/var/lib/flatpak/repo/objects
, которые могут достигать значительного размера. Чтобы удалить эти объекты (которые не имеют явной привязки к своему приложению), вам нужно запустить (сsudo
, так как вы очищаете объекты в системной папке)sudo flatpak repair
. Воздействие этой очистки может быть значительным каждый раз, когда вы выполняете команду. - Кэш-файлы Flatpak также могут быть удалены как в системных, так и в пользовательских папках. Вы можете запустить
sudo rm -rfv /var/tmp/flatpak-cache-*
иrm -rfv ~/.cache/flatpak/*
Специфическая уборка
- Вы можете удалить приложение, которое вам не нужно, или заменить большие на .deb версию приложения, если это возможно. Вы можете отсортировать приложения flatpak по размеру с помощью команды
flatpak --columns=name,size --user list
, а затем удалить приложение, используя его названиеflatpak uninstall <flatpak_app_name>
Объединение в скрипт (для запуска с sudo)
#!/bin/bash
# Переменные статуса ошибки
STATUS_OK=0
STATUS_ERROR=1
# Определения
USER_NAME="${SUDO_USER:-${USER}}"
USER_DIR="/home/${USER_NAME}"
# Выполнить как пользователь root
if [ "${USER}" != root ]; then
echo "ОШИБКА: должен быть root! Выход..."
exit "${STATUS_ERROR}"
fi
# Текущий статус
USED_BEFORE="$(df -k / | awk 'NR>1 {print $3}')"
# очистка flatpak
if [ -n "$(command -v flatpak)" ]; then
flatpak repair &> /dev/null
flatpak repair --user &> /dev/null
# Удалить кэш flatpak
rm -rf /var/tmp/flatpak-cache-*
sudo -u "${USER_NAME}" rm -rf "${USER_DIR}"/.cache/flatpak/*
# Удалить неиспользуемые среды выполнения flatpak
if [ -n "$(flatpak list --runtime)" ]; then
flatpak uninstall --unused
fi
fi
# Текущий статус
USED_AFTER="$(df -k / | awk 'NR>1 {print $3}')"
# Резюме
echo "Освобождено пространства: $(( (USED_BEFORE - USED_AFTER)/1024 )) MB"
exit "${STATUS_OK}"
Flatpaks изолированы, это означает, что все кеши приложений, большие библиотеки и т. д., которые нужны приложению, хранятся в этих каталогах. Это означает, что размеры файлов для этих каталогов часто ужасно велики.
.
Ответ или решение
Объем папки Flatpak в вашем домашнем каталоге, например, $HOME/.local/share/flatpak/repo
, может вызваться вопросом, особенно если она содержит огромное количество файлов и занимает несколько гигабайт пространства. Давайте разберемся, почему это происходит, и что можно с этим сделать.
Основное объяснение
Flatpak разработан для запуска приложений в изолированной среде, что предполагает загрузку всех необходимых зависимостей для каждой программы. Это удобство за счет изоляции приложений и независимости от системных обновлений обусловлено необходимостью размещения множества файлов внутри этой папки. Даже если вы редко используете flatpak, сама концепция требует места для обеспечения совместимости и безопасности приложений.
Почему папка такая большая?
-
Зависимости и Руны: Flatpak тянет все необходимые зависимости во время установки приложений, обеспечивая автономную работу любой программы. Эти зависимости обычно не совместно используются между приложениями, вследствие чего возникают дубликаты.
-
Версии и обновления: Flatpak сохраняет разные версии приложений и их зависимостей, чтобы вы могли откатиться к предыдущей версии при необходимости.
-
Ссылки и объекты: Часто заметно, что количество файлов в два раза больше ожидаемого, но общий размер остаётся таким же. Это объясняется использованием жёстких ссылок, которые позволяют экономить пространство за счет повторного использования одинаковых данных.
Как сократить объем?
1. Общие советы по очистке
- Отказ от неиспользуемых рунтаймов: Используйте команду
flatpak uninstall --unused
, чтобы удалить неиспользуемые рунтаймы. - Очистка объектов: Запустите
sudo flatpak repair
, чтобы устранить неиспользуемые объекты из системной папки/var/lib/flatpak/repo/objects
. - Очистка кэша: Удалите временные и кэшировочные файлы Flatpak:
rm -rfv ~/.cache/flatpak/*
иsudo rm -rfv /var/tmp/flatpak-cache-*
.
2. Специфические действия
- Удаление ненужных приложений: Найдите и удалите приложения Flatpak, которые вам не нужны, либо замените их версиями в других форматах, таких как .deb, если это возможно.
- Сортировка по размеру: Используйте команду
flatpak --columns=name,size --user list
, чтобы определить, какие приложения занимают больше всего места, и удалите их при необходимости.
Скрипт автоматической очистки
Создайте скрипт, который будет периодически запускаться для очистки. Например:
#!/bin/bash
# Завести скрипт под root
if [ "${USER}" != root ]; then
echo "ERROR: must be root! Exiting..."
exit 1
fi
# Выполнить очищение
flatpak repair &> /dev/null
flatpak repair --user &> /dev/null
rm -rf /var/tmp/flatpak-cache-*
sudo -u "${SUDO_USER}" rm -rf "/home/${SUDO_USER}/.cache/flatpak/*"
flatpak uninstall --unused
# Завершение
echo "Очистка завершена"
exit 0
Заключение
Понимание того, как и почему Flatpak использует дисковое пространство, позволяет принимать взвешенные решения о том, как управлять и оптимизировать его использование на вашей системе. Тщательно следуя приведённым рекомендациям, можно существенно сократить объем используемого пространства, сохраняя при этом все преимущества Flatpak.