Linux技术研究-基础篇(启动和自动挂载)

系统启动流程

如果有一天你的服务器启动不了,面对屏幕上的各种各样的提示素手无策.
你不知道服务器出了什么问题,无法判断启动到了哪个环节.
若想排查出问题原因就必须掌握linux的系统启动流程,根据提示信息判断系统在哪个启动环节遇到故障
这样就能很快的把问题排解.
整个启动过程都属于纯粹的理论知识.今天我们就来学习一下linux系统的启动过程是什么样

一.BIOS 加电自检
当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.
BIOS 的工作
1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统
2.寻找启动磁盘,每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统
   比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,依照设置次序在设备上寻找启动信息
3.找到了启动硬盘,接着BIOS就会在磁盘上找启动扇区,找到内核启动系统.
   1)先试着寻找第一个扇区,也就是主引导记录MBR(Master Boot Record)
   2)如果第一个扇区上没有没有存在操作系统,再去寻找标记为BOOT的分区.
不论是MBR还是BOOT分区,存储操作系统的空间都只有446字节;
如果没有在上面提到的位置找到操作系统的内核,那么BIOS就无法继续启动工作.
而我们的内核往往会大于446个字节,存放在磁盘的其他位置上,既然446装不下内核,又为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写了一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核.这个小程序就是启动载入器(boot loader)
二.BOOT Loader
linux的boot loader(上文提到的小程序) 常见的有两种:lilo grub
因为lilo存在着一个1024柱面的限制,并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.现在的绝大多数类linux系统都采用grub做boot loader;
grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步.
那么我们就看看grub的内容 它存在于 /boot/grub中
GRUB有几个重要的文件,STAGE1、STAGE1.5、STAGE2
STAGE1:它只有512字节,通常放在MBR中,它的作用很简单,就是在系统启动时用于装载STAGE2并将控制权交给它。
STAGE2:GRUB的核心,所有的功能都是由它实现。
STAGE1.5:介于STAGE1和STAGE2之间,是它们的桥梁,因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式,所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的柱面之间.
引导顺序如下:STAGE1->;STAGE1.5->;STAGE2,
主要的配置文件时 grub.conf
里面选项含义:
title:一个操作系统引动的标头,可以使多个
root :指明所需文件存在于哪个磁盘哪个分区上 (hd0,0)表示第一个硬盘,第一个分区,可参考/boot/grub/device.map
kernel:内核文件的名字,并且会有一些加载内核时的参数 or代表以只读方式加载
initrd:包含一些附加的驱动程序

三.内核启动
内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用
内核会试着驱动这些设备,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由于此时还未挂载任何文件系统,因此还不能使用文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统.
内核会尝试挂载根文件系统,根文件系统至少包含 /etc /bin /sbin /lib /dev 这5大目录
他们5个缺一不可.都会导致系统无法启动
根文件系统挂载是以只读方式挂载的,因为这时linux还在启动阶段,并不稳定,避免破坏系统资料

四.启动INIT服务
顺利的挂载了根文件系统后,就会启动init服务
内核会按 /sbin/init /etc/init /bin/init 顺序寻找init程序,
如果找不到则内核报错 这里存在一个参数 init=/bin/sh 如果启动时指定了则最后执行/bin/sh
   而不会产生内核报错.也被称为快速启动,因为它忽略了很多启动初始化工作.
启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境
init做了什么?它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作.
会执行三个脚本 /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local
rc.sysinit 主要的功能用来建立系统的基本环境
   启动udev selinux子系统
   udev负责产生 /dev中的文件,selinux负责增强系统的安全性
   设定核心参数 sysctl -p 加载 /etc/sysctl.conf
   设定系统时间 将硬件时间设定为系统时间
   加载键盘和交换分区 swapon -a -e
   设置主机名,挂载文件系统,并将根重新挂载为可读写的.
   加载动态驱动模块
   USB设备与RAID & LVM
   卸载 /initrd/ 目录
  
rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定不同的服务
    根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本文件 以S开头的则启动

