Różnica między initrd i initramfs?

Z tego co wiem, initrd działa jak urządzenie blokowe, dlatego wymaga sterownika systemu plików(takiego jak ext2). Jądro musi mieć co najmniej jeden wbudowany moduł do wykrywania systemu plików initrd. W tym artykule, wprowadzając initramfs, nowy model dla początkowych dysków RAM, napisano, że:

Ale ramdiski faktycznie marnują jeszcze więcej pamięci z powodu buforowania. Linux jest zaprojektowany do buforowania wszystkich plików i wpisów katalogów odczytanych lub zapisanych aby blokować urządzenia, więc Linux kopiuje dane do i z ramdysku na "page cache "(dla danych plików), oraz "dentry cache" (dla wpisy w katalogu). Minusem ramdiska udającego urządzenie blokowe jest traktowane jak urządzenie blokowe.

Co to jest page cache i dentry cache? W akapicie, czy to oznacza, że dane zostały zduplikowane, ponieważ {[5] } jest traktowany jako urządzenie blokowe, więc wszystkie dane są buforowane?

In construst, ramfs:

Kilka lat temu Linus Torvalds miał fajny pomysł: co jeśli pamięć podręczna Linuksa może być zamontowany jak system plików? Wystarczy zachować pliki w pamięci podręcznej i nigdy nie pozbędziesz się ich, dopóki nie zostaną usunięte lub system się zrestartuje? Linus napisał malutką owijkę wokół pamięci podręcznej o nazwie "ramfs" i inne deweloperzy jądra stworzyli ulepszoną wersję o nazwie " tmpfs "(która może zapisywać dane do miejsca wymiany i ograniczać rozmiar danego montowania punkt tak, że wypełnia się przed zużyciem całej dostępnej pamięci). Initramfs jest instancją tmpfs.

Te systemy plików oparte na pamięci ram automatycznie rosną lub zmniejszają się, aby pasowały do Rozmiar danych, które zawierają. Dodawanie plików do ramfs (lub rozszerzanie istniejących plików) automatycznie przydziela więcej pamięci i kasuje lub obcinanie plików uwalnia tę pamięć. Nie ma duplikacji między Zablokuj urządzenie i pamięć podręczną, ponieważ nie ma urządzenia blokującego. Kopia w cache jest jedyną kopią danych. Co najlepsze, to nie jest nowość kod, ale nowa aplikacja dla istniejącego kodu buforującego Linuksa, który oznacza, że nie dodaje prawie żadnego rozmiaru, jest bardzo prosty i opiera się na bardzo dobrze przetestowana Infrastruktura.

W sumie, ramfs jest po prostu Plik otwarty i załadowany do pamięci, prawda?

Zarówno initrd jak i ramfs są spakowane w czasie kompilacji, ale różnica polega na tym, że initrd jest urządzeniem blokowym rozpakowanym do zamontowania przez jądro podczas uruchamiania, podczas gdy ramfs jest rozpakowane przez cpio do pamięci. Mam rację? A może ramfs jest bardzo minimalnym systemem plików?

Wreszcie, aż do dnia dzisiejszego, initrd obraz jest nadal prezentowany w najnowszym jądrze. Czy jednak initrd faktycznie ramfs jest używane dzisiaj i nazwa jest tylko w celach historycznych?

Author: Amumu, 2012-05-15

2 answers

Dentry (i inode) cache

Podsystem Filesystem w Linuksie ma trzy warstwy. VFS (virtual filesystem), który implementuje interfejs wywołań systemowych i obsługuje przekraczanie punktów montowania oraz sprawdzanie domyślnych uprawnień i limitów. Poniżej znajdują się Sterowniki dla poszczególnych systemów plików, a te z kolei interfejs do sterowników dla urządzeń blokowych (dysków, kart pamięci, itp.; interfejsy sieciowe są wyjątkiem).

Interfejs między VFS a systemem plików to kilka klas (to zwykły C, czyli struktury zawierające wskaźniki do funkcji i tym podobne, ale to koncepcyjnie zorientowany obiektowo interfejs). Główne trzy klasy to inode, która opisuje dowolny obiekt (plik lub katalog) w systemie plików, dentry, która opisuje wpis w katalogu i file, która opisuje plik otwarty przez proces. Po zamontowaniu, sterownik systemu plików tworzy inode i dentry dla jego roota, a pozostałe są tworzone na żądanie, gdy proces chce uzyskać dostęp do pliku i ostatecznie wygasł. To jest dentry i inode cache.

Tak, to znaczy, że dla każdego otwartego pliku i katalogu w dół do katalogu głównego muszą być inode i dentry struktury przydzielone w pamięci jądra, które go reprezentują.

Pamięć podręczna strony

