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教学视频。
Linux启动(续)的更多相关文章
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Linux启动过程详述
http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...
- linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
- Linux启动与登陆环境
linux启动流程 参考:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 加载内核,首先读入/boot 目录下的内核文件. ...
- linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
- Linux 启动过程分析
本文仅简单介绍Linux的启动过程,在此基础上做简要的分析.对于Linux启动过程中内部详细的函数调用不做介绍,只是希望本文能给新手起到一个抛砖引玉的作用,以便深入研究Linux的启动过程.下图基本展 ...
- [转载] Linux启动过程详解-《别怕Linux编程》之八
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
- Linux启动盘制作
1.下载Universal-USB-Installer软件,在电脑上插入空U盘,打开软件,依下列所示步骤进行 2.点击同意 3.点击版本选择框,会出现它支持的系统镜像文件的版本,包括win7.win8 ...
随机推荐
- hdu 3547 DIY Cube (Ploya定理)
DIY Cube Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- Lesson 1 Basic Concepts: Part 3
A cheaper option Some people may not want to buy a domain or pay for hosting because they only have ...
- smarty课程---smarty的处理过程是怎样的
smarty课程---smarty的处理过程是怎样的 一.总结 一句话总结:编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译 1. smarty将php源文件,首先编译 ...
- POJ2823 单调队列
POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...
- jQuery - 设置内容和属性 设置内容 - text()、html() 以及 val() , 设置属性 - attr()
jQuery - 设置内容和属性 设置内容 - text().html() 以及 val() text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTM ...
- [Chromium文档转载,第007章]JNI on Chromium for Android
Overview JNI (Java Native Interface) is the mechanism that enables Java code to call native function ...
- request.getSession().getServletContext().getRealPath("")获取工程目录 路径修改
使用request.getSession().getServletContext().getRealPath("")获取工程目录. 设置server Locations在serve ...
- img下面的留白解决
在做网页的时候经常会出现一个令人困惑的现象.那就是行内元素和块级元素之间会出现“留白”.就是块级元素中明明只有一个行内元素,但行内元素却不会铺满块级元素.像这个例子: “留白”出现的原因 行内元素默认 ...
- PHP抓取网页内容的几种方法
方法1: 用file_get_contents 以get方式获取内容 <?php $url='http://www.domain.com/?para=123'; $html = file_get ...
- Python3爬虫之爬取某一路径的所有html文件
要离线下载易百教程网站中的所有关于Python的教程,需要将Python教程的首页作为种子url:http://www.yiibai.com/python/,然后按照广度优先(广度优先,使用队列:深度 ...