"rm: не удается удалить xxx: на устройстве не осталось места" на BTRFS
Запуск OpenSuse 12.2.
Внезапно корневое разделение кажется заполненным (99%), но я больше не могу удалять файлы вручную.
"rm: не может удалить xxx: на устройстве не осталось места", хотя 450 МБ все еще свободны в соответствии с df. Файловая система - BTRFS.
Я попытался проверить FS с помощью btrfsck, но это не помогло.
Что делать?
3 ответа
Скорее всего, вы столкнулись с проблемой, когда BTRFS должен выделить немного метаданных, прежде чем он сможет удалить файл. Одним из слабых мест BTRFS является обработка состояния вне пространства; улучшение поведения в этой области является одним из приоритетов проекта.
Одно из предложений на вики 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