溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Linux系統(tǒng)中怎么開(kāi)啟Initrd文件系統(tǒng)

發(fā)布時(shí)間:2021-08-11 17:05:43 來(lái)源:億速云 閱讀:150 作者:Leah 欄目:系統(tǒng)運(yùn)維

Linux系統(tǒng)中怎么開(kāi)啟Initrd文件系統(tǒng),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

initial RAM disk

Linux初始RAM磁盤(pán)(initrd)是在系統(tǒng)引導(dǎo)過(guò)程中掛載的一個(gè)臨時(shí)根文件系統(tǒng),用來(lái)支持兩階段的引導(dǎo)過(guò)程。initrd文件中包含了各種可執(zhí)行程序和驅(qū)動(dòng)程序,它們可以用來(lái)掛載實(shí)際的根文件系統(tǒng),然后再將這個(gè) initrd RAM磁盤(pán)卸載,并釋放內(nèi)存。在很多嵌入式Linux系統(tǒng)中,initrd 就是最終的根文件系統(tǒng)。本文將探索 Linux 2.6 的初始 RAM磁盤(pán),包括如何創(chuàng)建以及如何在Linux內(nèi)核中使用。
什么是初始 RAM 磁盤(pán)

初始RAM磁盤(pán)(initrd)是在實(shí)際根文件系統(tǒng)可用之前掛載到系統(tǒng)中的一個(gè)初始根文件系統(tǒng)。initrd與內(nèi)核綁定在一起,并作為內(nèi)核引導(dǎo)過(guò)程的一部分進(jìn)行加載。內(nèi)核然后會(huì)將這個(gè) initrd文件作為其兩階段引導(dǎo)過(guò)程的一部分來(lái)加載模塊,這樣才能稍后使用真正的文件系統(tǒng),并掛載實(shí)際的根文件系統(tǒng)。
initrd 中包含了實(shí)現(xiàn)這個(gè)目標(biāo)所需要的目錄和可執(zhí)行程序的最小集合,例如將內(nèi)核模塊加載到內(nèi)核中所使用的 insmod 工具。
在桌面或服務(wù)器Linux 系統(tǒng)中,initrd 是一個(gè)臨時(shí)的文件系統(tǒng)。其生存周期很短,只會(huì)用作到真實(shí)文件系統(tǒng)的一個(gè)橋梁。在沒(méi)有存儲(chǔ)設(shè)備的嵌入式系統(tǒng)中,initrd 是永久的根文件系統(tǒng)。本文將對(duì)這兩種情況進(jìn)行探索。

Initrd開(kāi)啟步驟

下面來(lái)看下如何打開(kāi)initrd,這里我使用的是debian5操作系統(tǒng)

1.創(chuàng)建一個(gè)目錄,將/boot/initrd.img-2.6.18-6-amd64 復(fù)制到該目錄下.

代碼如下:


root@192.168.30.68:tmp# mkdir initrd
root@192.168.30.68:tmp# cd initrd/
root@192.168.30.68:initrd# ls
root@192.168.30.68:initrd# cp /boot/initrd.img-2.6.18-6-amd64 .
root@192.168.30.68:initrd# ls
initrd.img-2.6.18-6-amd64


2.將initrd文件名改為.gz文件,將其解壓縮.

代碼如下:


root@192.168.30.68:initrd# file initrd.img-2.6.18-6-amd64 #發(fā)現(xiàn)該文件是一個(gè)gzip壓縮過(guò)的文件
initrd.img-2.6.18-6-amd64: gzip compressed data, from Unix, last modified: Thu Sep 24 18:21:40 2009
root@192.168.30.68:initrd# mv initrd.img-2.6.18-6-amd64 initrd.img-2.6.18-6-amd64.gz
root@192.168.30.68:initrd# file initrd.img-2.6.18-6-amd64.gz
initrd.img-2.6.18-6-amd64.gz: gzip compressed data, from Unix, last modified: Thu Sep 24 18:21:40 2009
root@192.168.30.68:initrd# gunzip initrd.img-2.6.18-6-amd64.gz


3.使用file發(fā)現(xiàn)解壓縮過(guò)后的文件是一個(gè)cpid格式,是一種備份格式,使用cpio,參數(shù)'i' 代表解包 與'd' 代表在需要時(shí)自動(dòng)建立第一層目錄.

代碼如下:


