Jak rozmiar pliku na dysku może wynosić 0 bajtów, jeśli są w nim dane?

106

Mam plik w systemie Windows 10 z 362 bajtami danych, ale „rozmiar na dysku” to tylko 0 bajtów. Jest to prosty program „Hello world” napisany w asemblerze i zapisany w Notepad ++ .

Jak to możliwe, że rozmiar na dysku wynosi zero, gdy rozmiar pliku wynosi 362 bajty?

Mam dysk SSD, a nie normalny dysk twardy.

Zrzut ekranu okna dialogowego Właściwości:

Zrzut ekranu okna dialogowego Właściwości

Coder88
źródło
4
Krótka odpowiedź: jeśli nie jest potrzebne dodatkowe miejsce na dysku do przechowywania jego zawartości.
David Schwartz
11
@Thomas Nie jest duplikatem. Nazwa brzmi podobnie, ale pytanie to brzmi: dlaczego system Windows deklaruje, że plik zerowy ma rozmiar zero, mimo że gdzieś wymaga rejestracji. To pytanie pyta, dlaczego rozmiar na dysku może wynosić zero, nawet jeśli w pliku znajdują się dane.
Ben N
@BenN oznacza to nieodpowiednie, ponieważ masz rację, to z pewnością nie jest duplikatem.
William
Cześć Coder88, uważam, że osoba, która oznaczyła twój post jako duplikat, pomyliła się - inne pytanie dotyczyło czegoś innego; naprawdę zadałeś dobre pytanie. Jeśli chciałeś wskazać, że twoje pytanie zostało rozwiązane, możesz kliknąć znacznik wyboru obok odpowiedzi tutaj.
Ben N

Odpowiedzi:

155

Dzieje się tak, jeśli plik jest tak mały, że jego zawartość i księgowość systemu plików mieszczą się w 1 KB. Aby zaoszczędzić miejsce na dysku, NTFS utrzymuje małe pliki „rezydentne”, przechowując ich zawartość bezpośrednio w rekordzie pliku, więc nie trzeba przypisywać do niego żadnego klastra. Dlatego rozmiar na dysku wynosi zero, ponieważ nie ma nic poza rekordem pliku. Gdy plik stanie się wystarczająco duży, NTFS czyni go „nierezydentnym”, przydziela mu jeden lub więcej klastrów (tworząc niezerowy „rozmiar na dysku”) i tworzy „parę odwzorowań” w rekordzie pliku w miejscu danych do wskaż klaster.

Dyski twarde SSD lub Windows 10 nie mają na to wpływu; to po prostu funkcja NTFS. Dalsza lektura: Cztery etapy wzrostu plików NTFS .

Pamiętaj, że metryka „rozmiar na dysku” nie jest dokładnie odpowiednia. Na przykład nigdy nie zawiera stałej 1 KB, którą zajmuje rekord pliku NTFS. Metryka została wprowadzona w systemie Windows 95, który nie korzystał z systemu plików NTFS i dlatego nie mógł uwzględnić tego zjawiska; po prostu pokazał rozmiar pliku zaokrąglony w górę do następnej wielokrotności rozmiaru klastra. Ten algorytm oszacowania został przeniesiony do systemu Windows 7, mimo że wiele wersji systemu Windows między nimi używało NTFS i pamięci masowej. W końcu został zaktualizowany w systemie Windows 8, aby liczyć pliki z rezydentnymi danymi na dysku o zerowym rozmiarze. Dalsza lektura: Co to jest „Rozmiar na dysku”?

Ben N.
źródło
1
Przez chwilę myślałem, że przyglądamy się efektom deduplikacji danych ( blog.fosketts.net/2012/01/03/… ), ale uważam, że ta funkcja działa na poziomie przezroczystym do czegoś w rodzaju miernika „rozmiar na dysku”.
misha256
8
Ale czekaj ... Nie mogę zreplikować zachowania OP na moim woluminie NTFS (Windows 7). Niezależnie od tego, jak tworzę małe pliki (niektóre mają tylko jeden bajt), każdy z nich zajmuje „miejsce na dysku” 4KB zgodnie z oknem dialogowym Właściwości pliku. Hmm ...
misha256
8
@ misha256 Huh, mogę odtworzyć go z plikiem o rozmiarze ~ 700 bajtów w systemie Windows 8.1. Domyślam się, że algorytm stał się mądrzejszy gdzieś pomiędzy Windows 7 a 8.1, ponieważ początkowo nie wiedział o żadnych wymyślnych rzeczach NTFS ( źródło ). Pamiętaj, że gdy plik przejdzie do drugiego etapu, nigdy się nie zmniejsza.
Ben N
6
@Philipp Chyba można się kłócić w obu kierunkach. Tradycyjnie „plik na dysku” miał „rozmiar przydzielonych klastrów” (więc na przykład można było zobaczyć efekty wyboru zbyt dużego rozmiaru klastra). O ile mi wiadomo, nigdy nie obejmował miejsca „katalogowego” wymaganego przez system plików (np. Rozmiar „wpisu katalogu” lub „długość łańcucha wpisów FAT”).
TripeHound
3
@Philipp: Tak czy inaczej, w tym księgowość w rozmiarze pliku szybko staje się włochata: Jak opisałbyś plik 1-klastrowy z 3 nazwami?
Deduplicator