/boot目錄下重要文件簡介
一、/boot/initrd
initrd(initial ramdisk)是一個在Linux啓動過程中內核使用的臨時文件系統。該文件系統爲掛載真正的文件系統做準備。要想看看裏面都是什麼東西,可以進行下面的操作:
# mkdir ~/initrd
# cp /boot/initrd ~/initrd
# cd ~/initrd
# mv initrd initrd.gz
# gunzip initrd.gz
# cpio -idmv < initrd
可以看出該文件系統首先用cpio壓縮歸檔,再用gzip壓縮。
# mkdir ~/initrd
# cp /boot/initrd ~/initrd
# cd ~/initrd
# mv initrd initrd.gz
# gunzip initrd.gz
# cpio -idmv < initrd
可以看出該文件系統首先用cpio壓縮歸檔,再用gzip壓縮。
Linux內核可以將設備驅動以模塊形式加載,但是模塊本身可能存儲在SCSI或者RADI上,要想訪問這些設備又需要先加載驅動,這就出現了“雞和蛋”問題。當然不用模塊,全部編譯進內核,就像早期Linux那樣,就不會出現這個問題了。initrd的引入可以使我們既得到模塊帶來的好處又解決上述問題。initrd在grub引導時通過BIOS載入內存。initrd除了內核模塊外,還有引導系統的bash腳本。
/sbin/installkernel中有這麼幾行,在編譯完內核後重新制作initrd。其實編譯完內核後不更新initrd也是可以的。要想知道怎麼製作的initrd,可以看看bash腳本/sbin/mkinitrd。如果沒有這兩個命令,確認是否安裝了mkinitrd軟件包。#
# Generate initial ramdisk
#
if [ -x /sbin/mkinitrd -a -d /lib/modules/$KERNEL_VERSION ]; then
/sbin/mkinitrd -k $BOOTFILE-$KERNEL_VERSION \
-i initrd-$KERNEL_VERSION \
-b $INSTALL_PATH
else
echo "You may need to create an initial ramdisk now."
fi
# Generate initial ramdisk
#
if [ -x /sbin/mkinitrd -a -d /lib/modules/$KERNEL_VERSION ]; then
/sbin/mkinitrd -k $BOOTFILE-$KERNEL_VERSION \
-i initrd-$KERNEL_VERSION \
-b $INSTALL_PATH
else
echo "You may need to create an initial ramdisk now."
fi
二、/boot/vmlinuz
靜態鏈接的內核可執行文件,如果用源代碼編譯內核,對應文件是/usr/src/linux/arch/i386/boot/bzImage
三、/boot/System.map
該文件由命令nm /boot/vmlinuz得到,不過是經過處理的。重新編譯新內核後,該文件需要更新,如果有多個內核的話,加上相應的版本號。如果/boot/System.map和系統不符,內核會使用/usr/src/linux/System.map。該文件是內核地址和變量名,函數名的對應。該文件在調試內核時很有幫助。
四、/boot/grub/menu.lst
default 0
timeout 5
title=Gentoo
root (hd0,2)
kernel /boot/kernel root=/dev/hda5 vga=791
initrd /boot/initrd
title=Windowstimeout 5
title=Gentoo
root (hd0,2)
kernel /boot/kernel root=/dev/hda5 vga=791
initrd /boot/initrd
rootnoverify (hd0,0)
makeactive
chainloader +1
root (hd0,2)和root=/dev/hda5中的root是不一樣的。但是如果沒有給/boot單獨劃一個分區,那麼他們是一樣的。當然我們也可以不要root (hd0,2)這一行,不過就需要改成這個樣子了。
kernel (hd0,2)/boot/kernel root=/dev/hda5 vga=791
initrd (hd0,2)/boot/initrd
initrd (hd0,2)/boot/initrd
五、/boot/grub/device.map
(hd0) /dev/hda
grub使用的設備名稱和Linux的不太一樣,這是一張映射表。
(hd0,2)對應/dev/hda3;(hd0,4)對應/dev/hda5
grub使用的設備名稱和Linux的不太一樣,這是一張映射表。
(hd0,2)對應/dev/hda3;(hd0,4)對應/dev/hda5