系統管理和內核管理(二)之grub使用、編譯安裝內核

系統管理和內核管理(二)之grub使用、編譯安裝內核

 

回顧CentOS 6啟動流程:

POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端

一、grub legacy:

1、配置文件:/boot/grub/grub.conf<–/etc/grub.conf

2、啟動階段:stage1 mbr

 stage1_5:mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統

 stage2:磁盤分區(/boot/grub/)

注:stage2及內核等通常放置于一個基本磁盤分區

3、grub菜單欄:

blob.png

1)提供啟動菜單、并提供交互式接口

a:內核參數

e:編輯模式,用于編輯菜單

c:命令模式,交互式接口

blob.png

blob.png

blob.png

2)加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏啟動菜單

3)為菜單提供了保護機制

為編輯啟動菜單進行認證

為啟用內核或操作系統進行認證

4、grub的命令行接口:

help: 獲取幫助列表

help KEYWORD: 詳細幫助信息

find (hd#,#)/PATH/TO/SOMEFILE

root (hd#,#)

kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的內核文件;額外還可添加許多內核支持使用的cmdline參數

例如:max_loop=100 selinux=0init=/path/to/init

initrd/PATH/TO/INITRAMFS_FILE: 設定為選定的內核提供額外文件的ramdisk

boot: 引導啟動選定的內核

 cat /proc/cmdline 內核參數

 內核參數文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

5、識別硬盤設備:

(hd#,#)

hd#: 磁盤編號,用數字表示;從0開始編號

#: 分區編號,用數字表示; 0開始編號

(hd0,0) 第一塊硬盤,第一個分區

6、手動在grub命令行接口啟動系統:

blob.png

7grub legacy配置文件:

blob.png

   default=#:設定默認啟動的菜單項;落單項(title)編號從0開始

   timeout=#:指定菜單項等待選項選擇的時長

   splashimage=(hd#,#) /PATH/TO/XPM_FILE:菜單背景圖片文件路徑

   hiddenmenu:隱藏菜單

   password [–md5] STRING: 啟動菜單編輯認證

   title TITLE:定義菜單項“標題”, 可出現多次

   root (hd#,#)grub查找stage2kernel文件所在設備分區;為grub“根”

   kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核

   initrd/PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件

   password [–md5] STRING:啟動選定的內核或操作系統時進行認證

blob.png

8grub的加密:

1grub-md5-crypt命令

2openssl passwd -1 命令

3openssl passwd -salt “XXXX” -1命令(指定掩碼)

blob.png

注:破解root口令,在啟動系統時,到達grub界面,選擇”a”進入,設置其運行級別1即可

9、進入單用戶模式:

1)編輯grub菜單(選定要編輯的title,而后使用e命令);

2)在選定的kernel后附加1, s, Ssingle都可以;

3)在kernel所在行,鍵入“b”命令

10、安裝grub

1grub-install(救援模式下或者遠程登錄終端上[前提是破壞掉grub后沒將系統重啟]

   blob.png

安裝grub stage1stage1_5/dev/DISK磁盤上,并復制GRUB相關文件到DIR/boot目錄下

命令:grub-install –root-directory=DIR /dev/DISK (用于救援模式下,需要指定系統所在的“根”)

注:此修復,在完成修復后需要手動編輯下配置文件grub.conf放到/boot/grub目錄下。

blob.png

blob.png

2grub

grub> root (hd#,#)

grub> setup (hd#)

如下圖,使用dd命令破壞mbr里面的bootloader一部分(此修復步驟需要依賴到/boot/grub目錄下的文件stage1

 blob.png

二、自制Linux系統:

1)創建一級目錄

     步驟一:切記,新建個掛載目錄必須是boot命名,否則到了執行安裝grub時出錯。

     #mkdir /mnt/boot

     #mount /dev/sdb1 /mnt/boot

     #grub-install –directory=/mnt /dev/sdb  安裝grub (安裝完成后要記得在/mnt/boot/grub目錄下編輯grub.conf配置文件)

 

     步驟二:此處也建議新建的掛載目錄以sda2命名,此處為自制Linux的“根”

#mkdir /mnt/sda2

#mount /dev/sdb2 /mnt/sda2

#mkdir-pv /mnt/sda2/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

2)復制bash和相關庫文件

3)復制相關命令及相關庫文件:如:ls,cat,vim,reboot,hostname

注:復制bash和相關的lib庫文件可參照下圖的腳本。

blob.png

三:系統配置文件丟失修復:

系統在引導期間,很重要的一個過程就是init進程讀取其配置文件/etc/inittab,啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果/etc/inittab誤刪除或修改錯誤,Linux將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。

1)有備份文件的恢復方法:

進入救援模式,執行chroot命令后,如果有此文件的備份(強烈建議系統中的重要數據目錄,如/etc、/boot等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是配置文件修改錯誤,如比較典型的/boot/grub/grub.conf/etc/passwd的文件修改錯誤,也可以直接修正恢復。假設有備份文件/etc/inittab.bak,則在救援模式下執行:

sh-4.1# chroot /mnt/sysimage

sh-4.1# cp /etc/inittab.bak /etc/inittab

2)沒有備份文件的恢復辦法

如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/etc/inittab屬于哪一個RPM

# chroot /mnt/sysimage

# rpm -qf `which mount`

util-linux-ng-2.17.2-12.24.el6.x86_64

blob.png

退出chroot模式:# exit

掛載存放RPM包的安裝光盤(在救援模式下,光盤通常掛載在/mnt/source目錄下):# mount /dev/sr0 /mnt/source

CentOS6系統的RPM包存放在光盤Package目錄下,要修復的硬盤系統的根目錄在/mnt/sysimage下,需要使用–root選項指定其位置(–root=/mnt/sysimage

然后覆蓋安裝/etc/inittab文件所在的RPM包:# rpm -ivh /mnt/source/Packages/mount-*.rpm –force|–replacepkgs

其中的rpm命令選項“–replacepkgs”表示覆蓋安裝,執行完成后,即已經恢復了此文件)

如果想只提取RPM包中的某個文件進行恢復,可以在進入救援模式后,執行命令:

# rpm2cpio /mnt/source/Packages/ util-linux-ng-2.17.2-12.24.el6.x86_64.rpm| cpio -idv ./usr/bin/mount

# cp ./usr/bin/mount /mnt/sysimage//usr/bin/

注意:此命令執行時不能將文件直接恢復至/usr目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整的路徑。提取文件成功后,將其復制到根分區所在的/mnt/sysimage目錄下相應位置即可

 

四、內核編譯:

1、前提:

1)準備好開發環境,安裝Development toolsServer Platform Development包組、ncurses

2)獲取目標主機上硬件設備的相關信息

