Co oznacza rozmiar katalogu w wyniku działania polecenia „ls -l”?


Odpowiedzi:


45

Jest to wielkość miejsca na dysku używanego do przechowywania meta informacji dla katalogu (tj. Tabeli plików należących do tego katalogu). Jeśli jest to 1024, oznacza to, że do tego celu używa się 1024 bajtów (zawsze przydziela pełne bloki).


3
a gdy katalog zawiera tysiące plików, rozmiar samego katalogu może łatwo wynosić> 10
KB

1
@txwikinger Myślę, że katalogi zawierają listy i-węzłów, a nie rzeczywiste nazwy plików.
Ярослав Рахматуллин

6
@ ЯрославРахматуллин Pozycja katalogu składa się z numeru i-węzła i nazwy pliku.
200_success

2
Więc „rozmiar” katalogu zależy tylko od liczby plików w środku, a nie od wielkości plików?
Lee

1
@Lee: Tak, zgadza się.
kot

14

„Rozmiar katalogu” wydrukowanego przy pomocy ls -ljest (jak w przypadku każdego typu pliku) wartością zgłaszaną przez stat()wywołanie w statbuf.st_size.

Co to st_sizeoznacza dla katalogów, całkowicie zależy od typu systemu plików. Jeśli nie znasz typu systemu plików i nie rozumiesz jego pojęć, nie możesz wywnioskować niczego na podstawie wartości w st_size.

  • W historycznym obecnie znanym systemie plików UNIX v7-fspowtarzano katalogi po 16 bajtów, które zawierały 16-bitowy numer i-węzła i 14 bajtów nazwy pliku. „Rozmiar” katalogu był znaczący w odniesieniu do read(2)operacji i zawsze powiększał się lub pozostawał bez zmian . .I ..wpisy są tworzone ręcznie ciężko łącząc je pod prąd i katalogu na poziomie powyżej. Liczba linków do zdrowego pustego katalogu panieńskiego to 2.

  • W systemie plików BSD-4.2, który jest nazywany od 1989 roku (SVr4) ufs, katalogi są serią rekordów o zmiennej długości, które używają formatu, który nie jest stabilny, więc komendy przestrzeni użytkownika nie mogą czytać tego formatu. Zgłaszany „rozmiar” to rozmiar w bajtach, tak jak w wersji 7-fs, rozmiar zwykle rośnie lub pozostaje taki, jaki jest, ale nowsze wersje systemu plików mogą się zmniejszać w pewnych warunkach - ale nie zawsze, kiedy można się tego spodziewać. Liczba podanych łączy dla pustego katalogu wynosi 2, jak w przypadku v7-fs.

  • W WOFSsystemie plików, który zaprojektowałem i wdrożyłem między latem 1988 r. A majem 1991 r., Katalogi zawsze zgłaszają „rozmiar” 0 i nigdy nie zawierają treści, które można odczytać za pomocą read(2)wywołania. Jest tak, ponieważ WOFSjest to pierwszy system plików Copy-on-Write i ponieważ w WOFSplikach zgłasza katalog, w którym się znajduje, zamiast być wymienionym w katalogu. Jeśli czytasz WOFSkatalog za pomocą readdir(), otrzymujesz dane tylko dla zamierzonych wpisów, ale nigdy dla .i ... Liczba linków pustego katalogu WOFSto 1, a całe zachowanie jest całkowicie zgodne z POSIX.

  • W ZFS, zostało to wdrożone po przeczytaniu WOFSartykułów. ZFSto system plików kopiowania przy zapisie, a jego autorzy nie przeczą, że skopiowali pojęcia WOFS. Katalogi na ZFS zgłosić number of directory entriesin st_size, więc stwierdzili, że „wielkość” nie ma żadnego realnego znaczenia w stosunku do zajmowanej przestrzeni dyskowej z danymi katalogowymi. Nie ma .i ..wpisy w katalogu ZFS, ale jeśli zadzwonisz readdir(), wpisy te zostały sfałszowane i powrócił do pierwszych dwóch operacjach. ZFS jest jedynym FS na liście, który nie obsługuje katalogów z twardym dowiązaniem, ale zgłaszana liczba linków dla katalogów wynosi zawsze 2. Te dwie nieprawidłowości w ZFS są zaimplementowane w celu zmniejszenia nieporozumień w historycznych programach innych niż POSIX.

  • Podobnie jak ZFS, WAFL kopiuje niektóre, ale nie wszystkie pomysły WOFS. Netapp WAFLzostał napisany 3 lata po WOFSopublikowaniu artykułu, WAFL jest kopiowany przy zapisie, ale wydaje się, że WAFL zgłasza wartości „rozmiar”, które mogą być „rzeczywistym rozmiarem katalogu” przy założeniu, że katalog ma treść.


13

Katalog rezerwuje 4096 bajtów (minimum) na metadane o sobie i jego zawartości.

Ponadto 4096 bajtów jest domyślną jednostką alokacji (blokiem) dla systemu plików ext2 / ext3 / ext4 i dlatego katalog nie może być mniejszy.

W różnych systemach plików możesz znaleźć katalogi o różnych rozmiarach domyślnych, co wynika z domyślnego rozmiaru bloku systemu plików.

Rozmiary katalogów mogą również dynamicznie rosnąć w miarę ich zapełniania, ale po zapełnieniu miejsca zarezerwowanego dla metadanych nie można ponownie przypisać bez usunięcia katalogu.


1
Do jakich meta-danych masz na myśli?
Stéphane Chazelas

1
szczegóły zależą od systemu plików, ale ogólnie obejmują metadane, takie jak nazwa pliku, numer i-węzła, typ pliku (plik, katalog, fifo, gniazdo, węzeł urządzenia, dowiązanie symboliczne itp.), właściciel, grupa, uprawnienia, atrybuty, listy ACL, cele dowiązania symbolicznego.
cas 1'12

6
@CraigSanders, katalog zawiera nazwę obiektu i odpowiedni numer węzła tylko . I-węzeł zawiera typ obiektu, właściciela / grupę, uprawnienia, odniesienie do każdego miejsca przechowywania list ACL i rozszerzonych atrybutów ... Cokolwiek innego spowoduje poważne zerwanie semantyki systemu plików POSIX.
vonbrand,

Mój UFS rezerwuje tylko 512 bajtów dla własnych metadanych na katalog.
FUZxxl,

4

Katalog jest po prostu katalogiem, podobnie jak katalog telefonu. To tylko plik z listą liczb i nazwą obok nich. Każdy numer odnosi się do pliku w systemie plików (numer i-węzła), a nazwa to nazwa pliku.

Potrzebujesz miejsca na dysku, aby zapisać te dane, sposób ich przydzielania, powiększania i zmniejszania zależy od systemu plików.


możesz podać rzeczywiste szczegóły dotyczące tego, jakie meta-dane są przechowywane, oraz uwagi dotyczące alokacji bloków dotyczące wzrostu wielkości. dokona dokładniejszej odpowiedzi wraz z już podaną ładną alegorią. :)
n611x007

3
@naxa, to zależy od systemu plików, a nawet w systemie plików (np. ext4), który zależy od włączonych opcji, więc wolę pozostawić to jako „to zależy od systemu plików”, niż starać się być wyczerpującym, co nie byłoby bardzo istotne dla tego pytania.
Stéphane Chazelas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.