Ile miejsca zajmują katalogi?

13

Ile miejsca zajmują puste katalogi?

W systemach plików Windows i NTFS mówi się „0 bajtów”, co jest niemożliwe.

Ile naprawdę zajmuje katalog? Czy to zależy od systemu plików lub systemu operacyjnego?

ShadowHero
źródło
1
Technicznie to, co pokazuje okno Właściwości, to zawartość folderu, który, jeśli pusty, zajmuje 0 bajtów na dowolnym dysku. Twoje pytanie dotyczy przestrzeni zajmowanej przez strukturę folderów w systemie plików. Jest to oczywiście zależne od systemu plików. W systemie FAT32 jedyne rzeczy, które musisz przechowywać, to niektóre flagi (ukryte, zarchiwizowane) oraz nazwa i ścieżka. W NTFS musisz również przechowywać uprawnienia i kilka innych rzeczy. Podsumowując, ta przestrzeń jest prawie znikoma.
Doktoro Reichard,
A więc, w NTFS, ile miejsca zajmuje pusty katalog? np. jeśli utworzę 1 miliard katalogów, ile to miejsca?
ShadowHero,
Jak powiedziałem, zależy od nazwy i ścieżki folderu. Zakładając, że używasz wszystkich 26 znaków, z 1 miliardem unikalnych nazw możesz mieć około 7 znaków nazw folderów. 7 Bajtów * 1.000.000.000 to w przybliżeniu 7 GB miejsca. Przypuszczam, że to minimum. Wydaje mi się, że mam około miliona folderów na wszystkich dyskach, więc w rzeczywistości nie osiągnięto nawet wartości. Nie zapominaj, że jest to bardzo przybliżony szacunek.
Doktoro Reichard,
Fajnie, rozumiem ... jak przechowywane są uprawnienia?
ShadowHero,
1
@AthomSfere Hmm ... oznaczałoby to, że foldery nie mogą przechowywać nieskończonych uprawnień użytkownika, chyba że można przypisać wiele rekordów MFT. Spróbuję to sprawdzić.
Doktoro Reichard,

Odpowiedzi:

16

Technicznie to, co pokazuje okno Właściwości, to zawartość folderu, który, jeśli pusty, zajmuje 0 bajtów na dowolnym dysku.

Twoje pytanie dotyczy przestrzeni zajmowanej przez strukturę folderów w systemie plików, który jest oczywiście od niego zależny. W systemie FAT32 jedyne rzeczy, które musisz przechowywać, to niektóre flagi (ukryte, zarchiwizowane) oraz nazwa i ścieżka. W NTFS musisz również przechowywać uprawnienia i kilka innych rzeczy. Podsumowując, ta przestrzeń jest prawie znikoma.

Miejsce zajmowane przez pustą strukturę katalogów zależy od nazwy i ścieżki folderu. Jako przykład załóżmy, że umieściłeś wszystkie foldery na dysku głównym (powiedzmy C :) i użyjesz wszystkich 26 znaków alfabetycznych; z 1 miliardem unikatowych nazw możesz mieć log_26 (1.000.000.000) = około 7 (6.3065) znaków długości folderu. 7 Bajtów * 1.000.000.000 to w przybliżeniu 7 GB miejsca.

Jest to minimum oparte tylko na ilości nazw przestrzeni, które muszą przyjąć dowolną strukturę. Jak zostanie pokazane, systemy plików przechowują o wiele więcej informacji poza nazwą pliku w swojej strukturze plików.

Wydaje mi się, że mam około 1 miliona folderów i plików na wszystkich dyskach, więc w rzeczywistości wartość nie jest nawet osiągana. Nie zapominaj, że jest to bardzo przybliżona ocena.


Obecnie najczęściej używane systemy plików można uznać (prawdopodobnie) za FAT (tablicę alokacji plików) i NTFS (system plików nowej technologii). FAT, jaki znamy, jest używany od 1996 roku, kiedy system Windows 95 został wydany z FAT32. Chociaż został zastąpiony innymi, bardziej odpornymi systemami plików, takimi jak NFTS (Windows), HFS + (OSX) lub ext3 (Linux), nadal jest szeroko stosowany w urządzeniach przenośnych lub na kartach pamięci lub dyskach flash, ponieważ jest dobrze obsługiwany przez większość systemów operacyjnych a przede wszystkim jest to proste.

Teraz ważne. Pliki i katalogi na partycji FAT, nawet jeśli nic w nich nie mają, mają nazwę, lokalizację, określone atrybuty itp. Przechowywane w strefie zwanej tablicą katalogów .

Stół Katalog jest specjalnym plikiem (to znaczy jest ukryte przed regularnym stosowaniu, tak że tylko aplikacje systemowe oraz niektóre mogą bezpośrednio uzyskać do niego dostęp). Reprezentuje katalog (inaczej folder), a każdy plik lub folder w nim przechowywany ma 32-bajtową pozycję w tabeli. Ponieważ tabela katalogów jest plikiem, zajmuje ona co najmniej jeden klaster (tzn. Skrzynki o zadanym rozmiarze na dysku, gdzie mieści się tylko jeden plik (lub jego część)).

Tak więc każdy folder lub katalog na nowoczesnym dysku (> 512 MB) ma co najmniej 4 KB, aby przechowywać tabelę (źródło) . Oznacza to jednak, że możesz przechowywać 128 różnych plików (4 * 1024 B / 32 B = 128) w tym samym folderze, a narzut związany z przechowywaniem rekordów jest nadal taki sam jak 4KB.

