A teraz szczegółowe wyjaśnienie tego, co przedstawiłem powyżej.
Chociaż zarówno initramfs, jak i initrd służą temu samemu celowi, istnieją 2 różnice. Najbardziej oczywistą różnicą jest to, że initrd jest ładowany do ramdysku. Składa się z rzeczywistego systemu plików (zazwyczaj ext2), który jest zamontowany na ramdysku. Z drugiej strony initramfs nie jest systemem plików. Jest to po prostu (skompresowane) archiwum cpio (typu newc), które jest rozpakowywane w tmpfs. Ma to efekt uboczny polegający na tym, że initramfs jest nieco bardziej zoptymalizowany i może ładować się trochę wcześniej w procesie rozruchu jądra niż initrd. Ponadto rozmiar initramfs w pamięci jest mniejszy, ponieważ jądro może dostosować rozmiar tmpfs do tego, co jest faktycznie załadowane, zamiast polegać na predefiniowanych rozmiarach ramdysku,
Istnieje również inna różnica w skutkach ubocznych: sposób obsługi urządzenia root (i przełączania się na nie). Ponieważ initrd to rzeczywisty system plików rozpakowany w pamięci RAM, urządzeniem głównym musi być tak naprawdę ramdysk. W przypadku initramfs istnieje jądro „rootfs”, które staje się tmpfs, do którego jest rozpakowywany initramfs (jeśli jądro ładuje initramfs; jeśli nie, to rootfs to po prostu system plików określony za pomocą parametru bootowania root = jądro), ale Tymczasowych plików rootf nie należy określać jako parametru root = boot (i nie byłoby na to sposobu, ponieważ nie jest do niego podłączone żadne urządzenie). Oznacza to, że nadal możesz przekazać swoje prawdziwe urządzenie root do jądra podczas korzystania z initramfs. Za pomocą initrd musisz przetworzyć to, czym jest prawdziwe urządzenie root. Ponadto, ponieważ „prawdziwy” urządzeniem root z initrd jest ramdysk, jądro musi naprawdę przełączać urządzenia root z jednego urządzenia rzeczywistego (ramdysk) na drugie (twój prawdziwy root). W przypadku initramfs przestrzeń initramfs (tmpfs) nie jest prawdziwym urządzeniem, więc jądro nie przełącza rzeczywistych urządzeń. Tak więc, podczas gdy komenda pivot_root jest używana z initrd, dla initramfs należy użyć innej komendy. Busybox zapewnia switch_root, aby to osiągnąć, a klibc oferuje new_root. dla initramfs należy użyć innego polecenia. Busybox zapewnia switch_root, aby to osiągnąć, a klibc oferuje new_root. dla initramfs należy użyć innego polecenia. Busybox zapewnia switch_root, aby to osiągnąć, a klibc oferuje new_root.
pivot_root
W przeszłości używałem initramfs,switch_root
wtedy nie istniało.switch_root
wydaje się być metoda wygodapivot_root
który robi trochę więcej porządki i również ruchy/proc
/sys
i/dev
etc, a nie tylko samego korzenia/
. Z mojego zrozumienia może to być dowolna ścieżka i nie ma ona nic wspólnego z rzeczywistymi „dyskami”.