#Что означает ошибка
No space left on device на Btrfs при свободных гигабайтах
В openSUSE корневой раздел на Btrfs хранит снимки Snapper, поэтому диск может заполняться, хотя df показывает странные цифры. Накопленные снимки (особенно после обновлений zypper dup) и данные в @/var приводят к ошибке No space left on device. Ключевая проблема — метаданные и снимки, а не обычные файлы.
Сначала узнайте реальное распределение места Btrfs.
Затем удалите ненужные снимки.
openSUSE по умолчанию создаёт снимки Btrfs, и они занимают место. Удалите старые снимки и настройте лимиты snapper.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Много снимков | Snapper. | Удалите старые. |
| Не сбалансирован Btrfs | Метаданные. | btrfs balance. |
| Квоты | Лимиты. | Проверьте. |
| Заполнен /var | Журналы. | Очистите. |
#Пошаговое решение
- Проверьте btrfs filesystem usage /В терминале openSUSE запустите
sudo btrfs filesystem usage /и прочитайте строки «Device size», «Device allocated», «Used» и «Free (estimated)». Если отдельный корневой раздел использует Btrfs и свободное место почти исчерпано, снимки Snapper могут влиять на занятую ёмкость, но не обязательно являются единственной причиной. Дополнительно выполнитеdf -h /и проверьте журналы и домашние каталоги. Перед удалением снимков сделайте резервную копию нужных данных. - Посмотрите список снимковОткройте терминал и выполните
sudo snapper list. Посмотрите номера, даты, типы (single/pre/post) и описания снимков. Запишите номера, которые потенциально устарели, и убедитесь, что для отката после последнего обновления остаются подходящие снимки. Нельзя удалять снимок по одному лишь размеру или номеру: некоторые снимки связаны парами и могут быть нужны для восстановления. - Удалите старые снимкиЕсли используется Btrfs со Snapper, сначала выполните
sudo snapper listи проверьте, какой каталог/.snapshots занимает место черезbtrfs filesystem usage /. Не удаляйте текущий или загрузочный снимок и не запускайте массовое удаление: сначала убедитесь в резервной копии и правилах автоматической очистки. При необходимости удаляйте только точно выбранные старые снимки по инструкции именно вашей конфигурации Snapper. - Запустите cleanupПроверьте расписание очистки
sudo systemctl status snapper-cleanup.timerи настройки Snappersudo snapper get-config. Если автоматическая очистка предусмотрена, администратор может инициироватьsudo snapper cleanup numberи затемsudo snapper cleanup timeline, но только после просмотра списка и резервной копии. Дождитесь завершения и снова выполнитеsudo btrfs filesystem usage /. Не запускайте массовое удаление всех снимков: система может потерять точки отката. - Выполните balance с малым usageBtrfs balance изменяет размещение блоков и при недостатке места или ошибках диска может усугубить ситуацию. Сначала сделайте резервную копию, проверьте
sudo btrfs filesystem usage /и журнал ошибок. Только при подтверждённом перекосе метаданных используйте ограниченную балансировку с низким-dusage/-musageпо инструкции Btrfs; если диск выдаёт I/O errors, балансировку не запускайте. - Снимки и распределение места BtrfsLinux · Терминал (Bash)КомандаНужен sudoСнимки и распределение места Btrfs.
sudo snapper listsudo btrfs filesystem df /
#Диагностика
Для Btrfs используйте свои команды: sudo btrfs filesystem usage / (показывает Data, Metadata, Unallocated), sudo btrfs filesystem df /. Список снимков: sudo snapper list. Занятое место: sudo btrfs filesystem du -s /.snapshots (медленно) или sudo btrfs qgroup show -pcre /, если квоты включены. Если Unallocated почти нет, а метаданные заполнены, нужна балансировка.
#Очистка
Удалите старые снимки: sudo snapper delete 120-150 (диапазон номеров) или sudo snapper delete НОМЕР. Принудительно запустите очистку по правилам: sudo snapper cleanup number и sudo snapper cleanup timeline. Настройте лимиты в /etc/snapper/configs/root: NUMBER_LIMIT="5", NUMBER_LIMIT_IMPORTANT="3", TIMELINE_LIMIT_DAILY="3". Очистите кэш и журналы: sudo zypper clean -a, sudo journalctl --vacuum-size=200M.
#Балансировка и профилактика
Освободите выделенные, но почти пустые блоки: sudo btrfs balance start -dusage=10 / (затем -dusage=50) и -musage=20. Операция может идти долго, не прерывайте. Включите сервис регулярной балансировки: sudo systemctl enable --now btrfs-balance.timer (если есть) или используйте btrfsmaintenance. Выделите достаточный размер: корень 40 ГБ и больше. Отключите снимки для каталогов с частыми изменениями (виртуальные машины): chattr +C для новых файлов.
snapper cleanup number удаляет снимки, а btrfs balance перемещает экстенты: не запускайте их в составе общего блока без резервной копии, свободного пространства и выбора правильного раздела.sudo btrfs filesystem usage /sudo snapper listsudo snapper get-config