Powiedz, że Johnny tworzy PUSTY plik. To się nazywa foobar.py
. Kiedy Johnny pozwala na wykonanie, biegnie chmod 755 foobar.py
. Plik ma teraz metadane
-rw-r--r-- 1 johnny staff 0 Dec 27 22:53 foobar.py
Gdzie są przechowywane wszystkie metadane w tym pliku? Rozmiar pliku wynosi 0, więc jak zachowuje metadane, gdy jest przenoszony na inny dysk?
Odpowiedzi:
Nie jest przechowywany w tym pliku. Jest przechowywany w systemie plików, a wszystkie parametry są kopiowane ręcznie jeden po drugim (choć niektórych nie można w ogóle skopiować).
Oznacza to, że większość systemów operacyjnych tak naprawdę nie ma wywołania „kopiuj plik z metadanymi”. Program do kopiowania plików po prostu tworzy nowy plik o nazwie
foobar.py
, kopiuje całe 0 bajtów danych, a następnie używa utime () lub SetFileTime (), aby czas modyfikacji wyglądał tak samo jak oryginał. Podobnie uprawnienia do plików byłyby „kopiowane” przez ich ponowne ustawienie za pomocą chmod () lub przez skopiowanie atrybutu POSIX ACL.Niektóre metadane nie są kopiowane. Ustawienie własności wymaga uprawnień roota, więc kopie plików innych osób należą do ciebie i zajmują miejsce na dysku. Czas ctime (czas zmiany atrybutu) jest niemożliwy do ręcznego ustawienia na Uniksach; btime (czas urodzenia / utworzenia) zwykle również nie jest kopiowany.
Porównaj
cp -a foo bar
(które kopie metadanych) icp foo bar
(które nie):źródło
Zasadniczo różni się w zależności od systemu plików, w którym przechowywane są metadane. W systemach plików z rodziny ext2 wspomniane metadane (właściciel, grupa, uprawnienia, czas) są przechowywane w i- węzle . I-węzeł przechowuje również (wskaźniki) bloki zajmowane przez plik na dysku. I-węzeł nie przechowuje nazwy pliku.
Możesz uzyskać dostęp do tych danych za pomocą
stat
wywołania systemowego (man 2 stat
) i użyćstat
narzędzia, aby je wydrukować (man stat
). Szczegółowy opis pól i-węzłów można znaleźć wlinux/include/linux/fs.h
źródle jądra.Istnieją inne rodzaje metadanych (np. Uprawnienia ACL ), które są przechowywane w różnych miejscach.
Metadane nie są domyślnie kopiowane podczas kopiowania pliku. Zamiast tego tworzony jest nowy plik z domyślnymi wartościami metadanych. Istnieją różne opcje
cp
(-p
,--preserve
), które nakazującp
również kopiować metadane, czytając stare metadanestat
i odpowiednio modyfikując nowe metadane.źródło
W zależności od systemu plików obszary są rezerwowane (pół-) statycznie lub dynamicznie, aby przechowywać metadane, takie jak uprawnienia, rozmiar i inne (czasem także nazwa pliku).
W Uniksie metadane są przechowywane w i- węźle kontrolującym obszar danych, w którym znajduje się plik ( podczas gdy nazwy plików i powiązane numery i-węzłów są przechowywane we wpisie katalogu ).
W niektórych systemach plików wpisy katalogu to pliki jak każdy inny, ale niewidoczne. FAT i FAT32 to takie systemy plików (katalog główny FAT jest jednak „specjalny”). Podczas tworzenia pliku dodajesz / edytujesz w pliku pozycję opisującą folder, w którym plik się znajduje. Każdy wpis jest wystarczająco duży, aby przechowywać rozmiar pliku, nazwę i datę i nic więcej (długie nazwy zajmujące wiele wpisów; domyślny rozmiar 32 bajtów może zawierać jedną nazwę w starym formacie 8 + 3). Wszystko to oczywiście , zakładając, że moja pamięć działa). System Ext jest podobny, ale pozycja katalogu jest dynamicznie zmieniana i zawiera tylko nazwę i wskaźnik i-węzła; wszystkie inne informacje są w i-węzle. W ten sposób dwa wpisy mogą wskazywać na ten sam plik, co jest przydatne do zarządzania zduplikowanymi plikami.
W niektórych systemach plików i-węzły mogą być wystarczająco duże, aby pomieścić niewielką ilość danych oprócz metadanych, tak że jeśli plik może się tam zmieścić, nie zajmuje dodatkowego miejsca na dysku. Tworzysz plik 45-bajtowy, a wolne miejsce na dysku w ogóle się nie zmienia; bajty te są przechowywane wewnątrz i-węzła. Myślę, że rodzina ext * obsługuje to (i NTFS też). Pomaga to zarządzać dużą liczbą bardzo małych plików.
W jeszcze innych systemach plików obok głównego systemu znajduje się „fantomowy” system plików, który przechowuje te dodatkowe atrybuty. Nie tylko informacje o pliku, ale prawdopodobnie także ikony pliku .
Niektóre systemy mają jedno i drugie: NTFS ma pełne metadane katalogu działające w stylu i-węzłowym oraz możliwość tworzenia alternatywnych strumieni danych zawierających dalsze informacje, które (najwyraźniej) niczego nie zmieniają w „głównym” pliku.
źródło