root@192.168.30.68:initrd# file initrd.img-2.6.18-6-amd64
initrd.img-2.6.18-6-amd64: ASCII cpio archive (SVR4 with no CRC)
root@192.168.30.68:initrd# cpio -id < initrd.img-2.6.18-6-amd64
32912 blocks
root@192.168.30.68:initrd# ls
bin  conf  etc  init  initrd.img-2.6.18-6-amd64  lib  lib64  sbin  scripts
root@192.168.30.68:initrd# rm initrd.img-2.6.18-6-amd64
rm: remove regular file `initrd.img-2.6.18-6-amd64'? y
root@192.168.30.68:initrd# ls
bin  conf  etc  init  lib  lib64  sbin  scripts


也可以直接通過(guò)zcat讀取gzip格式的文件,再將讀出來(lái)的結(jié)果由pipeline交給cpio解開(kāi)

代碼如下:


root@192.168.30.68:initrd# zcat initrd.img-2.6.18-6-amd64 | cpio -id
32912 blocks
root@192.168.30.68:initrd# ls
bin  conf  etc  init  initrd.img-2.6.18-6-amd64  lib  lib64  sbin  scripts


以上就是initrd文件打開(kāi)后的目錄架構(gòu),當(dāng)kernel啟動(dòng)加載initrd時(shí),并沒(méi)有任何系統(tǒng)的目錄架構(gòu),這時(shí)會(huì)先以initrd所提供的目錄當(dāng)做是系統(tǒng)的暫時(shí)目錄.

其中有個(gè)lib目錄:里面存放著許多的模塊,即現(xiàn)在系統(tǒng)所有的模塊,這代表目錄中所存放的模塊都是開(kāi)機(jī)所必須加載的模塊.例如當(dāng)kernel加載Initrd之后,initrd將會(huì)加相應(yīng)的網(wǎng)絡(luò)模塊驅(qū)動(dòng),以便讓我們進(jìn)入操作系統(tǒng)能夠識(shí)別到網(wǎng)卡.

代碼如下:


root@192.168.30.68:initrd# lsmod | grep bnx2  #本機(jī)網(wǎng)絡(luò)驅(qū)動(dòng)
bnx2                  183048  0
root@192.168.30.68:initrd# find . -name 'bnx2*' #initrd里bnx2對(duì)應(yīng)的模塊
./lib/modules/2.6.18-6-amd64/kernel/drivers/net/bnx2.ko
./lib/firmware/bnx2-09-4.0.5.fw
./lib/firmware/bnx2-06-4.0.5.fw


假如臨時(shí)又添加了一塊最新的網(wǎng)卡,希望在開(kāi)機(jī)時(shí)加載,這時(shí)只要修改initrd文件的內(nèi)容在打個(gè)包就可以了,比起重新編譯kernel或者安裝操作系統(tǒng)要方便多了.


下面介紹如何讓將修改后的initrd文件再重新打包起來(lái).

1.在修改后的文件目錄下,使用find將所有的文件列出來(lái),再通過(guò)pipeline,把所有清單交給cpio指令.cpio用到的參數(shù)'c'代表用新的SVR4可移植格式.'o'代表建立文件.最后用gzip以最佳的壓縮效率'-9'壓縮(默認(rèn)是-6),使用'>'導(dǎo)出.

代碼如下:


root@192.168.30.68:initrd# ls
bin  conf  etc  init  lib  lib64  sbin  scripts
root@192.168.30.68:initrd# find | cpio -co | gzip -9 > initrd.img-2.6.18-6-amd64
32884 blocks
root@192.168.30.68:initrd# ls
bin  conf  etc  init  initrd.img-2.6.18-6-amd64  lib  lib64  sbin  scripts
root@192.168.30.68:initrd# file initrd.img-2.6.18-6-amd64
initrd.img-2.6.18-6-amd64: gzip compressed data, from Unix, last modified: Tue May 14 13:50:26 2013, max compression


2.將該文件copy到/boot/下.重啟機(jī)器生效.

此外在initrd被kernel加載后的開(kāi)機(jī)流程,是依照initrd文件中的一個(gè)init文件,由它所提供的腳本一步一步往下做,包括實(shí)體硬盤(pán)加載實(shí)際的操作系統(tǒng)也是由這個(gè)文件提供的.

代碼如下:


root@192.168.30.68:initrd# ls
bin  conf  etc  init  lib  lib64  sbin  scripts
root@192.168.30.68:initrd# cat init
#!/bin/sh

代碼如下:


echo "Loading, please wait..."

代碼如下:


[ -d /dev ] || mkdir -m 0755 /dev
[ -d /root ] || mkdir -m 0700 /root
[ -d /sys ] || mkdir /sys
[ -d /proc ] || mkdir /proc
[ -d /tmp ] || mkdir /tmp
mkdir -p /var/lock
mount -t sysfs -o nodev,noexec,nosuid none /sys
mount -t proc -o nodev,noexec,nosuid none /proc

代碼如下:


# Note that this only becomes /dev on the real filesystem if udev's scripts
# are used; which they will be, but it's worth pointing out
tmpfs_size="10M"
if [ -e /etc/udev/udev.conf ]; then
   . /etc/udev/udev.conf
fi
mount -t tmpfs -o size=$tmpfs_size,mode=0755 udev /dev
[ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
[ -e /dev/null ] || mknod /dev/null c 1 3
> /dev/.initramfs-tools
mkdir /dev/.initramfs

代碼如下:


# Export the dpkg architecture
export DPKG_ARCH=
. /conf/arch.conf

代碼如下:


# Set modprobe env
export MODPROBE_OPTIONS="-qb"

代碼如下:


# Export relevant variables
export ROOT=
export ROOTDELAY=
export ROOTFLAGS=
export ROOTFSTYPE=
export break=
export init=/sbin/init
export quiet=n
export readonly=y
.....

關(guān)于Linux系統(tǒng)中怎么開(kāi)啟Initrd文件系統(tǒng)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI