Назад | Перейти на главную страницу

«Rm: невозможно удалить xxx: на устройстве не осталось свободного места» в BTRFS

Запуск OpenSuse 12.2.

Внезапно корневой раздел кажется заполненным (99%), но я больше не могу удалять файлы вручную.

«rm: не удается удалить xxx: на устройстве не осталось места», хотя 450 МБ по-прежнему свободны согласно df. Файловая система - BTRFS.

Я попытался проверить FS с помощью btrfsck, но это не помогло.

Что делать?

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

Одно из предложений на wiki btrfs - стереть файл вместо его удаления.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Это приведет к удалению содержимого файла без изменения записи в каталоге. Как только вы выбрались из того угла, в котором находитесь, вы можете удалять файлы как обычно. Если это доставляет вам проблемы, вы можете временно перемонтировать nodatacow опция, которая отключает копирование при записи. Но ... не уверен, поможет это или нет.

В общем, однако: не запускайте файловую систему BTRFS всухую. Это все еще предварительное программное обеспечение, и угловые случаи немного грубоваты.

Я столкнулся с тем же сообщением об ошибке, но в моем случае файловая система не была заполнена:

user@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       2.8G  2.0G  618M  77% /

Но запрос BTRFS показал, что он действительно был заполнен:

user@host:/# btrfs fi show
Label: none  uuid: {UUID redacted because reasons}
        Total devices 1 FS bytes used 1.92GiB
        devid    1 size 2.79GiB used 2.79GiB path /dev/sda3

Было невозможно даже перезаписать какие-либо файлы (как предположил Тайлерл). Мое решение было найдено на http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html который советует выполнить ручную перебалансировку файловой системы, используя btrfs balance start -dusage=55 /path/to/filesystem.

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

В моем случае с файловой системой ZFS в Linux я не мог даже обрезать файл. Уничтожение старых снимков помогло (если они есть).

zfs destroy /path/of/snapshot