GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi initrd a initramfs?

Myslím, že máte ve všem pravdu.

Rozdíl je snadno vidět, pokud postupujete podle kroků potřebných při bootování:

initrd

  • A ramdev je vytvořeno blokové zařízení. Jedná se o blokové zařízení založené na paměti RAM, což je simulovaný pevný disk, který místo fyzických disků používá paměť.
  • initrd soubor se načte a rozbalí do zařízení, jako byste to udělali zcat initrd | dd of=/dev/ram0 nebo něco podobného.
  • initrd obsahuje obraz souborového systému, takže nyní můžete souborový systém připojit jako obvykle:mount /dev/ram0 /root . Souborové systémy přirozeně potřebují ovladač, takže pokud používáte ext2, musí být ovladač ext2 zkompilován v jádře.
  • Hotovo!

initramfs

  • A tmpfs je připojen:mount -t tmpfs nodev /root . Tmpfs nepotřebuje ovladač, je vždy v jádře. Není potřeba žádné zařízení, žádné další ovladače.
  • initramfs je dekomprimován přímo do tohoto nového souborového systému:zcat initramfs | cpio -i , nebo podobně.
  • Hotovo!

A ano, stále se nazývá initrd na mnoha místech, ačkoli je to initramfs , zejména v bootloaderech, protože pro ně je to jen BLOB. Rozdíl je způsoben operačním systémem při spouštění.


Cache Dentry (a inode)

Subsystém souborového systému v Linuxu má tři vrstvy. VFS (virtuální souborový systém), který implementuje rozhraní systémových volání a zpracovává křížení přípojných bodů a výchozí kontroly oprávnění a limitů. Pod ním jsou ovladače pro jednotlivé souborové systémy a ty zase rozhraní k ovladačům pro bloková zařízení (disky, paměťové karty atd.; síťová rozhraní jsou výjimkou).

Rozhraní mezi VFS a souborovým systémem je několik tříd (je to plain C, takže struktury obsahující ukazatele na funkce a podobně, ale koncepčně je to objektově orientované rozhraní). Hlavní tři třídy jsou inode , který popisuje jakýkoli objekt (soubor nebo adresář) v souborovém systému, dentry , který popisuje vstup do adresáře a file , který popisuje soubor otevřený procesem. Po připojení vytvoří ovladač souborového systému inode a dentry protože je to root a ostatní se vytvářejí na vyžádání, když chce proces získat přístup k souboru a nakonec vypršela platnost. To je dentry a inode cache.

Ano, znamená to, že pro každý otevřený soubor a jakýkoli adresář až po root musí být inode a dentry struktury alokované v paměti jádra, které jej reprezentují.

Mezipaměť stránek

V Linuxu je každá paměťová stránka obsahující uživatelská data reprezentována jednotným page struktura. To může stránku označit buď jako anonymní (může být zaměněno za odkládací prostor, pokud je k dispozici), nebo ji přiřadit k inode na nějakém souborovém systému (může být zapsán a znovu načten ze souborového systému) a může být součástí libovolného počtu paměťových map, tj. viditelných v adresovém prostoru nějakého procesu. Součet všech stránek aktuálně načtených v paměti je mezipaměť stránek.

Stránky se používají k implementaci rozhraní mmap a zatímco běžná systémová volání pro čtení a zápis mohou být implementována souborovým systémem jinými prostředky, většina rozhraní používá obecnou funkci, která také používá stránky. Existují obecné funkce, které při požadavku na čtení souboru alokují stránky a zavolají souborový systém, aby je vyplnil, jednu po druhé. U souborového systému založeného na blokovém zařízení pouze vypočítá vhodné adresy a deleguje toto vyplnění na ovladač blokového zařízení.

ramdev (ramdisk)

Ramdev je běžné blokové zařízení. To umožňuje navrstvit na něj libovolný souborový systém, ale je to omezeno rozhraním blokového zařízení. A to má jen metody, jak vyplnit stránku přidělenou volajícím a napsat ji zpět. To je přesně to, co je potřeba pro skutečná bloková zařízení, jako jsou disky, paměťové karty, velkokapacitní úložiště USB a podobně, ale pro ramdisk to znamená, že data existují v paměti dvakrát, jednou v paměti ramdev a jednou v paměti přidělené volajícího.

Toto je starý způsob implementace initrd . Z dob, kdy initrd byl vzácný a exotický výskyt.

tmpfs

Tmpfs je jiný. Je to falešný souborový systém. Metody, které poskytuje VFS, jsou naprosté minimum, aby to fungovalo (jako takové je to vynikající dokumentace toho, co by měly dělat metody inode, dentry a file). Soubory existují pouze tehdy, pokud existuje odpovídající inode a dentry v mezipaměti inodů, vytvořené při vytvoření souboru a nikdy nevypršela platnost, pokud soubor není odstraněn. Stránky jsou při zápisu dat přidruženy k souborům a jinak se chovají jako anonymní (data mohou být uložena za účelem swapu, page struktury zůstávají používány, dokud soubor existuje).

To znamená, že v paměti nejsou žádné další kopie dat a celá věc je mnohem jednodušší a díky tomu také o něco rychlejší. Jednoduše používá datové struktury, které slouží jako mezipaměť pro jakýkoli jiný souborový systém jako primární úložiště.

Toto je nový způsob implementace initrd (initramfs , ale obrázek se stále nazývá pouze initrd ).

Je to také způsob implementace "posix sdílené paměti" (což jednoduše znamená, že tmpfs je připojen na /dev/shm a aplikace tam mohou volně vytvářet soubory a mmapovat je; jednoduché a efektivní) a v poslední době dokonce /tmp a /run (nebo /var/run ) často mají tmpf namontované zejména na noteboocích, aby se disky nemusely protáčet nebo aby se zabránilo opotřebení v případě SSD.


Linux
  1. Jaký je rozdíl mezi vyrovnávací pamětí a mezipamětí v Linuxu?

  2. Jaký je rozdíl mezi zápisem do souboru a namapovanou pamětí?

  3. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  2. Rozdíl mezi Getty a Agetty?

  3. Rozdíl mezi .exrc a .vimrc?