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

17

Запуск OpenSuse 12.2.

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

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

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

Что делать?

Андреас Юнг
источник
1
У вас есть снимки включены?
MadHatter
Вы проверили, запущен ли еще какой-нибудь процесс, использующий файл? (проверьте с помощью lsof), если это так, пожалуйста, остановите процесс и попробуйте снова удалить файл.
chocripple

Ответы:

20

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

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

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

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

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

tylerl
источник
2
Трюк работает хорошо и для сетевого диска, установленного на cifs, спасибо!
markusN
2

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

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.

zovits
источник
0

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

user1429980
источник
0

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

zfs destroy /path/of/snapshot

Джон Уайт
источник