3)獲取目標主機系統功能的相關信息;例如:需要啟用相應的文件系統

4)獲取內核源代碼包

www.kernel.org

2、內核組成部分:

Kernel:內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;

kernel object(模塊):內核對象,一般放置于:/lib/modules/VERSION-RELEASE/

[ ]: N  選擇為空,意思是不編譯到內核中

[M]: M  選擇為M,意思是編譯到模塊中去

[*]: Y   選擇為*,意思是編譯到內核中去

blob.png

注:編譯參照當前系統的參數設置,執行命令#cp /boot/config-2.6.32-642.el6.x86_64 .config(變為隱藏文件,放到解壓后內核文件的目錄下,通過該配置文件來生成菜單讓我們選擇;建議對解壓的內核文件目錄做軟鏈接,命令#ln -s linux-#-# linux;解壓內核文件,建議解壓到/usr/src目錄下)

3、輔助文件:ramdisk

initrd

initramfs

ramdisk文件的制作:

1mkinitrd命令

為當前正在使用的內核重新制作ramdisk文件

#mkinitrd /boot/initramfs-`uname-r`.img `uname-r`

2dracut命令

為當前正在使用的內核重新制作ramdisk文件

#dracut /boot/initramfs-`uname-r`.img `uname-r`

4、編譯步驟:

