„Rm: nie można usunąć xxx: Brak miejsca na urządzeniu” na BTRFS

17

Uruchamianie OpenSuse 12.2.

Nagle główna parycja wydaje się pełna (99%), ale nie mogę już ręcznie usuwać plików.

„rm: nie można usunąć xxx: Brak miejsca na urządzeniu”, chociaż zgodnie z df 450 MB wciąż jest wolnych. System plików to BTRFS.

Próbowałem sprawdzić FS przy użyciu btrfsck, ale to nie pomogło.

Co robić?

Andreas Jung
źródło
1
Czy masz włączone migawki?
MadHatter
czy sprawdziłeś, czy jakiś proces nadal korzysta z pliku? (sprawdź za pomocą lsof), jeśli tak, zatrzymaj proces i spróbuj ponownie usunąć plik.
chocripple

Odpowiedzi:

20

Najprawdopodobniej masz problem z tym, że BTRFS musi przydzielić trochę metadanych, zanim będzie mógł usunąć plik. Jednym ze słabych punktów BTRFS jest obsługa warunków braku miejsca; poprawa zachowania w tym obszarze jest jednym z priorytetów projektu.

Jedną z sugestii na wiki btrfs jest zablokowanie pliku zamiast jego usuwania.

#instead of this
rm -f ./some_file

# do this
true >| ./some_file

Spowoduje to usunięcie zawartości pliku bez zmiany pozycji katalogu. Po wyjściu z narożnika możesz usunąć pliki w normalny sposób. Jeśli sprawi ci to kłopot, możesz tymczasowo podłączyć ponownie z nodatacowopcją, która wyłącza zachowanie kopiowania przy zapisie. Ale ... nie jestem pewien, czy to pomoże, czy nie.

Ogólnie jednak: nie uruchamiaj systemu plików BTRFS na sucho. To wciąż oprogramowanie przedprodukcyjne, a skrzynki narożne są trochę szorstkie.

tylerl
źródło
2
Sztuczka działa dobrze również dla dysku sieciowego zamontowanego na cifs, dzięki!
markusN
2

Napotkałem ten sam komunikat o błędzie, ale w moim przypadku system plików nie został zgłoszony jako pełny:

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

Ale zapytanie BTRFS ujawniło, że rzeczywiście było pełne:

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

Nawet zastąpienie jakichkolwiek plików (jak sugerował Tylerl) było niemożliwe. Moje rozwiązanie zostało znalezione pod adresem http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html, który zaleca uruchomienie ręcznego równoważenia systemu plików przy użyciu btrfs balance start -dusage=55 /path/to/filesystem.

zovits
źródło
0

Dla mnie, używając ZFS, stwierdziłem, że usunięcie innych plików zwolniło wystarczającą ilość miejsca na partycji ZFS, a następnie byłem w stanie usunąć te pliki.

użytkownik1429980
źródło
0

W moim przypadku z systemem plików ZFS w systemie Linux nie mogłem nawet obciąć pliku. Zniszczenie starych migawek załatwiło sprawę (jeśli jest obecna).

zfs destroy /path/of/snapshot

John White
źródło