initramfs 是否使用 /etc/fstab?

initramfs 是否使用 /etc/fstab?

據我理解,initramfs 負責載入「真正的」根檔案系統。

現在,我們在兩個地方定義該根。首先我們在 中放入一個條目/etc/fstab。其次,我們將設備放在內核啟動命令上,例如root=/dev/sda1

initramfs 使用哪一個來決定根檔案系統在哪裡?如果它使用根核心參數,為什麼我們有一個條目/etc/fstab?第二個選項(讀作/etc/fstab)非常不合邏輯,因為該/etc/fstab檔案位於 initramfs 首先嘗試掛載的根裝置上。

非常令人困惑的東西。

答案1

正如您所說,initramfs 的目的是安裝「真正的」根檔案系統(它也可以做其他事情,但這是常見任務)。

如果沒有 initramfs,核心通常會將分割區掛載為唯讀,然後將控制權傳遞給/sbin/init. initramfs 只是從核心接管此任務,通常當根檔案系統不是普通分割區(mdraid、lvm、加密等)時。

現在,除了 initramfs 上的背景之外,您還/etc/fstab駐留在根檔案系統上。因此,當 initramfs 啟動時,根檔案系統不存在,因此它無法存取 fstab(先有雞還是先有蛋的問題)。
相反,我們必須將一個參數傳遞到核心啟動參數中以供 initramfs 使用。通常這類似於root=/dev/sdX.但是,它也可能會自動找出根設備的位置,因此根本沒有參數。由於它只是軟體(通常是腳本),因此它確實可以做任何它想做的事情來安裝根設備。

現在,如前所述,內核會將真正的根掛載為唯讀。 initramfs 應該做到這一點。一旦 initramfs 完成,系統就會像根本沒有 initramfs 一樣繼續引導並/sbin/init啟動。然後,該 init 啟動所有正常的引導腳本,其中一個腳本的工作是讀取/etc/fstab、將 root 切換為讀寫以及掛載所有其他檔案系統。

答案2

可能會,也可能不會。由於 Initramfs 可以透過多種方式建構(核心只是載入它並運行/init它執行任何操作)。然而,使用參數更常見,因為它提供了更大的靈活性 - 即,如果某些內容發生變化,您只需編輯啟動項目即可繼續工作。對於內建的硬編碼根,這不一定是可能的。

不管怎樣,fstab 條目可能仍然是必要的,因為它還決定其他事情,例如掛載選項(其中一些可以隨時更改)和fsck順序。另外,即使它完全是多餘的(如果 Initramfs 處理它,它也可以不處理),我仍然會保留該條目,只是為了完整性。

答案3

您可以將 /etc/fstab 視為靜態掛載,它只是執行此類任務的一種方法,但不是唯一的方法,事實上,運行命令 mount ,您會看到 fstab 中缺少許多檔案系統。像 udev 和 udisk 這樣的服務管理大部分“自動掛載”,忽略 /etc/fstab 檔案...

因此,如果某些內容被安裝或不經常安裝,則與 /etc/fstab 無關。

initramfs 它只是在引導過程中使用的臨時 rootfs,直到安裝「真正的」rootfs,那麼為什麼 initramfs 應該位於 /etc/fstab 上?

相關內容