Pliki urządzeń nie są plikami jako takimi. Są interfejsem we / wy do używania urządzeń w systemach operacyjnych typu Unix. Nie używają miejsca na dysku, jednak nadal używają i-węzła, jak podano w stat
poleceniu:
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Czy pliki urządzeń używają fizycznych i- węzłów w systemie plików i dlaczego w ogóle ich potrzebują?
filesystems
devices
inode
stat
direprobs
źródło
źródło
Odpowiedzi:
Krótka odpowiedź brzmi, że dzieje się tak tylko wtedy, gdy masz fizyczne wsparcie systemu plików
/dev
(a jeśli używasz nowoczesnej dystrybucji Linuksa, prawdopodobnie nie masz).Długa odpowiedź brzmi:
Wszystko to wraca do pierwotnej filozofii UNIX, że wszystko jest plikiem. Ta filozofia jest częścią tego, co sprawiło, że UNIX jest tak wszechstronny, ponieważ można bezpośrednio wchodzić w interakcje z urządzeniami z przestrzeni użytkownika bez konieczności posiadania specjalnego kodu w aplikacji, aby rozmawiać bezpośrednio ze sprzętem fizycznym.
Pierwotnie
/dev
był to po prostu inny katalog o znanej nazwie, w którym umieszczasz pliki urządzenia. Niektóre systemy UNIX nadal przyjmują takie podejście (uważam, że OpenBSD nadal tak robi) i zazwyczaj można stwierdzić, czy system taki jest, ponieważ będzie miał wiele plików urządzeń dla urządzeń, których system w rzeczywistości nie ma (na przykład pliki dla każdego możliwa partycja na każdym możliwym dysku). Oszczędza to miejsce w pamięci i czas przy rozruchu kosztem użycia nieco więcej miejsca na dysku, co było dobrym kompromisem dla wczesnych systemów, ponieważ były one na ogół bardzo ograniczone w pamięci i niezbyt szybkie. Jest to ogólnie nazywane statycznym/dev
.W nowoczesnych systemach Linux (i uważam również, że FreeBSD i prawdopodobnie najnowsze wersje Solaris),
/dev
to tymczasowy system plików w pamięci zapełniany przez jądro (lub udev, jeśli używasz Systemd, ponieważ nie ufają jądru, że zrobi prawie wszystko) . Oszczędza to miejsce na dysku w cenie pewnej pamięci (zwykle mniej niż kilka MB) i bardzo mały narzut przetwarzania. Ma również szereg innych zalet, z których jedną z największych jest to, że łatwiej jest wykryć sprzęt podłączony na gorąco. Jest to ogólnie określane jako dynamiczne/dev
.W obu przypadkach dostęp do węzłów urządzeń jest uzyskiwany za pośrednictwem zwykłej warstwy VFS, co z definicji oznacza, że muszą one mieć i-węzeł (nawet jeśli jest to wirtualny, który istnieje, aby rzeczy takie
stat()
jak powinny. Z praktycznego punktu widzenia ma to zerowy wpływ na systemy, które używają dynamiki,/dev
ponieważ tylko przechowują i-węzły w pamięci lub generują je w razie potrzeby, i prawie zerowy wpływ tam, gdzie/dev
jest statyczny, ponieważ i-węzły zajmują prawie zerową przestrzeń na dysku, a większość systemów plików nie ma górnego limitu lub zapewnić znacznie więcej niż ktokolwiek może kiedykolwiek potrzebować.źródło
Pliki urządzeń również mają uprawnienia, które są przechowywane w i-węzle.
źródło
Katalogi są po prostu odwzorowaniem nazw plików na i-węzły, więc wszystko, czego dotyczy nazwa (plik, dowiązanie symboliczne, urządzenie, FIFO, gniazdo), musi znajdować się w i-węźle, nie ma gdzie indziej.
Informacje o urządzeniu są przechowywane w i-węźle. Główne i drobne numery urządzeń są tam, podobnie jak uprawnienia, znaczniki czasu itp. Pole typu, które mówi, że jest to urządzenie blokowe lub znakowe, a nie zwykły plik, jest tam przechowywane.
I-węzeł dla urządzeń po prostu nie korzysta z pól zawierających mapę blokową pliku.
źródło
Bez i-węzła miałabyś tylko nazwę pliku, która przechowywałaby wszystkie informacje o danym urządzeniu. Oznacza to, że „ładne” nazwy urządzeń, takie jak,
/dev/sda
byłyby wykluczone: potrzebujesz nazwy, która mogłaby być powiązana z określonym sterownikiem, np/dev/ohci/sda
.Co ważniejsze, wszystkie narzędzia, które polegają na węzłów (jak
stat
,ls
i tak dalej) musiałyby być modyfikowane pod traktować ścieżek/dev
w sposób szczególny. Byłoby to zbyt duże nakłady pracy bez widocznych korzyści w porównaniu z obecnym stanem rzeczy.źródło