什麼是 initrd.img
對我個人而言,學習一個系統的最好的方法就是隨著其啟動執行的過程一點一點跟進(就好象看一個程式的原始碼要從main函式或者說從入口函式開始步步跟進)。當然具體的學習過程重點不是找到入口點就OK的。中間還有很多技巧,比如什麼時候這個應該跳過一個實現什麼時候應該跟進等。這個具體方法就一言難盡了,我也不再多少說了。不多說的兩個簡單原因:1、正如我開始說的,這個方法也許只適合我。 2、並不是本篇文章的重點。
我前面那麼多廢話只是想帶出我聊聊的的 initrd.img檔案,因為它就是系統啟動會載入的檔案。說 initrd.img檔案還會提到另外一個名角---vmlinuz 。vmlinuz 正式 linux的核心,當然這裡不是要討論它。
一般來講大家很容易理解的是這樣的:系統核心 vmlinuz被載入到記憶體後開始提供底層支援,在核心的支援下各種模組,服務等被載入執行。這樣當然是大家最容易接受的方式,曾經的linux就是這樣的執行的。假設你的硬碟是scsi 介面而你的核心又不支援這種介面時,你的核心就沒有辦法訪問硬碟,當然也沒法載入硬碟上的檔案系統,怎麼辦?好辦!把核心加入scsi驅動原始碼然後重新編譯出一個新的核心檔案替換原來vmlinuz。
需要改變標準核心預設提供支援的例子還有很多,如果每次都需要編譯核心就太麻煩了。所以後來的linux就提供了一個靈活的方法來解決這些問題---initrd.img
ininrd.img是什麼呢?initrd 的含義是initialized ram disk. ramdisk是用一部分記憶體模擬成磁碟,讓作業系統訪問。舉個例子,不知道你用過沒用過win pe他的衍生版比較有名的就是“深山紅葉系統修復光碟”。當使用win pe 啟動後會發現你的計算機就算沒有硬碟也能在正常執行,其中有個檔案系統B:/ 分割槽,這個分割槽就是記憶體模擬的磁碟。
initrd.img檔案就是個ramdisk的映像檔案(其實是壓縮過的,後面會解釋)。ram disk是標準核心檔案認識的裝置(/dev/ram0)檔案系統也是標準核心認識的檔案系統。核心載入這個ram disk作為根檔案系統並開始執行其中的"某個檔案"(2.6核心是 init檔案)來載入各種模組(支援scsi的驅動就可以放在這裡),服務等(這時然後系統就更強大了)。經過一些配置和執行後,就可以去物理磁碟載入真正的root分割槽了,然後又是一些配置等,最後啟動成功。
也就是你只需要定製適合自己的 initrd.img 檔案就可以了。這要比重編核心簡單多了,省時省事低風險。核心啟動過程中具體執行了initrd.img 內的哪些檔案和順序不在本文討論,下面只講講你怎樣才能看到 initrd.img的內容。
這個方法是對kernel-2.5之後的版本適用的。因為這之前的initrd.img和之後的格式是不同的。這之後的版本一般被稱為cpio-initrd。 initrd.img 是個gz壓縮檔案,initrd.img改名為initrd.gz能用windows下的winrar或linux下的gunzip解壓,解壓後會得到一個initrd檔案。這個檔案就是cpio格式的檔案,只能在linux下用cpio命令解壓(我沒找到在windows下能解藥cpio格式的工具,如果你找到了告訴我一下,謝謝) ,執行cpio -i
< initrd
這篇只是簡單的說了說 initrd.img 的作用,也許有表述的不嚴謹的地方,還請大家多多指教。
相關文章
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架
- 這是什麼這是什麼
- 什麼是WebAuthn、FIDO 是什麼?Web
- ITIL是什麼意思?ITIL是什麼?
- 什麼是跨域,什麼是同源跨域
- 什麼是.NET平臺、什麼是c#、什麼是ASP.NET。C#ASP.NET
- ftp是什麼,ftp是什麼東西?FTP
- Java是什麼_Java是做什麼的?Java
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- ###什麼是Linux核心###什麼是MMULinux
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- 什麼是塊元素?什麼是行內元素?
- 什麼是API介面,具體是什麼意思?API
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 什麼是Unicode,什麼是UTF-8Unicode
- 什麼是藍海?什麼是紅海?什麼是網際網路思維?
- nginx 是什麼,能幹什麼?Nginx
- 什麼是Django?有什麼用途?Django
- AI三重問:什麼是AI?什麼是AI模型?什麼是AI大模型?AI大模型
- 什麼是重繪repaint?什麼是迴流reflow?AI
- DHCP是什麼?DHCP伺服器是什麼意思?伺服器
- 什麼是CDN?CDN的技術原理是什麼?
- 交換機是什麼,它的工作原理是什麼
- GNU是什麼?和Linux是什麼關係?Linux
- 域名是什麼?申請域名的流程是什麼?
- 什麼是雲端計算?什麼是公司網盤?
- 什麼是eval()?eval是用來幹什麼的?
- 什麼是 Nginx?Nginx
- 什麼是PHPPHP
- 什麼是PodcastAST
- 什麼是Flutter?Flutter
- 敏捷是什麼?敏捷
- SQL是什麼?SQL
- 什麼是Docker?Docker
- 什麼是反射?反射