我知道我可以使用 initrd/initramfs 來做任何需要的事情,但如果可能的話,我想避免這個選項。
我需要有一個「正常」工作的rootfs(在嵌入式系統的SD卡上,如果重要的話)。如果由於任何原因引導無法成功(例如:核心無法乾淨地掛載此系統),則應嘗試從「恢復」rootfs(快閃記憶體上的 SquashFS)引導,該 rootfs 將負責恢復「正常」檔案系統並重新開始。
是否可以在不借助 initramfs 的情況下使用類似的功能?
我不想要 initrd/initramfs 的原因是 Flash 大小的限制。
答案1
您可以將「復原」系統用於與 initramfs 相同的目的。這幾乎是同一件事。
當然,它不會像 initramfs 那樣加載到 RAM 中,但這是唯一的區別,而且它仍然可以達到相同的目的 - 掛載真正的 rootfs,檢查是否可以,pivot_root 進入其中,然後執行它的/sbin/ init。如果掛載失敗,則會執行復原。
(反之亦然,您可以刪除 squashfs 檔案系統,然後將所有復原工具放入 initramfs 中 - 如果裝置有足夠的 RAM 來容納它們。)