Linux kernel啟動選項(參數)(轉)


Linux kernel啟動選項(參數)

在Linux中,給kernel傳遞參數以控制其行為總共有三種方法:

1.build kernel之時的各個configuration選項。

2.當kernel啟動之時,可以參數在kernel被GRUB或LILO等啟動程序調用之時傳遞給kernel。

3.在kernel運行時,修改/proc或/sys目錄下的文件。

這里我簡單講的就是第二種方式了,kernel在grub中配置的啟動參數。

首先,kernel有哪些參數呢? 在linux的源代碼中,有這樣的一個文檔:

https://www.kernel.org/doc/Documentation/kernel-parameters.txt 

它介紹了kernel的各個參數及其意義。

其次,kernel啟動參數以空格分隔,而且是嚴格區分大小寫的(如:mem和MEM是不一樣的)。

再次,對於module特有的kernel參數寫法是這樣的[module name].[parameter=XX],例如:igb.max_vfs=7這個kernel啟動參數的效果就是相當於這樣來動態加載:

module: modprobe igb max_vfs=7

另外,kernel是怎樣處理這些啟動參數的呢? 啟動參數通常是這樣的形式: name[=value_1][,value_2]...[,value_10]

"name"是關鍵字,內核用它來識別應該把"關鍵字"后面的值傳遞給誰,也就是如何處理這個值,是傳遞給處理進程還是作為環境變量或者拋給"init"。值的個數限制為10,你可以通過再次使用該關鍵字使用超過10個的參數。 首先,kernel檢查關鍵字是不是 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug'或'init',然后內核在bootsetups數組里搜索於該關鍵字相關聯的已注冊的處理函數,如果找到相關的已注冊的處理函數,則調用這些函數並把關鍵字后面的值作為參數傳遞給這些函數。比如,你在啟動時設置參數name=a,b,c,d,內核搜索bootsetups數組,如果發現"name"已注冊,則調用"name"的設置函數如name_setup(),並把a,b,c,d傳遞給name_setup()執行。 所有型如"name=value"參數,如果沒有被上面所述的設置函數接收,將被解釋為系統啟動后的環境變量,比如"TERM=vt100"啟動參數就會被作為一個啟動后的環境變量。所有沒有被內核設置函數接收也沒又被設置成環境變量的參數都將留給init進程處理,比如"single"。

下面簡單總結一下我在工作中常用到的一些kernel啟動參數。

根磁盤相關啟動參數:

root #指出啟動的根文件系統 如:root=/dev/sda1

ro #指定根設備在啟動過程中為read-only,默認情況下一般都是這樣配的

rw #和ro類似,它是規定為read-write,可寫

rootfstype #根文件系統類型,如:rootfstype=ext4

Console和kernel log相關啟動參數:

console #console的設備和選項,如:console=tty0 console=ttyS0

debug #enable kernel debugging 啟動中的所有debug信息都會打印到console上

quiet #disable all log messages 將kernel log level設置為KERN_WARNING,在啟動中只非常嚴重的信息

loglevel #設置默認的console日志級別,如:loglevel=7 (0~7的數字分別為:KERN_EMERG,..,KERN_DEBUG)

time #設置在每條kernel log信息前加一個時間戳

內存相關的啟動參數:

mem #指定kernel使用的內存量,mem=n[KMG]

hugepages #設置大頁表頁(4MB大小)的最多個數,hugepages=n

CPU相關的啟動參數:

mce # Enable the machine check exception feature.

nosmp  #Run as a single-processor machine.  不使用SMP(多處理器)

max_cpus  #max_cpus=n, SMP系統最多能使用的CPU個數(即使系統中有大於n個的CPU)

Ramdisk相關的啟動參數:

initrd #指定初始化ramdisk的位置,initrd=filename

noinitrd #不使用initrd的配置,即使配置了initrd參數

初始化相關啟動參數:

init #在啟動時去執行的程序,init=filename,默認值為/sbin/init

PCI相關的啟動參數:

pci #pci相關的選項,我常使用pci=assign_buses,也使用過pci=nomsi

SELinux相關啟動參數:

enforcing #SELinux enforcing狀態的開關,enforcing=0表示僅僅是記錄危險而不是阻止訪問,enforcing=1完全enable,默認值是0

selinux #在啟動時關閉或開啟SELinux,selinux=0表示關閉,selinux=1表示開啟selinux

另外,還是用max_loop來指定最多可使用的回路設備。

在Redhat的系統中,還有個經常看到的kernel啟動參數——rhgb,rhgb表示redhat graphics boot,就是會看到圖片來代替啟動過程中顯示的文本信息,這些信息在啟動后用dmesg也可以看到 
rhgb = redhat graphical boot - This is a GUI mode booting screen with most of the information hidden while the user sees a rotating activity icon spining and brief information as to what the computer is doing.

quiet = hides the majority of boot messages before rhgb starts. These are supposed to make the common user more comfortable. They get alarmed about seeing the kernel and initializing messages, so they hide them for their comfort.

參考資料:

linux kernel documents

《Linux kernel in a nutshell》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM