Linux系統(tǒng)啟動流程
PC:OS(Linux)POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)啟動的服務(wù)不同:
運(yùn)行級別:0-6
0:關(guān)機(jī)(halt)1:單用戶模式(single user mode)啟動以后不需要root密碼,直接以管理員登錄根(s ,S ,single ,1都表示1級別)2:多用戶模式(multi user mode),不啟用NFS3:正常多用戶模式(multi user mode text mode)文本模式4:保留級別5:圖形終端模式(multi user mode ,graphic mode)6:重啟(reboot)
詳解啟動過程
bootloader(MBR)
LILO:Linux Loader 不支持8G以上的分區(qū)引導(dǎo)
GRUB:GRand Unified Bootloader
Stage1:MBR
Stage1_5:識別常見的不同的文件系統(tǒng)
Stage2:/boot/grub
grub.conf文件:
default=0 #設(shè)定默認(rèn)啟動的title的編號,從0開始
timeout=5 #等待用戶選擇的超時時長,單位是秒
splashimage=(hd0,0)/grub/splash.xpm.gz #grub的背景圖片
hiddenmenu #隱藏菜單password --md5 $1$nTXq0/$87SaMxaKgOo.QWCGjA4FP. #此選項(xiàng)設(shè)置以后,啟動編輯grub.conf需要輸入此密碼
title CentOS (2.6.32-642.3.1.el6.i686) #內(nèi)核標(biāo)題,或操作系統(tǒng)名稱,字符串,可以自由修改
root (hd0,0) #內(nèi)核文件所在的設(shè)備:對grub而言,所有類型硬盤一律hd:(hd#,N),#表示第幾個磁盤;最后的N表示對應(yīng)的磁盤分區(qū)
kernel /vmlinuz-2.6.32-642.3.1.el6.i686 ro root=UUID=7a707d58-36d1-4f7e-8f59-d306f79b96dc rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet(屏蔽內(nèi)核初始化大部分信息) SYSF rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM #內(nèi)核文件路徑,及傳遞給內(nèi)核的參數(shù)
initrd /initramfs-2.6.32-642.3.1.el6.i686.img #ramdisk文件路徑password --md5 $1$nTXq0/$87SaMxaKgOo.QWCGjA4FP. #此選項(xiàng)設(shè)置以后,啟動內(nèi)核需要輸入密碼
安裝grub stage1
#grub
grub>root (hd0,0)
grub>setup (hd0)
安裝grub第二種方式
#grub-install --root-directory=/path/to/boot's_parent_dir /PATH/TO/DEVICE
系統(tǒng)啟動缺少grub.conf文件:
grub>find (查找內(nèi)核文件)
grub>root (hd#,N) (root (hd0,然后按tab鍵,會有顯示,把type 0x83的分區(qū)位置都得試一下)
grub>kernel /path/to/kernel_file ( kernel /vmlinuz-2.6.32-573.el6.x86_64 [如果出現(xiàn) 報錯,就重啟加上根分區(qū)磁盤 ro root=/dev/sda2])
grub>initrd /path/to/initrd_file (initrd /initramfs-2.6.32-573.el6.x86_64.img)
grub>boot
Kernel初始的過程:
1、設(shè)備探測
2、驅(qū)動初始化(可能會從initrd (initramfs))
3、以只讀掛載根文件系統(tǒng)
4、裝載第一個進(jìn)程init (PID:1)
/sbin/init:(/etc/inittab)
upstart:Ubuntu 、redhat6.0+
/etc/inittab
/etc/init/*.conf
systemd:
id:runlevels:action:process
id:3:initdefault:
id:標(biāo)識符
runlevels:在哪個級別運(yùn)行此行
process:要運(yùn)行的程序
ACTION:
initdefault:設(shè)定默認(rèn)運(yùn)行級別
sysinit:系統(tǒng)初始化
wait:等待級別切換完成
respawn:一旦程序終止,會重新啟動
/etc/rc.d/rc.sysinit完成的任務(wù):
1、激活udev和selinux
2、根據(jù)/etc/sysctl.conf文件,來設(shè)定內(nèi)核參數(shù)
3、設(shè)定時鐘時區(qū)
4、裝載鍵盤映射
5、啟用交換分區(qū)
6、設(shè)置主機(jī)名
7、根文件系統(tǒng)檢測,并以讀寫方式重新掛載
8、激活RAID和LVM設(shè)置
9、啟用磁盤配額
10、根據(jù)/etc/fstab ,檢查并掛載其他文件系統(tǒng)
11、清理過期的鎖和PID文件
for I in /etc/rc3.d/K*;do
$I stop
done
for I in /etc/rc3.d/S*;do
$I start
done
##:關(guān)閉或啟動的優(yōu)先次序,數(shù)據(jù)越小越優(yōu)先被選定
先關(guān)閉以K開頭的服務(wù),后啟動以S開頭的服務(wù)OS初始化
10:0:wait:/etc/rc.d/rc 0
rc0.d/
K*
stop
S*
start
/etc/rc.d/init.d , /etc/init.d
服務(wù)類腳本:
start
SysV:/etc/rc.d/init.d
start|stop|restart|status
reload(不重啟重新加載配置文件)|configtest(檢查配置文件的語法是否有錯誤)chkconfig
# chkconfig :runlevels SS KK
當(dāng)chkconfig命令來為此腳本在rc#.d目錄創(chuàng)建鏈接時,runlevels表示默認(rèn)創(chuàng)建為S*開頭的連接,-表示沒有級別默認(rèn)為S*開頭的連接;除此之外的級別默認(rèn)創(chuàng)建K*開頭的鏈接:
S后面的啟動優(yōu)先級為SS所表示的數(shù)字;K后面關(guān)閉的優(yōu)先次序?yàn)镵K所表示的數(shù)字
# description:用于說明此腳本的簡單功能;\,續(xù)行符
chkconfig命令:
chkconfig --list :查看所有獨(dú)立守護(hù)服務(wù)的啟動設(shè)定:獨(dú)立守護(hù)進(jìn)程
chkconfig --list SERVICE_NAME 單獨(dú)查看某個服務(wù)的啟動設(shè)定
chkconfig --add SERVICE_NAME 添加到服務(wù)列表
chkconfig --del SERVICE_NAME 刪除服務(wù)鏈接
chkconfig [--level RUNLEVELS] SERVICE_NAME {on|off}
如果省略級別指定,默認(rèn)為2345級別
/etc/rc.d/rc.local:系統(tǒng)最后啟動的一個服務(wù),準(zhǔn)確說:執(zhí)行的一個腳本
/etc/inittab的任務(wù)(redhat5):
1、設(shè)定默認(rèn)運(yùn)行級別
2、運(yùn)行系統(tǒng)初始化腳本( /etc/rc.d/rc.sysinit)
3、運(yùn)行指定運(yùn)行級別對應(yīng)目錄下的腳本
/etc/rc.d/init.d/
/etc/rc.d/rc#.d
4、設(shè)定Ctrl+Atl+Del組合鍵的操作
5、定義UPS電源在電源故障/恢復(fù)時執(zhí)行的操作
6、啟動虛擬終端(2345級別)
7、啟動圖形終端(5級別)
守護(hù)進(jìn)程的類型:
獨(dú)立守護(hù)進(jìn)程
xinetd:超級守護(hù)進(jìn)程,代理人
瞬時守護(hù)進(jìn)程:不需要關(guān)聯(lián)之運(yùn)行級別
核心:/boot/vmlinux-version
內(nèi)核模塊(ko):/lib/modules/version
內(nèi)核設(shè)計:
單內(nèi)核:模塊化設(shè)計
微內(nèi)核
裝載模塊
insmod
modprobe
www.kernel.org
用戶空間訪問、監(jiān)控內(nèi)核的方式:
/proc, /sys
偽文件系統(tǒng)
/proc/sys:此目錄中的文件很多是可讀寫的
/sys/: 某些文件可寫
設(shè)定內(nèi)核參數(shù)值的方法:
echo VALUE > /proc/sys/to/somefile
sysctl -w kernel.hostname=
能立即生效,但無法永久有效
永久有效,但不能立即生效/etc/sysctl.conf
修改文件完成之后,執(zhí)行如下命令可立即生效:
sysctl -p
sysctl -a:顯示所有的內(nèi)核參數(shù)及其值
內(nèi)核模塊管理:
lsmod:查看
modprobe MOD_NAME:裝載某模塊
modprobe -r MOD_NAME:卸載某模塊
modinfo MOD_NAME:查看模塊的具體信息
insmod /PATH/TO/MODULE_FILE 裝載模塊
rmmod MOD_NAME 卸載模塊
depmod /PATH/TO/MODLIES_DIR 保存依賴關(guān)系
內(nèi)核中的功能除了核心功能之外,在編譯時,大多功能都有三種選擇
1、不使用此功能
2、編譯成內(nèi)核模塊
3、編譯進(jìn)內(nèi)核
如何手動編譯內(nèi)核:
make gconfig:Gnome桌面環(huán)境使用,需要安裝圖形開發(fā)庫
make kconfig : KDE桌面環(huán)境使用,需要安裝圖形開發(fā)
make menuconfig(出錯,安裝yum install ncursesyum install ncurses-devel)
make
make modules_install
make install
如何實(shí)現(xiàn)部分編譯:
1、只編譯某子目錄下的相關(guān)代碼:
make dir/
make arch/
kake drivers/net/
2、只編譯部分模塊
make M=drivers/net/
3、只編譯某一模塊
make drivers/net/pcnet32.ko
4、將編譯完成的結(jié)果放置于別的目錄中
make O=/tmp/kernel
5、交叉編譯
make ARCH=
screen命令:
screen -ls :顯示已經(jīng)建立的屏幕
screen:直接打開一個新的屏幕
Ctrl+a ,d:拆除屏幕
screen -r ID :還原回某屏幕
二次編譯時清理,清理前,如果有需要,請備份配置文件.config
make clean
make mrproper
mkinitrd initrd文件路徑 內(nèi)核版本號
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
制作一個精簡系統(tǒng):
步驟:
1、mkdir 創(chuàng)建一個boot分區(qū) 一個根分區(qū),并格式化分區(qū)
2、dev/sda1 掛載到 /test/boot/ dev/sda2 掛載到/test/sysroot
3、創(chuàng)建內(nèi)核文件
cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /test/boot/vmlinuxz
4、創(chuàng)建initrd文件
①cd /tmp/test
②zcat /boot/initramfs-2.6.32-573.el6.x86_64.img | cpio -id 展開歸檔
③vim init 自定義修改
④find . | cpio -H newc --quiet -o | gzip -9 > /test/boot/initrd.gz 歸檔壓縮
5、安裝grub
①grub-install --root-directory=/test /dev/sda
②vim /test/boot/grub/grub.conf
default=0
timeout=5
title My Linux (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz
initrd /initramfs.gz
6、創(chuàng)建必要目錄
mkdir -pv etc/rc.d/init.d bin sbin proc sys dev lib root mnt media /var/{log,run,lock/subsys,tmp} usr/{bin,shbin,local} tmp home opt boot
7、創(chuàng)建etc/inittab
vim /test/myroot/etc/inittab
id:3:initdefault:
8、創(chuàng)建etc/rc.d/rc.sysinit
vim /test/myroot/etc/rc.d/rc.sysinit
#!/bin/bash
#
echo -e "Welcome to \033[32m TangCongJiang\033[0m Linux"
/bin/bash9、復(fù)制/sbin/init 和/bin/bash 到新根目錄
cp /sbin/init /test/myroot/sbin/
cp /bin/bash /test/myroot/bin/
10、利用腳本copy命令以及命令依賴的庫文件到新的根目錄
#!/bin/bash
MYROOT=/www/myroot
cplib(){
libdir=${1%/*}
newlib=$MYROOT$libdir
[ ! -d $newlib ] && mkdir -p $newlib
[ ! -e $MYROOT$1 ] && cp $1 $newlib && echo -e "\033[35m$1 copy finished!\033[0m"
}
cpcmd(){
cmddir=${1%/*}
newcmd=$MYROOT$cmddir
[ ! -d $newcmd ] && mkdir -p $newcmd
[ ! -e $MYROOT$1 ] && cp $1 $newcmd
for i in `ldd $1 | grep -o "/.*lib\(64\)\?/[^[:space:]]\+"`;do
cplib $i
done
}
echo -ne "\033[34mPlease input Command:\033[0m"
read CMD
until [ $CMD == 'q' ];do
! which $CMD &>/dev/null && echo -ne "\033[31mCommand not exist,Please again input:\033[0m" && read CMD && continue
COMMAND=`which $CMD | grep -v "alias" | grep -o "[^[:space:]]\+"`
cpcmd $COMMAND
echo -e "\033[32m$COMMAND copy finished!\033[0m"
echo -ne "\033[33mPlease input Command:\033[0m"
read CMD
done
精簡系統(tǒng)功能完善
#/etc/rc.d/init.d/functions
SCREEN=`stty -F /dev/console size 2>/dev/null`
COLUMNS=${SCREEN#* }
[ -z $COLUMNS ]&& COLUMNS=80
SPA_COL=$[$COLUMNS-14]
RED='\033[1;31m'
GREEN='\033[1;32m'
BLUE='\033[1;34m'
NORMAL='\033[0m'
success(){
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n $string
for i in `seq 1 $RT_SPA`;do
echo -n " "
done
echo -e "[ ${GREEN}OK${NORMAL} ]"
}
failde(){
string=$1
RT_SPA=$[$SPA_COL-${#string}]
echo -n $string
for i in `seq 1 $RT_SPA`;do
echo -n " "
done
echo -e "[ ${RED}FAILED${NORMAL} ]"
}
1、關(guān)機(jī)重啟;
#!/bin/bash
case $0 in
*reboot)
COMMAND='/sbin/halt -p';;
*halt)
COMMAND='/sbin/reboot';;
*)
echo "Only call this script by *reboot OR *halt";;
esac
exec $COMMAND/etc/rc.d/rc
#!/bin/bash
RUNLEVEL=$1
for i in /etc/rc.d/rc$RUNLEVEL.d/K*;do
$i stop
done
for i in /etc/rc.d/rc$RUNLEVEL.d/S*;do
$i start
done
2、主機(jī)名
/etc/rc.d/rc.sysinit
#!/bin/bash
echo "Welcome to linux"
echo "Remount rootfs"
mount -n -o remount,rw /
mount -a
[ $? -eq 0 ] && success "Mount others filesystem"
echo "Set the hostname"
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z $HOSTNAME -o $HOSTNAME == '(none)' ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME
3、運(yùn)行對應(yīng)服務(wù)腳本
(服務(wù)樣例腳本)
/etc/rc.d/init.d/myservice
#!/bin/bash
#
# chkconfig:2345 45 55
# description:This is my services!
. /etc/rc.d/init.d/functions
NAME=myservice
FILE=/var/lock/subsys/$NAME
STATUS(){
if [ -e $FILE ];then
echo -e "\033[32m$NAME is running... \033[0m"
else
echo -e "\033[31m$NAME is stoped\033[0m"
fi
}
START(){
touch $FILE
[ $? -eq 0 ] && success "Staring $NAME" || failed "Staring $NAME"
}
STOP(){
rm -f $FILE $>/dev/null
[ $? -eq 0 ] && success "Stoping $NAME" || failed "stoping $NAME"
}
USAGE(){
echo "/etc/init.d/$NAME {start|stop|restart|status}"
}
case $1 in
start)
START;;
stop)
STOP;;
restart)
echo "restarting...";;
status)
STATUS ;;
*)
USAGE;;
esac
4、啟動終端;
/etc/inittab
1:2345:respawn:/sbin/agetty -n -1 /bin/bash 38400 tty1
1:2345:respawn:/sbin/agetty -n -1 /bin/bash 38400 tty2
終端提示信息:
/etc/issue文件的內(nèi)容
5、定義單用戶級別
/etc/init.d/single
. /etc/init.d/functions
if [ "$1" != "start" ]; then
exit 0
fi
# this looks nicer
[ -x /usr/bin/clear ] && /usr/bin/clear
# Now go to the single user level.
echo $"Telling INIT to go to single user mode."
exec init -t1 S
6、裝載網(wǎng)卡驅(qū)動,啟用網(wǎng)絡(luò)功能
/etc/rc.d/rc.sysinit
....
echo " Initializing network device..."
/sbin/inmod /lib/modules/mii.ko
/sbin/inmod /lib/modules/pcnet32.ko
ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failed "
Activating loopback network device"
/etc/rc.d/init.d/network
#!/bin/bash
#chkconfig: 35 10 90
#description:network services
prog=network
. /etc/rc.d/init.d/functions
C>
. $CONF
start(){
ifconfig eht0 $IPADDR/24 up
[ -z $GATEWAY ] && route add default gw $GATEWAY
}
stop(){
ifconfig eth0 down
}
status(){
ifconfig eth0
}
usage(){
echo "$prog:{start|stop|restart|status}"
}
case $1 in
start)
start
success "config network eht0";;
stop)
success "Stop network eht0";;
restart)
stop
start
success "Restart network card eht0";;
status)
status;;
*)
usge;;
exit 6
esac
7、rc.sysinit:掛載/etc/fstab 中定義的其他文件系統(tǒng)
grep -v -E "^$|^#" /etc/fstab | grep -E -v "\<swap|proc|sysfs\>" | awk '{print $1}' | while read LINE;do awk '{print $1}' /proc/mounts | grep "^$LINE";done
8、設(shè)定內(nèi)核參數(shù):/etc/sysctl.conf
/etc/rc.d/rc.sysinit
sysctl -p &> /dev/null
[ $? -eq 0 ] && success "Set kernel parameter" || failed "
Set kernel parameter"
9、用戶
PAM :pluggable Authentication Module
/etc/pam.d/*
繞過pam
/bin/login
nsswitch:Network Service Switch
框架:/etc/passwd , /etc/shadow , /etc/group
庫: libnss_file.so , libnss_nis.so ,libnsss_ldap.so
配置文件:/etc/nsswitch.conf
NIS ,LDAP ,MYSQL/etc/inittab
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
.bash_profile
PS1='[\u@\h \W]\$'
u:用戶名
h:主機(jī)名
W:路徑基名
export PS1
busybox :1M
kernel+initrd(busybox)-->rootfs(busybox)
查看本機(jī)硬件設(shè)備信息:
1、cat /proc/cpuinfo
2、lsusb
3、lspci
4、hal-device
Hardware Abstract Layer
如何編譯busybox(busybox-1.21.1 kernel-2.6.39.3):
①www.busybox.net下載源文件解壓
②進(jìn)入解壓目錄,執(zhí)行 make menuconfig編譯,然后保存退出 執(zhí)行make install(glibc報錯需要yum install glibc-static -y;kernel版本較低,需要下載高版本的kernel,復(fù)制include/mtd/ubi-user.h 到busybox/include/mtd目錄)
③cp -a _install/* /tmp/busybox mkdir -pv /tmp/busybox/{proc,sys,etc,dev,mnt/sysroot,lib/modules,tmp}
創(chuàng)建兩個必要的設(shè)備文件:
# mknod dev/console c 5 1
# mknod dev/null c 1 3
④modinfo ext3 復(fù)制ext3庫和依賴的庫到 busybox/lib/modules目錄
⑤在busybox目錄創(chuàng)建init文件 ,給執(zhí)行權(quán)限
添加如下內(nèi)容:
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
insmod /lib/modules/jbd.ko
insmod /lib/modules/ext3.ko
mdev -s
mount -t ext3 /dev/hda2 /mnt/sysroot
exec switch_root /mnt/sysroot /sbin/init制作initrd : find . | cpio --quiet -H newc -o | gzip -9 -n > /test/boot/initrd.gz
⑥cp /boot/vmlinux /mnt/boot/vmlinuz
⑦安裝grub grub-install --root-directory=/test /dev/sda 創(chuàng)建grub.conf
vim /test/boot/grub/grub.conf
default=0
timeout=5
title My Linux (2.6.32-573.el6.x86_64)
root (hd0,0) ro root=/dev/sda2
kernel /vmlinuz
initrd /initrd.gz
⑧cp _install/* /test/sysroot/ -a
rm linuxrc
cd /test/sysroot/
mkdir -pv proc sys etc/rc.d/init.d tmp dev/pts boot var/{log,lock,run} usr/lib root mnt media
mknod dev/console c 5 1
mknod dev/null c 1 3⑨為init進(jìn)程提供配置文件:
# vim etc/inittab
添加如下內(nèi)容:
::sysinit:/etc/rc.d/rc.sysinit
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
⑩建立系統(tǒng)初始化腳本文件# vim etc/rc.d/rc.sysinit
添加如下內(nèi)容:
#!/bin/sh
echo -e "\tWelcome to \033[31mMageEdu\033[0m Linux"
echo -e "Remounting the root filesystem ..."
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -o remount,rw /
echo -e "Creating the files of device ..."
mdev -s
echo -e "Mounting the filesystem ..."
mount -a
swapon -a
#echo -e "Starting the log daemon ..."
#syslogd
#klogd
#echo -e "Configuring loopback interface ..."
#ifconfig lo 127.0.0.1/24
#ifconfig eth0 172.16.100.9/16
?為系統(tǒng)準(zhǔn)備一個“文件系統(tǒng)表”配置文件/etc/fstab
# vim etc/fstab
添加如下內(nèi)容:
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
/dev/hda2 / ext3 defaults 1 1
Kernel + initrd( busybox 制作 ,不提供ext3文件系統(tǒng)模塊) + ROOTFS (busybox制作)
make arch/
arch/x86/bootbzImage
硬件驅(qū)動:initrd
initrd:僅需要提供內(nèi)核訪問真正的根文件系統(tǒng)所在設(shè)備需要的驅(qū)動
存儲設(shè)備和文件系統(tǒng)相關(guān)的模塊
系統(tǒng)初始化rc.sysinit :初始其他硬件的驅(qū)動程序;
ROOTFS:bushbox ,init 不支持運(yùn)行級別
/etc/inittab 格式也不盡相同
ash,bush
bash
內(nèi)核設(shè)計風(fēng)格:
RedHat,SUSE
核心:動態(tài)加載 內(nèi)核模塊
內(nèi)核:/lib/modules/“內(nèi)核版本號命名的目錄”vmlinuz-2.6.32
/lib/modules/2.6.32/
RedHat5:ramdisk-->initrd
RedHat6:ramfs-->initramfs單內(nèi)核:Linux(LWP)
核心:ko(kernel object 內(nèi)核對象)
微內(nèi)核:Windows ,Solaris(線程)
chroot命令:切換根目錄
chroot /PATH/TO/TEMPROOT
chroot /test/virroot /bin/bash
ldd命令:查看命令支持的庫文件
ldd /bin/bash ldd /bin/mv
kickstart:三部分
命令段
必備命令
keyboard
lang
timezone
rootpw --iscrpted
selinux --disabled|--permissive
authconfig --useshadow
bootloader --location
clearpart --initlabel --linux
driverdisk --source=
firewail --disabled
firstboot --disabled
test|graphical
key --skip
network --botoproto= --ip= --netmask= --geteway= --nameserver=
install|upgrade
可選命令
軟件包 選擇段,%packages
@package_group_name
package_name
-package_name
腳本段
%pre
%post
安裝過程中,boot提示符中可以使用的命令 :
askmethod
dd
ip=
netmask=
geteway=
dns=
ks=http://
ks=cdrom:/
rescue:進(jìn)入緊急救援模式ksvalidator /bash/to/anaconda-ks.cfg 檢查語法錯誤
system-config-kickstart & 啟用圖形化調(diào)試
mkisofs -R -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o boot.iso iso/ 創(chuàng)建光盤鏡像