Miałem plik w systemie plików XFS, którego rozmiar wynosił około 200 GB. Był to obraz QCOW2 zawierający wirtualny dysk maszyny wirtualnej napędzanej KVM. Coś poszło nie tak (może to była usterka qemu-kvm, nie jestem pewien), maszyna wirtualna uległa awarii i teraz mam plik, który wygląda tak:
191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade
Tak więc nadal zajmuje 191090708 bloków, ale ls
pokazuje go jako 656 petabajtów.
Ponadto mam inny plik z tą samą historią wstępną, ale w innym systemie plików (nie XFS, ale GFS2):
410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13 2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0
Zajmuje 410855320 bloków, ale ls
pokazuje to jako ~ 6,6 eksabajtów.
Jak myślisz, czy bezpiecznie jest usunąć te pliki? Dziękuję Ci!
PS Tak dobrze jest regularnie robić migawki! :) Nie wiem, co bym bez nich zrobił.
Odpowiedzi:
Widzę dwa możliwe powody, dla których widzisz te rozmiary plików:
Pliki rzadkie to funkcja w niektórych systemach plików, dzięki której można utworzyć plik z dziurami. Otwory nie mają przydzielonej przestrzeni fizycznej. Czytanie w poprzek otworów zwróci NUL bajtów do końca.
Jeśli przyczyną tego, co widzisz, są pliki rzadkie, usunięcie ich jest tak bezpieczne, jak w przypadku pliku nielicznego.
Jeśli przyczyną jest uszkodzenie systemu plików, usunięcie plików bez sprawdzenia systemu plików nie jest bezpieczne. Jeśli system plików jest uszkodzony w taki sposób, że wiele plików twierdzi, że zajmuje to samo miejsce, usunięcie dowolnego pliku spowoduje zwolnienie tych bloków. Gdy te uwolnione bloki zostaną ponownie wykorzystane, korupcja się pogorszy.
Jeśli zauważyłeś jakiekolwiek inne objawy, które przypuszczają, że system plików może być uszkodzony, należy wymusić pełne sprawdzenie systemu plików przed usunięciem plików.
Jeśli nie ma dowodów sugerujących, że system plików jest uszkodzony, a pliki wydają się być rzadkie, po prostu usunę te pliki, gdy już ich nie będę potrzebować.
źródło
Problemem jest sposób obliczania rozmiaru pliku.
Jednym ze sposobów jest przesunięcie ostatniego bajtu (jak ls). Innym sposobem jest zsumowanie naprawdę przydzielonych bloków (np. Du).
Co widzisz, jeśli prawdopodobnie plik z danymi zapisanymi z bardzo dużym przesunięciem. Oznacza to, że główne części przestrzeni adresowej pliku nie są przydzielone. Ale nadal możesz to przeczytać.
źródło