Powszechnie wiadomo, że puste pliki tekstowe mają zero bajtów:
Jednak każdy z nich zawiera metadane , które według moich badań są przechowywane w i- węzłach i zajmują miejsce .
Biorąc to pod uwagę, wydaje mi się logiczne, że można zapełnić dysk, tworząc wyłącznie puste pliki tekstowe. Czy to jest poprawne? Jeśli tak, ile pustych plików tekstowych musiałbym wypełnić, powiedzmy, 1 GB?
Aby wykonać kilka kontroli, uruchamiam, df -i
ale to najwyraźniej pokazuje% używanych i-węzłów (?) Zamiast ich wagi.
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 947470 556 946914 1% /dev
tmpfs 952593 805 951788 1% /run
/dev/sda2 28786688 667980 28118708 3% /
tmpfs 952593 25 952568 1% /dev/shm
tmpfs 952593 5 952588 1% /run/lock
tmpfs 952593 16 952577 1% /sys/fs/cgroup
/dev/sda1 0 0 0 - /boot/efi
tmpfs 952593 25 952568 1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708 3% /home/lucho
disk-usage
inode
file-metadata
Luchonacho
źródło
źródło
Odpowiedzi:
To wyjście sugeruje
28786688
ogólnie i-węzły, po czym/dev/sda2
powróci kolejna próba utworzenia pliku w głównym systemie plików (urządzeniu )ENOSPC
(„Brak miejsca na urządzeniu”).Objaśnienie: w pierwotnym projekcie systemu plików * nix maksymalna liczba i-węzłów jest ustawiana podczas tworzenia systemu plików. Przeznaczone jest dla nich dedykowane miejsce. Możesz skończyć się z i-węzłów, zanim zabraknie miejsca na dane lub odwrotnie. Najpopularniejszy domyślny system plików Linux
ext4
nadal ma to ograniczenie. Informacje na temat rozmiarów i-węzłów na ext4 można znaleźć na stronie podręcznika mkfs.ext4.Linux obsługuje inne systemy plików bez tego ograniczenia. Włączone
btrfs
miejsce jest przydzielane dynamicznie. „Struktura i-węzła jest stosunkowo niewielka i nie będzie zawierać danych osadzonych plików ani danych atrybutów rozszerzonych”. (ext3 / 4 przydziela trochę miejsca w i-węzłach dla rozszerzonych atrybutów ). Oczywiście nadal możesz zabraknąć miejsca na dysku, tworząc zbyt dużo wpisów metadanych / katalogu.Myśląc o tym, tmpfs jest kolejnym przykładem, w którym i-węzły są przydzielane dynamicznie. Trudno wiedzieć, co
df -i
w praktyce oznaczałoby maksymalną liczbę i-węzłów w praktyce dla tych systemów plików. Nie dołączałbym żadnego znaczenia do pokazanej wartości.„XFS alokuje także i-węzły dynamicznie. Podobnie JFS. Tak samo zrobił / robi reiserfs. Podobnie jak F2FS. Tradycyjne systemy plików Unix przydzielają i-węzły statycznie w czasie mkfs, podobnie jak współczesne systemy plików, takie jak ext4, które śledzą ich dziedzictwo, ale w dzisiejszych czasach wyjątek, nie reguła.
„BTW, XFS pozwala ci ustawić limit maksymalnego procentu miejsca zajmowanego przez i-węzły, dzięki czemu możesz zabraknąć i-węzłów, zanim dojdziesz do punktu, w którym nie możesz dołączyć do istniejących plików. (Domyślnie 25% dla FSes poniżej 1 TB, 5% dla systemów plików do 50 TB, 1% dla większych.) W każdym razie to wykorzystanie miejsca na metadane (i-węzły i mapy zasięgu) zostanie odzwierciedlone w regularnych
df -h
”- Peter Cordes w komentarzu do tej odpowiedziźródło
28786688-667980=28118708
puste pliki, to w efekcie skończą mi się i-węzły i „zepsuję mój system”?df -h
, @luchonacho.Tworzenie pustych plików wymaga użycia następujących elementów:
Liczba dostępnych i-węzłów jest często określana podczas tworzenia systemu plików i nie można go zmienić (niektóre systemy plików, takie jak Btrfs lub XFS, dynamicznie przydzielają i-węzły). To jest mierzone przez
df -i
. Po wyczerpaniu i-węzłów nie można tworzyć nowych plików ani katalogów, nawet jeśli jest dostępne miejsce na dysku.Pozycje katalogu również zajmują miejsce z dostępnego miejsca na dysku. Możesz to zobaczyć, patrząc na rozmiar katalogu: zawsze jest to wielokrotność rozmiaru bloku, a gdy katalog zawiera wiele plików, jego rozmiar rośnie. Jeśli zabraknie miejsca na dysku, możesz nie być w stanie utworzyć nowych plików lub katalogów w katalogu, który jest „pełny” ( tj. Gdy dodanie nowego pliku wymagałoby przydzielenia nowego bloku), nawet jeśli masz dostępne i-węzły.
Więc tak, można zabraknąć miejsca na dysku, używając tylko pustych plików.
źródło
Argument czysto logiczny:
Nazwa pliku składa się z niezerowej ilości bajtów. Nawet przy teoretycznej maksymalnej kompresji w hipotetycznym systemie plików zaprojektowanym tak, aby dopuszczać absolutną maksymalną liczbę nazw plików, każda nazwa pliku nadal zużywa co najmniej jeden bit gdzieś na dysku fizycznym. Prawdopodobnie więcej, ale „1 bit na plik” to banalne minimum.
Oblicz liczbę bitów, które mogą zmieścić się na twoich talerzach, i jest to teoretyczna maksymalna liczba (pustych lub niepustych) plików, które możesz na nim zapisać.
Tak więc odpowiedź brzmi tak. W końcu zabraknie Ci miejsca, bez względu na to, jakiego miejsca używasz, jeśli będziesz dodawać puste pliki. Oczywiście skończy Ci się znacznie szybciej niż maksimum obliczone w ten sposób, ale zabraknie.
źródło
Po prostu nie, ale możesz zabraknąć i-węzłów na Linuksie, co będzie takie samo, jak zabraknie miejsca.
możesz spróbować czegoś takiego w swojej powłoce
n=0; while :; do touch $n; let n=n+1; done
Po prostu upewnij się, że uruchomisz go na maszynie wirtualnej, w przeciwnym razie szybko wyjdziesz z i-węzłów.
źródło
rm -fr inodetest
aby pozbyć się wszystkich tych pustych plików i ponownie działać normalnie. :)Nie można zapełnić dysku, tworząc puste pliki - na dysku nadal będzie dużo miejsca na nowe pliki. Ale tak, możesz wyczerpać skończoną podaż wolnych plików i-węzłów systemu plików - w tym momencie nie możesz tworzyć nowych plików (nawet jeśli twój dysk - pod względem zajętej przestrzeni - jest praktycznie pusty). To tylko lista wszystkich używanych i-węzłów systemu plików, a nie dysk ... więc system plików jest pełny, a dysk jest praktycznie pusty. Tabela i-węzłów zajmuje miejsce na dysku, ale tabela nie powiększa się, gdy dodajesz pliki - tak jak arkusz papieru nie rośnie, gdy piszesz w jego wierszach.
(odpowiedź w komentarzu autorstwa Baarda Kopperuda)
źródło