CentOS的启动流程总体顺序如下:
POST -->Boot Sequence -->bootloader(MBR) -->Kernel -->加载rootfs -->switchroot -->/sbin /init -->(配置文件:/etc/inittab, /etc/init/*.conf) -->根据init配置文件设置默认运行级别 -->运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 -->开启或关闭用户选定的对应运行级别下所对应的服务 -->启动终端,打印登录提示符。
注:前面加粗部分代表内核空间的系统启动流程,后面未加粗部分代表用户空间的系统启动流程。
第一步:硬件启动过程
POST加电自检
主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序;例如BIOS会检测CPU、Memory以及I/O设备是否能够正常运行,如果是个人计算机的话可能还会检测一下显示器。只要一通电,CPU就会自动去加载ROM芯片上的BIOS程序,是这样来实现的。而检测完成之后就进行硬件设备的初始化。
选择启动设备以加载MBR
主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。这一步的实现是这样的:根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。
MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组 成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。
注:硬盘默认一个扇区大小为512字节。
第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。
第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记 录在其中。
第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MB
第二步:GRUB引导阶段
不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列 *** 作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段,Grub引导阶段的文件都在/boot/grub/目录下。
stage1: 这一阶段执行的就是系统安装时预先写入到MBR的Bootloader程序,即是存放在MBR的前446字节里的程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。
stage1.5: 这一阶段是Stage1阶段和Stage2阶段的桥梁,功能是加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统,此后grub程序便有能力去访问/boot/grub/stage2。
stage2: 这一阶段读取并解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核。
第三步:内部引导阶段
加载内核,核心开始解压,启动一些最核心的程序。为了让内核足够的轻小,硬件驱动并没放在内核文件里面。系统仅探测可识别到的所有硬件设备,加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动),以只读方式挂载根文件系统,运行用户空间的第一个应用程序:/sbin/init。
第四步:init初始化阶段(系统初始化阶段)
虽然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件内容各不相同,但总体的启动流程相同:/sbin/init -->根据/etc/inittab配置文件设置默认运行级别 -->运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 -->关闭或启动用户选定的默认运行级别所对应的服务 。
对于CentOS 5来说,初始化程序init是SysV init,其配置文件为:/etc/inittab; 对于CentOS 6来说,初始化程序init是upstart,其配置文件为:/etc/inittab, /etc/init/ .conf,也就是upstart将配置文件拆分成多个,在/etc/init/目录下以conf结尾的都是upstart风格的配置文件,而/etc/inittab仅用于设置默认运行级别; 对于CentOS 7来说,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/ ;
具体执行过程:/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。
CentOS7中初始化进程变为了systemd,systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
第五步:启动终端
根据前面获取的运行级别来启动终端,mingetty程序是用于启动终端的,它会调用登录程序login,这样就能显示出登录提示符了,类似mingetty这种用于打开终端的程序还有getty等。而如果默认运行级别为5,则会打开图形界面。
第一步:硬件启动过程
这一步和CentOS6差不多,详细请看1.1内容。
第二步:GRUB引导阶段
从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2,执行过程是先加载boot.img、core.img两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。
CentOS7中使用命令进行配置,而不直接去修改配置文件了。grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。
第三步:内部引导阶段
这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd。
第四步:init初始化阶段(系统初始化阶段)
CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备 *** 作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。
注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。
unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本)
第五步:启动终端
systemd执行sysinit.target
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下面的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
getty.target是启动终端的systemd对象。如果到此步骤,系统没有指定启动图形桌面,到此就可以结束了,如果需要启动图形界面,要在此基础上启动桌面程序。
从 CentOS 7 版本之后,系统开始用 systemd 实现init进程,系统启动和服务器守护进程管理器功能,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。
3.2 system unit文件格式
/usr/lib/systemd/system:发行版打包者使用,每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/etc/systemd/system:系统管理员和用户使用,管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
/lib/systemd/system::ubutun的对应目录
/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行
unit 格式说明:
service unit file文件通常由三部分组成:
Unit段的常用选项:
Service段的常用选项:
Install段的常用选项:
注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启。
首先在启动界面按e编辑启动参数,
将ro参数更改为rw init=/sysroot/bin/sh,按ctr + x启动系统
按下图执行命令更改root密码
自己定制?用 DVD 安装盘装,而不是用 livecd 装。最好的选择是最小化网络安装。
精神不正常的可以自己 LFS 一个系统。略微正常点的可以用 Gentoo 。
分类: 电脑/网络 >> *** 作系统/系统故障解析:
大部分初学者都是在有XP之后装Linux的,下面以我的分区作例子来说明,我的分区情况是:
主分区 C NTFS /dev/hda1 4 GB
扩展分区 /dev/hda2
D NTFS /dev/hda5 10 GB
E NTFS /dev/hda6 30 GB
F FAT32 /dev/hda7 3 GB
/boot ext3 /dev/hda8 40 MB
/ ext3 /dev/hda9 8.5GB
/home ext3 /dev/hda10 1 GB
/swap swap /dev/hda11 256MB(和你内存一样或1倍到2倍之间,我的内存就是256MB)
(注:后面四个分区都是属于扩展分区,用来装Linux)
1、将下载下来的ISO文件放在格式为FAT32分区的根目录下(如F:\),名称保持一致.(如:shrike-i386-disc1.iso shrike-i386-disc2.iso shrike-i386-disc3.iso);
2、用UltraISO之类的工具将disc1中的dosutils目录提取出来,放在同一个根目录下(如路径为F:\dosutils);
3、重启机器,设置BIOS从软盘启动后插入MS-DOS盘,或其它可引导盘;
4、进入dosutils目录,运行其中的autoboot.bat文件(输入autoboot即可);
5、这时出现的是安装界面的语言;选什么随便你,看得懂就好,呵呵;
6、接下来叫你选择键盘类型,你的是什么就选什么,一般默认就好;
7、然后出现的界面是选择安装方法,当然是选择:硬盘驱动器;
8、然后选择分区(这每个人的分区不同,所以不一定相同),就举我的例子,我是把那三个镜像文件和dosutils放在F盘的根目录下,所以选择/输入:/dev/hda7即可;
9、之后安装就开始初始化了,在这一步,一般可以正确识别显示器、显卡和鼠标。之后就开始以文本模式开始安装(只能以文本模式安装);
10、接下来出现的提示是选择鼠标类型,根据自己的鼠标选择吧,很简单的(为什么有些人装完后鼠标不能识别,我真觉得很神奇:O);
11、然后选择安装类型,选择:定制
12、之后就进入磁盘分区设置了。第一次安装可以选择让Linux自动分区,安全、省事。我选择:DiskDruid,因为想看看它长什么样,呵呵;
13、进入DiskDruid之后,屏幕上就显示了你目前的分区状况,你可以对它们进行编辑。以我的分区状况为例,在这里,我要为/boot、/、/home分别设置挂载点:/boot、/、/home。注意两个问题,1,挂载点要小写,不然单独的/boot和/home分区会被挂载/BOOT、/HOME文件夹中,达不到预期效果(至于为什么要设单独分区,请参阅相关主题);2,在编辑“/”的挂载点时,也许会出现警告框,请大胆地选择“强行添加”,没有问题的。最后编辑SWAP分区,确定后选择格式化SWAP区就行;
14、引导装载程序配置,我选择:GRUB(推荐新手使用,因为很简单)之后的两个引导装载程序配置全部跳过,不进行修改;
15、之后到了引导分区设置,在这里可以设置“引导标签”,即在机器启动时,出现在GRUB中选项的名称(WINDOWS *** 作系统在GRUB中默认显示为DOS,你可以在这里把“DOS”改成“WINXP”等字样);
16、选择安装引导程序的位置:选择MBR;
17、etho的网络配置:大体分为使用DHCP和不使用DHCP(这是我个人理解方式,呵呵)因为我不是使用DHCP的,所以按空格键把“使用bootp/dhcp”前面的“*”号去掉,选择“引导时激活”,然后输入IP地址、子网掩码、默认网关以及主、次DNS(和XP中的数值一样);
18、之后可以设置主机名,随便你设
19、是防火墙规则,个人认为没有必要设高。我是选择:定制,然后在WWW(HTTP),邮件(SMTP)和FTP处安空格打上“* ”就好(这样设置之后,浏览网页就没有问题);
20、语言支持,这是多选项哦,按选多少选多少,但是别忘了中文和英文哦;
21、默认语言,我建议选:USA(就算不懂E文也好),因为默认为英文的话,在Shell下不会出现乱码,看着舒服,安装后又可以改默认语言,怕啥呢
22、时区,上海,北京,,,,,选吧随便;
23、设置根口令,看你喜欢;
24、验证配置:请在“使用屏蔽口令”和“启用MD5口令”前加上“*”(选中它们);
25、选择软件包:翻到最后一行,看到:Everything 没有?选吧,等啥,只要选上这个,以后的初级问题基本上不会出现哦。如果空间不足,请务必尽量选上所有开发工具及相关内容,可以避免安装后编译软件出现问题;
26、开始安装..........享受不用换盘的Linux安装吧
PS:在安装的过程中,可以按ALT+FX(FX是指F2、F3、、、F6),有东西看哦,是安装的摘要,如果有出现WARNING之类的词,把它记下来,也许会有用哦。按F1可以回到安装界面。
就这样,如果安装所有软件包,大约1小时后,你就可以“享受”Linux了。(知道“”的意思吗?嘿嘿)
我这样安装之后没有任何系统问题哦!
1、画面偏移:
大部分人安装完后出现的第一个问题就是画面偏移的问题。当然,这可以通过显示器上的按钮来调
整,可是如果是和XP双系统的话,那每次都调可就麻烦了。解决办法很简单,下个显卡驱动,在X
桌面的虚拟终端键入“init 3”来关闭X桌面,到终端下安装就OK了。如果是NVIDIA的显卡,在安
装后,用VI之类的编辑器编辑/etc/X11/XF86Config文件,把该文件中Driver “nv”中的nv改
成nvidia即可,然后运行startx
启动X系统,画面就正常了。
2、mount分区,可以显示中文文件名的:
mount -t vfat -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/win
(其中的vfat、hda7、win根据每个人的系统可以改变。936和cp936有的是用gb2312,不过在我
的系统中就不行)
想要让分区在系统启动时自动挂载,则要用vi 等编辑器编辑/etc/fstab,在该文件的末尾加入:
例如:/dev/hda7 /mnt/win vfat auto,codepage=936,iocharset=cp936 0 0 类似的语段
即可。
3、中文字体初步美化:
凡是刚接触Redhat系列的新手打开Mozilla的第一个反应一般都是字体模糊的让眼睛想流泪,其实
解决方法也不难,以下是本人的经验,希望对大家有帮助:
首先在你的Linux中要有simsun.ttf这个字体文件(可以在WINDOWS中找到,也许找到的是
simsun.ttc,直接把它改成simsun.ttf就行。把它弄到Linux中有两个方法,一个是mount,还有一
个是在你用ln -s 建立连接,用后面一个方法可以节省空间,前提是放字体的那个分区在Linux启动
时要自动挂载)之后在/usr/share/fonts/default目录下建立一个文件夹,名为:myttf,然后将
simsun.ttf文件用cp拷贝到/usr/share/fonts/default/myttf下,这样就可以用ttmkfdir >
fonts.dir来生成字体列表。如果要保证列表的完整性,则需要
将/usr/X11R6/lib/X11/fonts/encodings/下的encodings.dir这个文件拷贝
到/usr/share/fonts/default/myttf之后再执行ttmkdir >fonts.dir命令。这时就已经把
simsun字体装入系统了。然后要做的是用vi 打开/etc/X11/XF86Config,在其中的
Section "Files"部分加入:FontPath "/usr/share/fonts/defaults/myttf"这句话,最好放在
原先那个FontPath语句的前面。然后在Section "Module"部分加入 Load "xtt"和
Load "GLcore",并且在 Load "freetype"和Load "type1"前面加上"#"用以屏蔽它们,因为
它们不能和"xtt"共存。接下来要改的是/etc/gtk/中的gtkrc.zh_CN这个文件,把里面的fontset
部分的后半部,即"\"后面的内容改为"-misc-simsun-medium-r-normal--16-*-*-*-*-*-
gb2312.1980-0,*-r-*",最后打开/etc/gnome/中的gtkrc.zh_CN里的所有Fontset部分全部改
为"-misc-simsun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0",这是在GNOME中
的改法。如果是KDE,则在KDE的K菜单―选项―个人化―国家和语言选择中国、字库
zh_CN.gb2312。在K菜单―选项―观感―字体项中选则你想要的字体就可以了(我没用过)。最
后注销重启GNOME就搞定了。
有两点需要注意:
LINUX的分区一般用EXT3,在安装过程中,安装程序会要求你选择安装的目标路径(就是目标盘了)此时有两个知识点就是分区格式,选择EXT3,还有一个叫:SWAP,SWAP我也不懂什么,我理解为:相当于虚拟内存,用来加载一些系统的东东,假设你要安装到F盘上,F盘空间为10G=20480MB,没错吧:) 那么你在分区时就要根据你的内存大小,假设你的内存为256M,那么你就要给这个盘分一个叫SWAP的东东,空间为256*2=512,其实剩下全部给EXT3
另外,在LINUX下对硬盘的分区是这样认识的,他所示显示的方式跟WIN不一样,
如果你有两个硬盘:他会显示为:第一个硬为hda,第二个当然是hdb,如果第一个硬盘有三个分区,那么每个分区则显示为hda1,hda2,hda3,假设第二个硬盘也有两个分区,则显示为hdb1,hdb2,吼吼吼
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)