Jak przechowywane są struktury katalogów w systemie plików UNIX?

8

Przeczytałem, że każdy katalog przechowuje swoją zawartość (pliki i podkatalogi) za pomocą listy nazw plików i par i-węzłów. Ale żaden z odniesień, które otrzymałem, nie powiedział coś o tym, jak są przechowywane.

Czy są przechowywane w i-węzle katalogu nadrzędnego, używając bloków danych jak normalny plik, czy może wykorzystując inne sposoby, których nie znam?

Dziękuję za wyjaśnienie.

Ok
źródło
Nie ma jednego sposobu, w jaki Unix przechowuje pliki. Podobnie jak nie ma jednego sposobu, w jaki system Windows przechowuje pliki. W obu przypadkach zależy to od używanego systemu plików. (FAT, NTFS, ext2, UFS, ...)
Hennes
W przypadku systemów plików struktura katalogów na dysku jest zdefiniowana w dirent.h, a do dostępu do zawartości należy użyć libcalls opendir / readdir / closedir itp.
ott--

Odpowiedzi:

10

Zobacz elementy wewnętrzne systemu plików, które w dość prosty sposób przedstawiają elementy wewnętrzne typowego systemu plików Unix.

wprowadź opis zdjęcia tutaj

Większość systemów plików Unix zawiera

  • Blok rozruchowy
  • Superblok (geometria dysku, układ partycji, liczba i-węzłów itp.)
  • Bloki węzłów
  • Bloki danych

Nowoczesne systemy plików zawierają dodatkowe struktury.

Jedną z rzeczy w superbloku jest lokalizacja i-węzłów dla katalogu głównego.

Katalog to specjalnie sformatowany plik. Podobnie jak w przypadku wszystkich zwykłych plików, ma bloki danych.

Można to zobaczyć w Projekcie dokumentacji systemu Linux: System plików

wprowadź opis zdjęcia tutaj

Możesz użyć debugfsdo zbadania tych struktur.

RedGrittyBrick
źródło
2
„Katalog jest specjalnie sformatowanym plikiem. Podobnie jak wszystkie zwykłe pliki, ma bloki danych.” Czy katalogi są zatem przechowywane w swoich blokach danych w parach nazw plików i-węzłów (skrajnie lewa tabela na pierwszym obrazie lub wiersz na drugim obrazku)?
Oka
1
@Oka: To prawda.
RedGrittyBrick,
Tak więc, dla jasności, katalog jest plikiem, więc jest przechowywany w bloku danych. Na przykład każdy katalog w ext4systemie plików (co reprezentuje ext4_dir_entry_2długość 263 bajtów) pojedynczy blok 4KB może przechowywać około 15 pozycji katalogu?
campescassiano