1)安裝開發包組

 2)下載源碼文件

 3)執行編譯:

    .config:準備文本配置文件

    make menuconfig:配置內核選項

     make [-j #]  以多少線程執行編譯(取決于機器的CPU顆數)

     make modules_install:安裝模塊

     make install :安裝內核相關文件(安裝bzImage/boot/vmlinuz-VERSION-RELEASE;生成initramfs文件;編輯grub的配置文件)

在已經執行過編譯操作的內核源碼樹做重新編譯,需要事先清理操作:

# make clean:清理大多數編譯生成的文件,但會保留config文件等

# make mrproper: 清理所有編譯生成的文件、config及某些備份文件

# make distcleanmrproper、patches以及編輯器備份文件

5、配置內核選項:

1)支持“更新”模式進行配置:make help

(a) make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項

(b) make menuconfig:基于curses的文本窗口界面

(c) make gconfig:基于GTK (GNOME)環境窗口界面

(d) make xconfig:基于QT(KDE)環境的窗口界面

2)支持“全新配置”模式進行配置

(a) make defconfig:基于內核為目標平臺提供的“默認”配置進行配置

(b) make allyesconfig: 所有選項均回答為“yes

(c) make allnoconfig: 所有選項均回答為"no

blob.png

6、編譯類別:

   1)全編譯:make [-j #]

   (2)編譯內核的一部分功能:

  (a) 只編譯某子目錄中的相關代碼:# cd /usr/src/linux # make dir/

  (b) 只編譯一個特定的模塊:# cd /usr/src/linux  ;# make dir/file.ko

   3)交叉編譯內核:編譯的目標平臺與當前平臺不相同;

# make ARCH=arch_name

      要獲取特定目標平臺的使用幫助:# make ARCH=arch_namehelp ;# make ARCH=arm help

五、內核模塊管理:

1、lsmod命令:顯示由核心已經裝載的內核模塊;顯示的內容來自于: /proc/modules文件

blob.png

2modinfo命令:顯示模塊的詳細描述信息

blob.png

#modinfo [ -k kernel ] [ modulename|filename… ]

-n: 只顯示模塊文件路徑

-p: 顯示模塊參數

-a: author

-d: description

-l: license

blob.png

