Linux启动(续)

来源:互联网 发布:mac彻底删除战网 编辑:程序博客网 时间:2024/06/04 08:04

runlevel (启动级别):    查看命令 :who -r 或 runlevel
        0:halt 关机
        1:单用户模式,直接以管理员身份登录,不需要密码
        2:多用户模式,但是不能挂载nfs
        3:多用户模式
        4:保留未用
        5:图形界面
        6:reboot重启
    默认运行级别在/etc/inittab:
    id:3:initdefault:    默认为3
    我们知道bootloader有lilo、grub、spfdisk等,目前最常用的就是grub;
    grub是放在MBR中,但是MBR总共只有512Bytes,分区表占64Bytes,grub只能用到446Bytes
    grub被分为2个阶段:
        stage 1 :存放grub主程序
        stage 2 :主要配置文件,一般为/boot/grub/menu.lst ————> 其实是链接/boot/grub/grub.conf   

来看一下grub.conf:

default=0#设定默认启动的title编号,读秒时间结束后,就会启动第一个title timeout=5#设置默认读秒为5秒,给用户选择splashimage=(hd0,0)/grub/splash.xpm.gz#grub背景图片在磁盘的位置hiddenmenu#隐藏菜单password --md5 $1$ImLrM$VqU.vu9UCq.M7M.Q0hN6c1 #给grub设定密码title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64) #内核标题,系统名等,可以修改root (hd0,0)#内核所在的磁盘,(hd0,0)表示第一块盘,第一个分区kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=e39a2639-0c77-4b7e-8c6b-bb34bd658eb4 #内核文件及路径initrd /initramfs-2.6.32-431.el6.x86_64.img#虚拟根文件系统
    当root用户密码忘记时,我们可以选择单用户模式来修改密码,但是什么人都可以重启然后进入单用户模式
    再就轻易的修改root密码,那是绝对不行的。所以我们可以给grub设置一个密码,先生成密码,然后再加到title上面那一行

[root@Linux ~]# grub-md5-crypt  Password: Retype password: $1$ImLrM$VqU.vu9UCq.M7M.Q0hN6c1
我们可以尝试修复和安装一个grub:

[root@Linux ~]# grubgrub> root (hd0,0)#判断内核在磁盘的位置root (hd0,0) Filesystem type is ext2fs, partition type 0x83grub> setup (hd0)  #检查并修复grubsetup (hd0) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"...  27 sectors are embedded.succeeded Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeededDone.
我们也可以尝试模拟grub引导加载内核:

先创建两个分区:/dev/hda1、/dev/hda2[root@Linux ~]# mkdir /mnt/{boot,root}#创建两个目录,boot做引导区,root为根目录[root@Linux root]# mkdir  bin dev home proc sbin tmp var etc lib mnt root  selinux  sys  usr[root@Linux ~]# mke2fs -j /dev/hda1#初始化磁盘为ext3格式[root@Linux ~]# mke2fs -j /dev/hda2[root@Linux ~]# mount /dev/hda1 /mnt/boot#分别挂载[root@Linux ~]# mount /dev/hda2 /mnt/root[root@Linux ~]# grub-install --root-directory=/mnt /dev/hda#安装grub指定安装目录[root@Linux ~]# cp /boot/vmlinuz-2.6.18-194.el5 /mnt/boot/vmlinuz#将内核和虚拟根目录直接复制过来[root@Linux ~]# cp /boot/initrd-2.6.18-194.el5.img /mnt/boot/[root@Linux boot]# mv initrd-2.6.18-194.el5.img initrd-2.6.18-194.el5.img.gz #用file查看initrd文件类型并修改,再解压[root@Linux boot]# gzip -d initrd-2.6.18-194.el5.img.gz[root@Linux boot]# cpio -id <initrd-2.6.18-194.el5.img#再用file查看,用 cpio 解压[root@Linux boot]# vim init#修改init,指定真的根目录,这一步本来是启动过程中,执行程序的结果mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00 ——> /dev/hda2[root@Linux boot]# find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz#改完后再用cpio压缩为initrd.gz [root@Linux boot]# vim grub/grub.conf #配置自己的grub.confdefault=0timeout=5title Linux (LFL Computer)root (hd0,0)kernel /vmlinuzinitrd /initrd.gz[root@Linux root]# cp /sbin/init /mnt/root/sbin#复制系统init和bash[root@Linux root]# cp /bin/bash /mnt/root/bin并用ldd命令查看他们所依赖的库文件,然后复制到/mnt/root/lib里面[root@Linux ~]# chroot /mnt/root #测试[root@Linux root]# vim etc/inittab#设置init配置文件id:3:initdefault:si::sysinit:/etc/rc.d/rc.sysinit[root@Linux root]# vim etc/rc.d/rc.sysinit#设置默认运行环境echo -e "Welcome to LFLong Computer "/bin/bash[root@Linux root]# chmod +x etc/rc.d/rc.sysinit 
续  cpio 命令的用法:

       cpio(copy in/out)主要是用来建立或者还原备份档的工具

        -i或--extract  执行copy-in模式,还原备份档。        -d或--make-directories  如有需要cpio会自行建立目录        -H<备份格式>  指定备份时欲使用的文件格式。        --quiet  不显示复制了多少区块。        -o或--create  执行copy-out模式,建立备份档。        -c:使用旧ASCII备份格式;            cpio -id < initrd-2.6.18-194.el5.img    #将该文件(输入重定向)还原            find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz    #将当前目录下所有文件已newc格式建立备份并压缩为.gz格式
将这个配置好的磁盘拿下来,装在别的没有系统的主机上,开机就会出现自己配置的界面了,这就是基本的开机过程。这只是一个简单的模拟,而真正的启动过程会比这个复杂很多值得我们去学习和研究。

参考:鸟哥Linux私房菜,马哥Linux教学视频。

0 0