W Linuksie każda strona pamięci zawierająca dane użytkownika jest reprezentowana przez zunifikowaną strukturę page. Może to oznaczać stronę jako anonimową (może być zamieniona na przestrzeń wymiany, jeśli jest dostępna) lub powiązać ją z inode Na jakimś systemie plików (może być zapisana z powrotem do i ponownie odczytać z systemu plików) i może być częścią dowolnej liczby map pamięci, tzn. widocznej w przestrzeni adresowej jakiegoś procesu. Suma wszystkich stron aktualnie załadowanych do pamięci to bufor strony.

Strony są używane do implementacji interfejsu mmap i podczas gdy regularne wywołania systemowe odczytu i zapisu mogą być implementowane przez system plików w inny sposób, większość interfejsów używa funkcji generycznej, która również używa stron. Istnieją ogólne funkcje, które podczas odczytu pliku są wymagane przydzielanie stron i wywołać system plików, aby je wypełnić, jeden po drugim. W przypadku blokowego systemu plików, po prostu oblicza odpowiednie adresy i przekazuje to wypełnienie do sterownika urządzenia blokowego.

Ramdev (ramdisk)

Ramdev to zwykłe urządzenie blokowe. Pozwala to na układanie na nim dowolnego systemu plików, ale jest on ograniczony przez interfejs urządzenia blokowego. A to ma tylko metody na wypełnienie strony przydzielonej przez rozmówcę i odpisanie jej. To jest dokładnie to, co jest potrzebne do prawdziwego bloku urządzenia takie jak dyski, karty pamięci, Pamięć masowa USB i takie, ale dla ramdisk oznacza to, że dane istnieją w pamięci dwa razy, raz w pamięci ramdev i raz w pamięci przydzielonej przez wywołującego.

To jest stary sposób implementacji initrd. Z czasów, kiedy initrd było rzadkim i egzotycznym zjawiskiem.

Tmpfs

Tmpfs jest inny. To fałszywy system plików. Metody, które dostarcza do VFS, są absolutnym minimum, aby to działało (jako takie jest doskonałe dokumentacja co powinny zrobić metody i-węzła, dentry i Pliku). Pliki istnieją tylko wtedy, gdy w pamięci podręcznej i-węzłów znajdują się odpowiednie i-węzły i-węzły, utworzone podczas tworzenia pliku i nigdy nie wygasły, chyba że plik zostanie usunięty. Strony są powiązane z plikami, gdy dane są zapisywane i w inny sposób zachowują się jak anonimowe (dane mogą być przechowywane do wymiany, struktury page pozostają w użyciu tak długo, jak plik istnieje).

Oznacza to, że nie ma dodatkowych kopii danych w pamięci i całej sprawa jest o wiele prostsza i dzięki temu nieco szybsza. Po prostu używa struktur danych, które służą jako pamięć podręczna dla każdego innego systemu plików, ponieważ jest to podstawowa pamięć masowa.

To jest nowy sposób realizacji initrd (initramfs, ale obraz wciąż nazywa się po prostu initrd).

Jest to również sposób implementacji "posix shared memory" (co po prostu oznacza, że tmpfs jest montowany na /dev/shm i aplikacje mogą swobodnie tworzyć tam pliki i je mmapować; proste i wydajne) , a ostatnio nawet /tmp i /run (lub /var/run) często mają Moduły tmpf zamontowane szczególnie na notebookach, aby dyski nie musiały się obracać lub unikać zużycia w przypadku dysków SSD.

 42
Author: Jan Hudec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-16 07:05:21

Myślę, że masz rację.

Różnica jest łatwa do sprawdzenia, jeśli wykonasz kroki potrzebne podczas uruchamiania:

initrd

  • powstaje ramdev urządzenie blokowe. Jest to urządzenie blokowe oparte na pamięci ram, czyli symulowany dysk twardy, który wykorzystuje pamięć zamiast dysków fizycznych.
  • plik initrd jest odczytywany i rozpakowywany do urządzenia, tak jakbyś to zrobił zcat initrd | dd of=/dev/ram0 lub coś podobnego.
  • initrd zawiera obraz systemu plików, więc teraz możesz zamontować system plików jak zwykle: mount /dev/ram0 /root. Oczywiście systemy plików potrzebują sterownika, więc jeśli używasz ext2, sterownik ext2 musi być skompilowany w jądrze.
  • Zrobione!

initramfs

  • a tmpfs jest zamontowany: mount -t tmpfs nodev /root. Tmpfs nie potrzebuje sterownika, jest zawsze w kernelu. Bez urządzenia, bez dodatkowych sterowników.
  • initramfs jest nieskompresowany bezpośrednio do tego nowego systemu plików: zcat initramfs | cpio -i, lub podobnego.
  • Zrobione!

I tak, w wielu miejscach wciąż nazywa się initrd chociaż jest to initramfs, szczególnie w ładowarkach, to dla nich jest to tylko BLOB. Różnica jest dokonywana przez system operacyjny, gdy uruchamia się.

 52
Author: rodrigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 15:50:29