• Linux启动(续)


    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 ~]# grub
    	grub> root (hd0,0)			#判断内核在磁盘的位置
    	root (hd0,0)
    	 Filesystem type is ext2fs, partition type 0x83
    	grub> setup (hd0)  			#检查并修复grub
    	setup (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"... succeeded
    	Done.
    我们也可以尝试模拟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.conf
    							default=0
    							timeout=5
    							title Linux (LFL Computer)
    								root (hd0,0)
    								kernel /vmlinuz
    								initrd /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教学视频。

  • 相关阅读:
    pt-tcp-model
    (转)从史上八大MySQL宕机事故中学到的经验
    pt-query-digest
    DNS生效时间
    Python之uuid模块
    一个IO的传奇一生
    Python之Queue模块
    利用freemarker 静态化网页
    FreeMarker教程
    模板引擎freemarker的简单使用教程
  • 原文地址:https://www.cnblogs.com/imlifelong/p/10651326.html
Copyright © 2020-2023  润新知