"Rm: не можна видалити xxx: на пристрої не залишилось місця" на BTRFS


17

Запуск OpenSuse 12.2.

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

"rm: не може видалити xxx: на пристрої не залишилось місця", хоча 450mb все ще є вільним згідно df. Файлова система - BTRFS.

Я спробував перевірити FS за допомогою btrfsck, але це не допомогло.

Що робити?


1
У вас активовані знімки?
MadHatter

Ви перевірили, чи є якийсь процес, який все ще працює з файлом? (зверніться до lsof), якщо це так, будь ласка, зупиніть процес та спробуйте видалити файл ще раз.
хоріпп

Відповіді:


20

Швидше за все, ви зіткнулися з проблемою, коли BTRFS повинен виділити трохи метаданих, перш ніж вона зможе видалити файл. Одним із слабких місць BTRFS є його поводження з умовами поза простором; вдосконалення поведінки в цій галузі є одним із пріоритетів проекту.

Однією із пропозицій у вікі btrfs є скасування файлу замість видалення.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Це видалить вміст файлу, не змінюючи запис каталогу. Після того, як ви відпрацювали свій шлях з-за того кута, де ви перебуваєте, ви можете видалити файли, як звичайні. Якщо це спричинить проблеми, можливо, ви захочете тимчасово переремонтувати цю nodatacowопцію, яка вимикає поведінку копіювання під час запису. Але ... не впевнений напевно, допоможе це чи ні.

Загалом, однак: не запускайте суху файльну систему BTRFS. Це все ще програмне забезпечення передвиробництва, а кутові корпуси трохи грубі.


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

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


0

Для мене, використовуючи ZFS, я виявив, що видалення інших файлів звільнило достатньо місця на розділі ZFS, і тоді я зміг видалити ці файли.


0

У моєму випадку із файловою системою ZFS в Linux я не міг навіть усікати файл. Знищення старих знімків зробило трюк (за наявності).

zfs destroy /path/of/snapshot

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.