五、自制linux系統
分區并創建文件系統
fdisk /dev/sdb
分兩個必要的分區
/dev/sdb1對應/boot /dev/sdb2對應根 /
mkfs.ext4 /dev/sdb1
掛載boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
安裝grub
grub-install –root-directory=/mnt /dev/sdb
恢復內核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img/mnt/boot
建立grub.conf:
vim /mnt/boot/grub.conf
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img
chroot /mnt/sysroot
創建一級目錄
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
復制bash和相關庫文件
復制相關命令及相關庫文件
如: ls,cat, vim,reboot,hostname等
六、排錯
救援環境
在根文件系統無法使用時需要,如/bin/mount刪除
對系統沒有特殊要求
從光盤引導( boot.iso或者安裝光盤#1)
從USB盤(由boot.iso制作)引導
文件系統重組
Anaconda將會詢問是否應該掛載文件系統
/mnt/sysimage/*
/mnt/stage2
$PATH包括硬盤的目錄
文件系統節點
提供系統特定的設備文件
mknod了解major/minor #’s
系統配置文件丟失修復
系統在引導期間,很重要的一個過程就是init進程讀取其配置文件/etc/inittab,啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果/etc/inittab誤刪除或修改錯誤, Linux將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。
有備份文件的回復方法
沒有備份文件的恢復辦法
有備份文件的恢復辦法:
進入救援模式,執行chroot命令后,如果有此文件的備份(強烈建議系統中的重要數據目錄,如/etc、 /boot等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是配置文件修改錯誤,如比較典型的/boot/grub/grub.conf及/etc/passwd的文件修改錯誤,也可以直接修正恢復。假設有備份文件/etc/inittab.bak,則在救援模式下執行:
sh-3.1# chroot /mnt/sysimage
sh-3.1# cp /etc/inittab.bak /etc/inittab
沒有備份文件的恢復辦法
如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/etc/inittab屬于哪一個RPM包
# chroot /mnt/sysimage
# rpm -qf /etc/inittab initscripts-9.03.49-1.el6.centos.x86_64
退出chroot模式:
# exit
掛載存放RPM包的安裝光盤(在救援模式下,光盤通常掛載在/mnt/source目錄下):
# mount /dev/sr0 /mnt/source
CentOS6系統的RPM包存放在光盤Package目錄下,要修復的硬盤系統的根目錄在/mnt/sysimage下,需要使用–root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:
# rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm
其中的rpm命令選項“ –replacepkgs”表示覆蓋安裝,執行完成后,即已經恢復了此文件
如果想只提取RPM包中的/etc/inittab文件進行恢復,可以在進入救援模式后,執行命令:
# rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab
# cp etc/inittab /mnt/sysimage/etc
注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整的路徑。提取文件成功后,將其復制到根分區所在的/mnt/sysimage目錄下相應位置即可
七、內核編譯
單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。
內核組成部分:
kernel: 內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;
kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
輔助文件:
ramdisk
initrd
initramfs
內核版本
運行中的內核:
uname命令:
uname – print system information
uname [OPTION]…
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
-a:顯示所有信息
內核模塊命令
lsmod命令:
顯示由核心已經裝載的內核模塊
顯示的內容來自于: /proc/modules文件
modinfo命令:
顯示模塊的詳細描述信息
modinfo [ -k kernel ] [ modulename|filename… ]
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數
-a: author
-d: description
-l: license
lsmod |grep xfs;modinfo xfs
內核模塊管理
modprobe命令:裝載或卸載內核模塊
modprobe [ -C config-file ] [ modulename ] [ moduleparame-ters… ]
配置文件: /etc/modprobe.conf,/etc/modprobe.d/*.conf
modprobe [ -r ] modulename…
depmod命令:內核模塊依賴關系文件及系統信息映射文件的生成工具
裝載或卸載內核模塊:
insmod命令:指定模塊文件,不自動解決依賴模塊
insmod [ filename ] [ module options… ]
insmod `modinfo –n exportfs`
lnsmod `modinfo –n xfs`
rmmod
rmmod [ modulename ]
rmmod xfs
rmmod exportfs
/proc目錄:
內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出
參數:
只讀:輸出信息
可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置
/proc/sys
(1) sysctl命令用于查看或設定此目錄中諸多參數
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通過重定向方式也可以修改大多數參數的值
echo "VALUE" > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
sysctl命令
默認配置文件: /etc/sysctl.conf
(1) 設置某參數
sysctl -w parameter=VALUE
(2) 通過讀取配置文件設置參數
sysctl -p [/path/to/conf_file]
內核中的路由轉發:
/proc/sys/net/ipv4/ip_forward
常用的幾個參數:
net.ipv4.ip_forward
net.ipv4.icmp_echo_ignore_all
vm.drop_caches
/sys目錄:
sysfs:為用戶使用的偽文件系統,輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性。
udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件,udev是運行用戶空間程序
專用工具: udevadmin, hotplug
udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下
ramdisk管理
ramdisk文件的制作:
(1) mkinitrd命令
為當前正在使用的內核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
編譯內核
前提:
(1) 準備好開發環境
(2) 獲取目標主機上硬件設備的相關信息
(3) 獲取目標主機系統功能的相關信息
例如:需要啟用相應的文件系統
(4) 獲取內核源代碼包
www.kernel.org
開發環境準備
包組(CentOS 6):
Server Platform Development
Development Tools
目標主機硬件設備相關信息:
CPU:
#cat /proc/cpuinfo
#x86info -a
#lscpu
硬件設備
PCI設備:
lspci
-v
-vv
lsusb
-v
-vv
lsblk 塊設備
了解全部硬件設備信息
hal-device
內核編譯安裝系統
安裝開發包組
下載源碼文件
.config:準備文本配置文件
make menuconfig:配置內核選項
make [-j #]
make modules_install:安裝模塊
make install :安裝內核相關文件
安裝bzImage為/boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
編輯grub的配置文件
編譯安裝內核實例
tar xf linux-3.10.67.tar.xz -C /usr/src
cd /usr/src
ln -sv linux-3.10.67 linux
cd /usr/src/linux
cp /boot/config-$(uname -r) ./.config
make help
make menuconfig
make -j 2
make modules_install
make install
reboot
編譯內核
(1) 配置內核選項
支持“更新”模式進行配置: make help
(a) make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)環境窗口界面
(d) make xconfig:基于QT(KDE)環境的窗口界面
支持“全新配置”模式進行配置
(a) make defconfig:基于內核為目標平臺提供的“默認”配置進行配置
(b) make allyesconfig: 所有選項均回答為“yes“
(c) make allnoconfig: 所有選項均回答為"no“
(2) 編譯
全編譯:make [-j #]
編譯內核的一部分功能:
(a) 只編譯某子目錄中的相關代碼:
# cd /usr/src/linux
# make dir/
(b) 只編譯一個特定的模塊:
# cd /usr/src/linux
# make dir/file.ko
例如:只為e1000編譯驅動:
#make drivers/net/ethernet/intel/e1000/e1000.ko
如何交叉編譯內核:
編譯的目標平臺與當前平臺不相同;
# make ARCH=arch_name
要獲取特定目標平臺的使用幫助
# make ARCH=arch_name help
# make ARCH=arm help
在已經執行過編譯操作的內核源碼樹做重新編譯:
需要事先清理操作:
# make clean:清理大多數編譯生成的文件,但會保留config文件等
# make mrproper: 清理所有編譯生成的文件、 config及某些備份文件
# make distclean: mrproper、 patches以及編輯器備份文件
原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/47562
可以參考別人筆記,但是我們一定要將別人的筆記轉換成自己的東西