Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux啟動過程中檔案系統掛載流程詳解

編輯:Linux 教學

Linux核心啟動過程中,檔案系統的掛載順序與機制常讓初學者困惑。本文以嵌入式ARM平台(非initrd模式)為例,梳理從核心掛載根檔案系統到用戶空間init接管的完整流程。

核心空間掛載階段

  1. 掛載根檔案系統:核心函式mount_root()(fs/super.c)掛載NAND Flash上的root.cramfs為/。啟動參數root=/dev/mtdblock/2指定裝置。
  2. 掛載devfs:mount_devfs_fs()將裝置檔案系統掛載至/dev,提供裝置節點存取。
  3. 若使用initrd,核心會先載入initrd映像至記憶體,執行/linuxrc腳本載入驅動模組,再pivot_root切換真實根檔案系統。本例採noinitrd,故無此步驟。

用戶空間初始化階段

  1. 核心啟動第一個用戶進程init(PID 1),啟動參數init=/linuxrc指定腳本。
  2. /linuxrc典型內容:
    #!/bin/sh
    mount -n -t ramfs ramfs /etc
    cp -a /mnt/etc/* /etc
    mount -f -t cramfs -o remount,ro /dev/mtdblock/3 /
    mount -f -t ramfs ramfs /etc
    exec /sbin/init
    
    • 將/etc掛載為ramfs,實現可寫配置目錄(根檔案系統為唯讀cramfs)。
    • 從唯讀備份/mnt/etc複製配置檔至/etc。
    • 重新掛載根檔案系統為唯讀,確保完整性。
    • exec /sbin/init替換進程映像,啟動標準SysV init流程。

initrd核心價值

  • 模組化驅動載入:核心精簡,複雜驅動(SCSI、RAID、網卡、NFS)放入initrd,啟動時動態載入。
  • 硬體抽象與可移植性:同一核心搭配不同initrd即可適配不同硬體平台,無需重編核心。
  • 無盤工作站:initrd含NFS客戶端,支援網路開機。

開機自動執行程式的實現

在/linuxrc或/etc/rc.d/rc.local、/etc/init.d/服務腳本中加入啟動命令即可。嵌入式系統常直接修改/linuxrc或建立/etc/init.d/rcS腳本。

理解掛載流程有助於診斷「找不到根裝置」、「唯讀檔案系統無法寫入配置」等常見啟動故障。

Copyright © Windows教程網 All Rights Reserved