3、modprobe命令:裝載或卸載內核模塊

   配置文件: /etc/modprobe.d/*.conf

注:如果有需要在系統啟動時加載模塊指定的參數,可在/etc/modprobe.d/目錄下新建一個后綴為.conf的文件,并按照參數的格式填寫即可。

blob.png

4、depmod命令:內核模塊依賴關系文件及系統信息映射文件的生成工具(注:該命令一般建議不要使用,會導致正常系統出現一定的故障

5、insmod命令:指定模塊文件,不自動解決依賴模塊

6、rmmod命令:卸載指定模塊

六、/proc目錄:

  內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出

參數:只讀:輸出信息

可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置

1、/proc/sys

1sysctl命令用于查看或設定此目錄中諸多參數

#sysctl -w path.to.parameter=VALUE

blob.png

#sysctl -w kernel.hostname=mail.magedu.com

blob.png

2echo命令通過重定向方式也可以修改大多數參數的值

#echo "VALUE" > /proc/sys/path/to/parameter

#echo “websrv” > /proc/sys/kernel/hostname

blob.png

2、sysctl命令:

默認配置文件:/etc/sysctl.conf  注:上面兩種命令修改參數,只能是臨時修改,一旦系統重啟就會丟失,如果需要永久生效則需要修改該配置文件

blob.png

1)設置某參數:sysctl -w parameter=VALUE

2)通過讀取配置文件設置參數:sysctl -p [/path/to/conf_file]

3)內核中的路由轉發:/proc/sys/net/ipv4/ip_forward

4)常用的幾個參數:net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all  禁止ping

vm.drop_caches 清除緩存

blob.png

七、/sys目錄:

sysfs:為用戶使用的偽文件系統,輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性。

udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件,udev是運行用戶空間程序

專用工具:udevadmin, hotplug

udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d/usr/lib/udev/rules.d目錄下

 

事例演示: 

1、破解root口令,并為grub設置保護功能

破解root密碼:

1)開機時,不斷按下“”鍵,進入下圖的界面:

blob.png

2)然后先按“e”鍵查看kernelinitrd等信息,再按“ESC”返回上一層界面,最后按“e”鍵進入下圖的界面,在紅色框位置輸入數字1或者sS、single等(注:輸入的值與前面的“quiet”必須要有空格隔開

blob.png

3)到此已經無需密碼(以root的身份)進入了系統,使用命令#passwd即可修改密碼(密碼破解)

blob.png

Grub設置保護:

1)編輯/boot/grub/grub.conf配置文件,設置md5加密,格式:password –md5 $1$9wlPy$BqtKwoZjEpvSSn0XJmAHy/,共添加兩處,在title前設置的md5加密是對全局的設置(即開機需要需要輸入密碼方可進入grub的功能菜單處選擇);而在initrd后一行添加的md5加密是對對應的kernel啟動做加密(需要輸入密碼方可讓對應的系統啟動)

blob.png

2)重啟看設置效果:

測試全局加密:如下圖,連續按兩次“Enter”鍵,才進入到grub界面:

blob.png

對比grub沒有加密前,可以發現下圖中紅色框處的功能選擇只剩下了“p”和“Enter

blob.png

再次按“Enter”鍵,到了輸入全局grub的密碼:

blob.png

3)測試對kernel加密的設置:(此處的加密對系統中有多個kernel的效果才明顯,單個kernel版本,只有輸入密碼即刻啟動系統)

blob.png

2、破壞本機grub stage1,而后在救援模式下修復之

blob.png

blob.png

3、刪除vmlinuzinitramfs文件后無法啟動,兩種方法恢復之

blob.png

blob.png

方法一:

blob.png

blob.png

注:initrd的恢復,可以通過命令#mkinitrd /boot/initramfs-`uname -r` `uname -r`生成

blob.png

blob.png

方法二:

blob.png

4、增加新硬盤,在其上制作能單獨運行kernelbash的系統

1)新添加硬盤做同步:

blob.png

2)分區:

blob.png

3)格式化分區:

blob.png

blob.png

4)創建空目錄掛載分區:

blob.png

 

5)安裝grub到新磁盤上:

blob.png

blob.png

6)對照創建“根”下的一級目錄:

blob.png

blob.png

7)拷貝bash以及相應的lib庫文件(使用腳本實現)

blob.png

腳本:

blob.png

8)拷貝kernel、initrd和編輯grub.conf配置文件:

blob.png

blob.png

9)做sync同步數據到磁盤上:

blob.png

10)將機器關機,新建一個虛擬機,指向使用現有的虛擬硬盤(該磁盤為上面新添加的磁盤文件):

blob.png

blob.png

11)啟動新建的虛擬機:此時可以看到自命令的title

blob.png

12)系統啟動完成后,由于grub.config配置文件指定系統其他的第一個進程是bash,如下圖,自定制的微小Linux完成:

blob.png

5、在U盤上定制linux,使其可啟動系統和swap分區

1)對新增的磁盤分區(兩個分區作為//boot,另外一個分區作為swap分區)

blob.png

2)分區結果如下:

blob.png

3)格式化分區:

blob.png

4)掛載分區,安裝grubkernelinitrd

blob.png

5)編輯grub.conf配置文件

blob.png

6)腳本拷貝相應需要的二進制文件個lib庫文件:ls、blkid、bash、pwd

blob.png

blob.png

7)新建虛擬機,使用原有的磁盤文件:

blob.png

blob.png

8)啟動虛擬機:

blob.png

9)查看效果:

blob.png

6、刪除/etc/fstab/boot目錄的所有文件,并恢復之

1)先破壞相應的文件:

blob.png

2)重啟后出現如下圖的界面,磁盤的分區掛載不了:

blob.png

blob.png

blob.png

3)修復掛載文件:(注:編輯好了fstab配置文件,切勿使用命令#mount -a來同步掛載,而是將機器重啟,實現自動掛載

#mkdir /mnt/sda2 /dev/sda2掛載到/mnt/sda2上,進入/mnt/sda2/etc/,新建fstab配置文件,如下圖:

blob.png

注:也可以使用UUID來編輯對應的分區進行掛載

4)修復掛載后效果:

blob.png

blob.png

5)修復grubkernelinitrd

blob.png

6)新編輯grub.conf配置文件:

blob.png

7)全部修復完成:

blob.png

7、編譯安裝kernel,啟用支持ntfs文件系統功能

準備工作:安裝包組“Development tools”、“ncurses*

1)先準備好kernel源碼包,并且解壓到/usr/src目錄下:

blob.png

2)對解壓到當前目錄下的內核文件創建個軟鏈接,方便當要編譯多個內核時出現混亂:

blob.png

3)拷貝當前系統編譯產生已有的配置文件(里面全部是系統編譯到的功能)到新kernel源碼目錄下,作為菜單參照選擇新增或刪除功能:(注:該配置文件需修改為隱藏文件

blob.png

4#make menuconfig,啟動功能選擇菜單,如下圖:

blob.png

5)選擇“General setup”進入,可以設置“local version”,選定后“Enter

blob.png

6)設置選擇“NTFS”文件系統功能

blob.png

blob.png

blob.png

保存退出:

blob.png

7#make -j 2 使用雙線程進行編譯(漫長的等待),此處的2取決于機器上的CPU核數

8#make modules_install 安裝模塊

9make install 正式安裝編譯好的內核(完成后啟動機器)

blob.png

10)編譯成功內核:

blob.png

 

原創文章,作者:Aaron_wang,如若轉載,請注明出處:http://www.www58058.com/46517

(0)
Aaron_wangAaron_wang
上一篇 2016-09-15 22:22
下一篇 2016-09-15 22:23

相關推薦

  • 馬哥教育網絡班第21期+第二周課程作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令 選項 解釋 cp -r 遞歸復制 copy -f 強行復制,若已存在則覆蓋 -i 交互式 -p 保留屬主屬組權限時間戳 -L(不加也可以,默認) (源文件為鏈接)復制指向連接的文件 -P (源文件為鏈接) 以鏈接的方式復制過來 -a 歸檔復制,常用備份 命令 選項 …

    Linux干貨 2016-07-17
  • Linux中軟鏈接和硬鏈接的區別

    Linux中軟鏈接和硬鏈接的區別 鏈接文件:   Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。 Inode 文件除了純數據本身之外,還必須包含有對這些純數據的管理信息 文件名; 訪問權限; 文件的屬主以; 該文件的數據所對應的磁盤數據塊; 文件的時間戳; …

    Linux干貨 2016-10-20
  • 馬哥教育網絡班21期+第一周課程練習

    1、描述計算機的組成及其功能。   計算機由五個部分組成:運算器、控制器、存儲器、輸入設備、輸出設備。   控制器和運算器合稱為中央處理單元,即CPU。   功能:     運算器:也稱為算術邏輯單元,是計算機的核心,在控制器的控制下,對取自內存或內部寄存器的數據進行算術運算和邏輯運算。   &nb…

    Linux干貨 2016-07-07
  • iptables

    iptables簡介 netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數的Linux軟件一樣,這個包過濾防火墻是免費的,它可以代替昂貴的商業防火墻解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。 iptables基礎 規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“…

    2017-05-02
  • 實驗:系統啟動和內核管理

    實驗:bootloader 破壞stage1: 備份:dd if=/dev/sda of=/app/mbr bs=1 count=512 破壞:dd if=/dev/zero of=/dev/sda bs=1 count=446;此時/boot/grub/下的文件沒有任何改動; 表現:stage1破壞后系統會直接進行光盤引導 修復1:救援模式–&…

    Linux干貨 2017-05-14
  • 文本處理工具應用示例

    文本處理工具應用示例 1.列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 who|awk ‘{print $1}’|sort|uniq -d 2.取出最后登錄到當前系統的用戶的相關信息 who|tail -1|cut -d’ ‘ -f1|id 3.取出當前系統上被用戶當作默認shell的最多的那個shell cat /e…

    Linux干貨 2017-07-16
欧美性久久久久