rc.local 前两个脚本都是系统至关重要的脚本,如果我们想在启动过程中放置一些其他程序
   应该使用rc.local脚本中 因为S99local存在于rc[2-5].d中
三个RC脚本执行完毕后,就会建立虚拟主控制台 执行 /bin/login 就提供了用户登陆界面了
如果是图形 L5级别的话,会启动X window登录界面
所有的启动就都已经完毕

用户环境初始化
输入用户名和密码系统验证,然后会执行
/etc/profile
/etc/profile.d/*.sh $HOME/.bash_profile
/etc/bashrc
$HOME/.bashrc

启动级别
0 关机
1 单用户
2 多用户模式但带网络但不能远程登录
3 不受限多用户模式 TUI
4 保留
5 图形模式
6 重新启动
查看启动级别
# runlevel
N 3
N是上次的级别,3是当前级别 也就是说机器开机就是3级别
切换级别
init 5

挂载文件系统

/etc/fstab
第一项 是要mount的存储装置的实体位置或者用卷标
第二项 要挂到哪个目录位置
第三项 指定要挂载的系统格式
第四项 mount时要设定的状态,只读或defauls
第五项 提供DUMP功能,在系统DUMP时需要BACKUP的标志位,其内定位置是 0
第六项 设定开机时文件系统是否要check
   除了root的文件系统其必要的check为1 其他视需要而定 默认是0
LABEL=/boot             /boot                   ext3    defaults        1 2

磁盘分区
fdisk -l
fdisk DEVICE
   m 帮助
   l
挂载文件系统 mount
man mount
# df -Th 查看在线系统 或用 mount
重新加载/etc/fstab 用 mount -a
fdisk -l 查看磁盘和分区
卸载文件系统 umount /目录

remount 参数试验

# mount -o ro /dev/sda6 /mnt/
# mount | grep sda6
/dev/sda6 on /mnt type ext3 (ro)
# touch /mnt/my_file
touch: 无法触碰 “/mnt/my_file”: 只读文件系统
# mount -o remount,rw /dev/sda6 /mnt/
# touch /mnt/my_file

交换分区swap的设定
fdisk 中的 t 参数
# mkswap /dev/sda5
Setting up swapspace version 1, size = 509927 kB
# free -m
             total
Swap: 509
# swapon /dev/sda5
# free -m
             total
Swap: 996
# swapoff /dev/sda3
# free -m
             total
Swap: 486
#

随系统启动挂载
写到 /etc/fstab 中
LABEL=myext3 /mnt ext3 default   0 0

触发挂载
触发挂载是一项服务,我们首先来学习服务的基本控制
讲启动级别时,我们知道需要启动 /etc/rc.d/rc[0-6] 中的脚本 这些脚本既是服务的启动脚本
根据启动级别来控制应该启动哪些服务 他们都是软连接,真实文件存在于 /etc/init.d/ 中
我们可以去这个目录下去手动加参数来执行启动脚本
也可以用命令 service 服务名 start|stop|restart 等等参数来控制
触发挂载的服务名叫做 autofs 我们就可以用 service autofs restart
任何服务都有他们的主配置文件 autofs 的主配置文件在 /etc/auto.master
系统有一个自动加载光驱的配置
auto.master
    /misc   /etc/auto.misc
/misc是自动挂载的上层目录,/etc/auto.misc指明了对 /misc 下的目录子目录挂接的配置信息
测试 把光盘放在光驱里,然后执行 cd /misc/cd 则autofs服务会自动把光驱挂载到 /misc/cd中
  
定制自己的配置信息
vi /etc/auto.misc
   myext3         -fstype=auto    :/dev/sda6
:wq
也可以自己定义父级目录
vi /etc/auto.master
   /opt /etc/auto.opt
:wq
vi /etc/auto.opt
   myext3         -fstype=auto    :/dev/sda6
:wq
重新添加了autofs监控目录 所以需要重新启动autofs服务
service autofs restart
cd /opt/myext3
再用mount验证

ext3 收缩扩大

放大

fdisk
/dev/sda5            1123        1184      497983+ 83 Linux
[root@stu254 ~]# partprobe /dev/sda
[root@stu254 ~]# mke2fs -j /dev/sda5
[root@stu254 ~]# mount /dev/sda5 /mnt
[root@stu254 ~]# cp /etc/rc.d/init.d/* /mnt
[root@stu254 ~]# sync
[root@stu254 ~]# umount /mnt
[root@stu254 ~]# e2fsck -f /dev/sda5
[root@stu254 ~]# fdisk /dev/sda
Command (m for help): d
Partition number (1-5): 5
Command (m for help): n
First cylinder (1123-2088, default 1123):
Using default value 1123
Last cylinder or +size or +sizeM or +sizeK (1123-2088, default 2088): 1245
Command (m for help): w
[root@stu254 ~]# partprobe /dev/sda
[root@stu254 ~]# resize2fs /dev/sda5 1G
resize2fs 1.39 (29-May-2006)
The containing partition (or device) is only 987966 (1k) blocks.
You requested a new size of 1048576 blocks.

[root@stu254 ~]# resize2fs /dev/sda5 987966K
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/sda5 to 987966 (1k) blocks.
The filesystem on /dev/sda5 is now 987966 blocks long.

[root@stu254 ~]# mount /dev/sda5 /mnt
[root@stu254 /]# df -Th /dev/sda5
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda5     ext3    935M   11M 876M   2% /mnt
[root@stu254 /]# ls /mnt/ | wc -l
68
[root@stu254 /]#

缩小

[root@stu254 /]# e2fsck -f /dev/sda5
[root@stu254 /]# resize2fs /dev/sda5 300M
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/sda5 to 307200 (1k) blocks.
The filesystem on /dev/sda5 is now 307200 blocks long.

[root@stu254 /]# mount /dev/sda5 /mnt
[root@stu254 /]# df -Th /dev/sda5
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda5     ext3    291M   11M 269M   4% /mnt
[root@stu254 /]#

ext2 ext3 相互转换
[root@stu254 /]# mount /dev/sda5 /mnt
[root@stu254 /]# df -Th /dev/sda5
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda5     ext3    291M   11M 269M   4% /mnt
[root@stu254 /]# umount /dev/sda5
[root@stu254 /]# tune2fs -O ^has_journal /dev/sda5
tune2fs 1.39 (29-May-2006)
[root@stu254 /]# mount /dev/sda5 /mnt
[root@stu254 /]# df -Th /dev/sda5
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda5     ext2    291M 2.3M 277M   1% /mnt

[root@stu254 /]# umount /mnt
[root@stu254 /]# tune2fs -j /dev/sda5
tune2fs 1.39 (29-May-2006)
Creating journal inode: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@stu254 /]# mount /dev/sda5 /mnt
[root@stu254 /]# df -Th /dev/sda5
文件系统      类型    容量 已用 可用 已用% 挂载点
/dev/sda5     ext3    291M   11M 269M   4% /mnt
[root@stu254 /]#

转载于:https://blog.51cto.com/xiahongyuan/570228

Linux技术研究-基础篇(启动和自动挂载)相关推荐

  1. Linux技术研究-基础篇(raid与LVM,配额)

    Linux技术研究-基础篇(raid与LVM,配额) 创建RAID-5 若想建立新的md1设备 只在/dev下建立还不够 重启后会消失 固化的方法是 为了使udev自动产生/dev/md1, /dev ...

  2. 鸟哥的Linux私房菜(基础篇)- 第八章、Linux 磁盘与文件系统管理

    第八章.Linux磁盘与文件系统管理 最近升级日期:2009/08/30 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分割槽不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生文 ...

  3. GPU技术支持-基础篇-包管理工具

    GPU技术支持-基础篇-包管理工具 目录 GPU技术支持-基础篇-包管理工具 前言 概述 包管理工具简介 dpkg「Debian Package」 rpm「RPM Package Manager」 依 ...

  4. 鸟叔linux私房菜基础篇简体,鸟叔的Linux私房菜基础篇-学习笔记(一)

    鸟叔的Linux私房菜基础篇-学习笔记(一) 开机进入命令行模式: ctrl+alt+[F1-F6]的任意键进入命令行编辑界面 ctrl+alt+F7进入图形界面模式 开始下达指令 [dmtsai@s ...

  5. 计算机安全的加密技术,计算机安全加密技术研究(4篇)(共14695字).doc

    计算机安全加密技术研究(4篇)(共14695字) 计算机安全加密技术研究(4篇)(共14695字) 第一篇:计算机安全防护中数学签名技术应用 摘要:近几年来,随着全球互联网领域的飞速发展,计算机网络已 ...

  6. 机器学习(四):剪枝技术(基础篇)

    机器学习(四):剪枝技术(基础篇) 相关的决策树文章: 机器学习(四)ID3决策树 机器学习(四)C4.5决策树 机器学习(四)CART分类树 机器学习(四)CART回归树 机器学习(四)决策树绘图 ...

  7. 数字视频测量应用技术(基础篇)

    数字视频测量应用技术(基础篇) 第三章 数字分量视频信号测量 3.1 串行分量数字信号 P101 3.1.1 演播室数字分量信号标准 3.1.1.1 标清(SDTV)部分 3.1.1.2 高清(HDT ...

  8. hnc8进linux环境,鸟哥的linux私房菜(基础篇,8、开机关机、在线)命令

    鸟哥的linux私房菜(基础篇,8.开机关机.在线求助)命令 1.exit 注销 Linux 2. 指令太长的时候,可以使用 \ 符号和[Enter] 符号,使指令连续到下一行. 3. 在 Linux ...

  9. 鸟哥的Linux私房菜-基础篇第四版.pdf免费资源下载链接,《鸟哥的Linux私房菜-基础篇》第四版.pdf

    <鸟哥的Linux私房菜-基础篇>第四版.pdf免费资源下载链接(.pdf书籍的优点是便于直接在电脑中保存有电脑就可以阅读,如果觉得这本书给你提供到了很大的帮助,可以去书店补一本纸质版) ...

最新文章

  1. CORS跨域实现思路及相关解决方案
  2. VALID SAME
  3. 简单的并发测试工具 ab.exe ab.zip可下载 -摘自网络
  4. 160个Crackme013之投机取巧
  5. 从多篇2021年顶会论文看多模态预训练模型最新研究进展
  6. ups容量计算和配置方法_山埔UPS电源后备时间计算方法
  7. Grafana全面瓦解
  8. 【渝粤教育】电大中专药物分析技术基础 (2)_1作业 题库
  9. 易语言静态连接器提取_正确易语言链接器link.exe,使易语言支持静态编译
  10. 6-10 找出大于num的最小素数
  11. OceanBase-概述
  12. java pack unpack_解释一下pack和unpack
  13. 第一个STM8项目的记录
  14. 【附源码】计算机毕业设计JAVA智友少儿编程学习平台
  15. 大衣哥在《火火的情怀》后,和孟文豪张成军推出《新时代的农民》
  16. laydate日期时间插件实现不用点击确定
  17. 写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』
  18. 原创 HTML5:JS操作SVG实践体会
  19. 学习柿饼UI,免费送柿饼M3模块
  20. leetcode714.买卖股票的最佳时机含手续费(中等)

热门文章

  1. 接口测试之json中的key获取
  2. Ubuntu服务器修复,ubuntu – 服务器攻击,如何修复它
  3. 圆柱与平面接触宽度_好烦!这个建筑高大斜圆柱真难施工!别怕!学会这种工法就不难了...
  4. windows安装python2.7_Windows下安装python2.7及科学计算套装
  5. 测试 软通动力软件测试机试_5000字长文,计算机保研机试介绍及准备策略!高分过过过!...
  6. 自学前端开发:想要学习成为一名优秀的前端开发者,代码之外需要关注的问题
  7. 2020年进入倒计时:一波前端资源送给你~这一年,谢谢自己!
  8. OJ和PTA常见的错误代码含义
  9. python查询最高分_精通 Oracle+Python,第 1 部分:查询最佳应践
  10. java的getshape(),Java RectangularShape.getMaxX方法代码示例