Piggybacking w pierwszym przykładzie oznaczałoby, że miliard folderów miałby narzut 32 GB, a nie mniej więcej szacowane 7 GB, które obliczyłem. Te 32 GB przechowują nie tylko krótką nazwę (8 znaków ASCII), ale także atrybuty, flagi, daty dostępu, tworzenia i modyfikacji oraz inne atrybuty starszego typu.

Zakładając, że przeczytałeś to wszystko, może pojawić się pytanie: „Cóż, to wszystko dobrze i dobrze, ale jak przechowywane są długie nazwy, takie jak Wabbajack, a nawet nazwy mieszane, takie jak e4d909c290d0fb1ca068ffaddf22cbd0 ?”

Microsoft w Windows 95 postanowił dodać tę funkcję, aby poprawić wrażenia użytkownika. Aby uniknąć złamania systemu „prawie standardowego”, zastosowali staranne obejście o nazwie VFAT (Virtual FAT). Zasadniczo, aby zmieścić długą nazwę pliku w pliku, dodatkowe rekordy zostały zapisane przed faktycznym rekordem pliku (z pewnymi specjalnymi atrybutami, które nie były widoczne we wcześniejszych systemach). System długich nazw plików pozwala na maksymalną długość 255 znaków UTF-16 (Unicode) (źródło) (źródło) .

Jeśli zmienisz pierwszy przykład tak, że każdy folder ma 9 znaków, wówczas narzut zwiększy się dwukrotnie z 32 GB do 64 GB, ponieważ trzeba będzie zapisać jeszcze jeden rekord, aby zapisać długą nazwę.


Zgodnie z artykułem Wikipedii na temat NTFS wszystkie uprawnienia są przechowywane w głównej tabeli plików. Widocznie przestrzeń jest widoczna przez Defragmentator dysków, jak pokazano tutaj .

Rozmiar, jaki zajmuje rekord MFT z folderu lub pliku, został opisany tutaj :

Rekordy plików i folderów mają po 1 KB i są przechowywane w MFT, których atrybuty są zapisywane w przydzielonej przestrzeni w MFT. Oprócz atrybutów pliku, każdy rekord pliku zawiera informacje o pozycji rekordu pliku w MFT.

Gdy atrybuty pliku mieszczą się w rekordzie pliku MFT dla tego pliku, nazywane są atrybutami rezydentnymi. Atrybuty takie jak nazwa pliku i znacznik czasu są zawsze rezydentne. Gdy ilość informacji o pliku nie mieści się w jego rekordzie pliku MFT, niektóre atrybuty pliku stają się nierezydentne . Atrybutom nierezydentnym jest przydzielany jeden lub więcej klastrów miejsca na dysku . Część atrybutu nierezydentnego pozostaje w MFT i wskazuje klastry zewnętrzne. NTFS tworzy atrybut Lista atrybutów, aby opisać lokalizację wszystkich rekordów atrybutów. Tabela Typy atrybutów plików NTFS zawiera listę atrybutów plików aktualnie zdefiniowanych przez NTFS.

Tak więc w NTFS foldery zajmują co najmniej 1 KB miejsca, chyba że mają bardzo długie listy argumentów i uprawnień; w tym momencie rekord MFT zajmuje dodatkowy klaster na partycji, którego rozmiar zależy od tego, jak został sformatowany, chociaż dla ponad 2 GB Microsoft w tym poście zaleca klastry 4KB.

Doktoro Reichard
źródło
1
Znalazłem informacje o długości 1024 bajtów, o których wspomniałem wcześniej, c-ad.bnl.gov/kinyip/windows/MFT.html Jest to bardzo dobra lektura i może być korzystna dla twojej odpowiedzi, jeśli chcesz rozszerzyć.
Austin T French
Chciałbym rozszerzyć (aby uczynić to bardziej kompletną odpowiedź, nie będąc zbyt technicznym ...), chociaż musiałbym zostawić to na jutro. W każdym razie dzięki za to źródło.
Doktoro Reichard,
Korekta techniczna: nie ma limitu 255 ścieżek. Istnieje raczej limit MAX_PATH wynoszący 260 znaków dla ścieżek standardowych, a następnie istnieje ścieżka o rozszerzonej długości 32 767 znaków (tak, ponad 32 tysiące znaków) dla prawdziwych ścieżek Unicode (przy użyciu wskaźnika `\\?`, Albo jako zwykła ścieżka o przedłużonej długości lub ścieżka UNC). Więcej informacji na ten temat można znaleźć na docs.microsoft.com/en-us/windows/win32/fileio/ ...
Mike 'Pomax' Kamermans
3

Na przykład w świecie rzeczywistym właśnie nagrałem swoje wolne miejsce, a następnie utworzyłem dużą strukturę katalogów i odjąłem nowe wolne miejsce, aby sprawdzić, ile miejsca zostało wykorzystane. Utworzyłem katalogi 0-6 dla każdego dnia tygodnia, następnie wewnątrz katalogów 0-23 dla godzin dnia, a następnie 0-59 dla minut godziny. W sumie jest to 10 080 katalogów. Moje użycie dysku zmieniło się o 6 926 336 bajtów. Działa to do 687 bajtów na katalog. W przypadku, gdy Ci zależy, działa to również do 0,0006% dysku o pojemności 1 TB (jeśli obliczasz 1 TB jako 1024 ^ 4).

andy
źródło
3
Czy możesz dodać system plików do swojej odpowiedzi? Wszystkie nazwy katalogów były krótkie?
fixer1234
0

W systemie Windows 10 utworzyłem 1 000 000 pustych folderów i, zgodnie z getsizefunkcją Pythona , zajmowało 200540160 bajtów miejsca. To średnio 200,54016 bajtów na folder.

Es Kay
źródło