Dwie kolejne rzeczy: przejście Linuksa na korporację i inne duże serwery ujawniało zakłócenia statyczne /dev
. Zaawansowana technologia, zarówno wśród konsumentów, jak i przedsiębiorstw, ujawniała static / dev jako żart. [Ta odpowiedź wypełnia większą część historii, nie szczególnie dlaczego devfs zastąpiono udev].
Wyczerpanie dużej i małej liczby miejsc
/dev
pliki są identyfikowane w jądrze przez ich główne i podrzędne numery. Jądro nigdy tak naprawdę nie troszczyło się o nazwę (i możesz na przykład mv /dev/sda /dev/disk-1
nadal działać, ale oczywiście programy nie wiedziałyby, gdzie ją znaleźć).
W przypadku ustawienia statycznego /dev
musisz przypisać numer główny / pomocniczy dla każdego potencjalnego urządzenia, które mogłoby istnieć. Liczby te muszą być unikalne na całym świecie, ponieważ są wysyłane w ramach dystrybucji, a nie tworzone na żądanie. Problem polega na tym, że każda z nich to liczby 8-bitowe - zakres wynosi 0–255.
Początkowo na przykład Linux zaczynał się od 8,0 sda, 8,1 sda1, 8,16 sdb itp. Ale ludzie ciągle dodawali coraz więcej dysków do maszyn, szczególnie gdy rozważamy takie rzeczy jak Fibre Channel. W pewnym momencie dodano więcej liczb 65–71 dla większej liczby dysków. Później numery główne 128–135. A jednak ludzie wciąż chcieli więcej dysków ...
Pojawiły się formaty tablic partycji, takie jak GPT, obsługujące więcej partycji na dysk. I oczywiście inne urządzenia jadły przez przestrzeń numeryczną: różne kontrolery RAID, logiczne zarządzanie woluminami itp.
Wynik końcowy można zobaczyć na liście urządzeń LANANA Linux . Jeśli spojrzysz na listę 2.6 (jedyną, która wciąż tam jest), wiele blokowych liczb głównych przez 200 (maks .: 255) - jest używanych. Oczywiście liczby by się skończyły.
Zmiana na większą liczbę nie była łatwa. Zmienia ABI jądra. W zależności od systemu plików zmienia układ na dysku. Ale oczywiście większość z tych urządzeń nie istniała w żadnym systemie, nawet na tym, na którym brakowało dysków SCSI, zapewne było mnóstwo wolnych rzeczy - prawdopodobnie nie potrzebował dysku twardego IBM XT, na przykład.
Dzięki dynamice /dev
dystrybucja nie musi wysyłać numerów urządzeń. Nie muszą już być globalnie wyjątkowe. Nie muszą nawet być wyjątkowe w obuwiu.
Nazwy urządzeń były nieprzewidywalne
Kiedyś przypisywanie numeru do wszystkiego było naprawdę łatwe. Tablica miała dwa kanały IDE; każdy kanał IDE obsługiwał jeden master i jeden slave. Możesz przypisać w kolejności kanałów oraz w kolejności master-then-slave. hda
Staje się więc pierwszym kanałem, mistrzu; hdb
pierwszy kanał, slave; hdc
drugi kanał, master; itp. Były przewidywalne i stabilne. Mogą ulec zmianie, jeśli dodasz nowy dysk lub go usuniesz, ale przy braku zmiany sprzętu były statyczne.
Możesz włożyć /dev/hda1
swój /etc/fstab
i mieć pewność, że będzie działał, przynajmniej w przypadku braku zmian sprzętowych.
IDE tak działało. Nic po tym nie robi.
SATA wydaje się prosta: jeden port, jeden dysk. Ale nie tak; pozwala na pomnożenie portów. I pozwala na wymianę. Mimo braku zmian sprzętowych nadal można nadal działać mapowanie.
USB jest znacznie gorszy. To nie tylko pozwala na hot swap, jest to typowe. Ludzie cały czas podłączają dyski flash USB. Ponadto, sondowanie może zająć trochę czasu - i może się zmieniać, kiedy tylko ma na to ochotę (np. Po włączeniu lub wyłączeniu trybu pamięci USB w telefonie). Firewire jest podobny. Z żadną z nich nie możesz naprawdę stworzyć stabilnego mapowania.
Dyski podłączone do sieci nie mają żadnej właściwej kolejności portów. Jądro używa tylko tej kolejności, w jakiej się pojawiły. To samo z woluminami logicznymi.
Poszukiwanie prędkości rozruchu również pogorszyło sytuację. Początkowo jądro chętnie siedziało i czekało dość długo na, na przykład, na zainicjowanie wszystkich urządzeń USB. Aby w pełni sondować wszystkie magistrale SCSI itp. Sondy te zostały przekształcone w zadania w tle; boot nie będzie już na nich czekać. Urządzenia są dodawane po zakończeniu sond.
Więc jądro zostało, mniej więcej, „w jakiejkolwiek kolejności się pojawią”. Oznaczało to, że wiele rodzajów urządzeń może i zmieniało kolejność przy każdym rozruchu - to, co było przy jednym rozruchu, /dev/sdb
było przy innym rozruchu /dev/sdc
. To sprawia, że pomysł statyczny /dev
jest żartem.
Podsumowanie
Kiedy weźmiesz kombinację statyczności za /dev
coraz bardziej bez znaczenia z powodu nieprzewidywalnych zamówień sond urządzeń i kontynuujesz przydzielanie statycznych liczb głównych / drugorzędnych, co prowadzi do znacznej pracy, aby się nie wyczerpać, staje się jasne, dlaczego programiści Linuksa zdecydowali się przejść na dynamikę /dev
.
/dev
nie dotyczą (łatwo lub wygodnie) takich rzeczy, jak osoba podłączająca kartę sieciową USB lub wirtualne karty sieciowe dodawane lub usuwane podczas działania systemu. Jednak nic nie stoi na przeszkodzie, aby odinstalowaćudev
i wrócić do zwykłej starej ścieżki/dev
katalogu statycznego .