Linux系统中的引导过程与服务控制
一:系统引导流程:
开机自检(BIOS)-->MBR引导-->GRUB菜单-->加载内核(kernel)-->init进程初始化
二:系统引导级别:
0 |
poweroff.target |
关机状态,使用该级别时将会关闭主机 |
1 |
rescue.target |
单用户模式,不需要密码验证即可登录系统,多用 于系统维护 |
2 |
multi-user.target |
用户定义/减特定运行级别。默认等同于3,但是不支持网络 |
3 |
multi-user.target |
字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 |
multi-user.target |
用户定义/或特定运行级别,默认等同于3 |
5 |
graphical.target |
图形界面的多用户模式,提供了图形桌面操作环境 |
6 |
reboottarget |
重新启动,使用该级别时将会重启主机 |
三:Linux中服务的管理方式:
1、独立管理(门市房)
systemctl start dhcpd
systemctl stop dhepd
2、集中管理(商场)xinetd
vim /etc/xinetd.ditftp
disable = no
systemctl start tftp
四:修复文件系统:扫盘:
Ext4:fsck -y -t ext4 /dev/sdb1
Xfs: xfs_repair /dev/sdb1
五:服务控制及优化启动
1、系统服务控制
(1)常用方法:
·/etc/rc.d/init.d/ 服务名称 控制类型(/etc/init.d/ 是/etc/rc.d/init.d/的快捷方式)
【推荐使用上述方法】
·service 服务名称 控制类型
(2)常用控制类型
·start 启动
·stop 停止
·restart 重启
·reload 平滑重启,无需停止服务【常用】
·status 查看状态
五:优化启动过程:
(1)ntsysv 工具
·提供一个交互式、可视化窗口
·可以在字符终端运行
·便于集体管理多个服务
1>示例:ntsysv --level 35
六:系统服务控制
系统服务控制在CentOS系统中,各种系统服务的控制脚本默认放在(snib/systemd/system/自泉下,通过systemcti令工具可以实现对指定系统服务的控制语法格式如下systemcti控制类型服务名称service)
对于大多数系统服务来说常见的几种控制类型如下所述,
stant启动:运行指定的系统服务程序.实现服务功能。. stop(停止):终止指定的系统服务程序 .关闭相应的功能。
restat(重启) :先退出,再重新运行指定的系统服务程序。
reload (重载):不退出服务程序.只是刷新配置.在某些服务中与restat的操作相同。
status(查看状态):查看指定的系统服务的运行状态及相关信息,
查看当前系统中所已激活的系统服务:
Systemctl list-units -type=service
chkconfig工具使用方式:
chkconfig -list #列出所有服务的状态
chkconfg -list network #制出某 个服务的状态
chkconfg I-level 35]服务名称fonlof) #设置服务状态,默认2345级别
七:引导级别查看及切换
Linux 系统的运行级别
(1)查看运行级别:runlevel 命令
(2)临时切换运行级别:使用 init 命令结合 0-6 运行级别参数
八:MBR修复:
建立一个目录
挂载dev/sdb1到/backup
将MBR扇区备份
将mbr扇区毁坏
九:修复GRUB引导故障
boot/grub2/grub cfg配置文件说明:
menuentry :指定在启动菜单中显示的操作系统名称set root :指定包含内核等引导文件的/boot分区所在位置insmod :加载指定的模块到内核
linux16 :指定内核文件所在的位置,内核加载时权限为只读"ro”,并通过root=”指定根分区的设备文件位置。
initrd16 :指定启动内核所使用的临时系统镜像文件所在位置。
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount /dev/sdb1 /abc
[root@localhost ~]# dd if=/dev/sda of=/abc/sda-mbr-bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000224936 秒,2.3 MB/秒
[root@localhost ~]#cp /boot/grub2/grub.cfg /abc/grub.cfg
进入急救模式
切换到root根目录下
方法一:重建grub.cfg文件
方法二:提前备份,然后复原
grub引导程序遭到破坏
方法一:备份恢复
方法二:重建
十:/boot目录误删除:
通过chroot sysimage 切换根目录
新建临时文件挂载点 /mnt/temp,并挂载光盘
rpm -ivh /mnt/temp/Packages/kernel-3.10--force
grub2-install /dev/sda
grub2-mkconfig > /boot/grub2/grub.cfg
Sync同步数据
十一、root密码修复
1、第一种方法:
重新启动reboot
2、第二种方法:
把里面的密文删掉(用x)
十二:文件系统修复 (扫盘)
十三、空间耗尽故障
添加一块硬盘,分区格式化,挂载
[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkdir /disk
[root@localhost ~]# mount /dev/sdb1 /disk/
[root@localhost ~]# df –I
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 65536 10 65526 1% /disk
创建多个文件,耗尽容量
[root@localhost ~]# cd /disk/
[root@localhost disk]# touch {1..65526}
验证文件占用情况
[root@localhost ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 65536 65536 0 100% /disk
尝试创建文件
[root@localhost disk]# touch q
touch: 无法创建"q": 设备上没有空间
查看磁盘剩余空间
[root@localhost ~]# df -hT /disk/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext4 976M 4.3M 905M 1% /disk
修复磁盘耗尽故障
寻找0字节的文件,并删除
[root@localhost maomao]# sudo find /maomao -type f -size 0 -exec rm {} \;
改变inode节点大小
[root@localhost ~]# mv 重要数据 /root
[root@localhost ~]#umount /dev/sdb1
[root@localhost ~]#mkfs.ext4 /dev/sdb1 -N 500000
[root@localhost ~]# df -i /dev/sdb1
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 501760 11 501749 1% /aa
[root@localhost ~]# mount /dev/sdb1 /disk/
[root@localhost ~]# mv重要数据 /disk
十四、磁盘坏道故障
磁盘坏道分为逻辑坏道和物理坏道两种
dmesg
当有硬盘坏道时,通常在dmesg输出的信息中会有 Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
badblocks
adblocks 可以用来检查硬盘是否有坏道,也可以修复坏道,但仅限于逻辑坏道,物理坏道只能更换硬盘。
检查命令:
[root@localhost ~]# badblocks -s -v -o /root/bb.log /dev/sda
检查 /home 是否有坏道,则命令如下:
[root@localhost ~]# badblocks -s -v -o /root/bb-home.log /dev/mapper/centos-home
逻辑坏道修复方式
下面是badblocks在/dev/mapper/ centos-home e分区检查出的坏道列表:
217874591
217874592
217874593
217874594
217874595
先备份数据
[root@localhost ~]# dd if=/dev/mapper/centos-home skip=217874591 of=/tmp/217874591-217874595.dat count=5
修复
[root@localhost ~]# umount /dev/mapper/ centos-home(umount可能出现"Device busy"的错误, 解决方法fuser -m /home //列出使用/home的进程ID fuser -m -v -i -k /home //列出PID并kill掉进程)
修复命令:
[root@localhost ~]# badblocks -s -w /dev/mapper/ centos-home 217874595 217874591
修复后检查
[root@localhost ~]# badblocks -s -v /dev/mapper/ centos-home 217874595 217874591
恢复数据(可选)
[root@localhost ~]# dd if=/tmp/217874591-217874595.dat of=/dev/mapper/ centos-home
重新分区检查
[root@localhost ~]# badblocks -s -v -o /root/bb-home.log /dev/mapper/ centos-home
若没有坏道说明修复已完成,若有坏道可以尝试重复以上方法。
完成后重新mount分区
[root@localhost ~]# mount /dev/mapper/ centos-home
==============================================================
Linux引导与服务控制
一、Linux引导过程
1.引导过程
(1)开机自检:根据主板BIOS对CPU、内存等进行检测,成功后根据启动顺序移动系统控制权
(2)MBR引导:根据硬盘第1个扇区中MBR(主引导记录)的设置,将系统控制权传给包含系统的分区,
或者根据引导信息调用启动菜单(如GRUB)
(3)GRUB菜单:显示启动菜单用户选择,根据选项(或默认值)加载Linux内核文件,将控制权交于内核
(4)加载Linux内核:内核加载,掌控整个Linux系统运行过程;/boot存放内核文件
(5)init进程初始化:读取/sbin/init程序加载到内存中运行,完成一系列系统初始化,等待用户登录
2.Linux启动方式
(1)Centos 6:Upstart
(2)Centos 7:Systemd
二、运行级别
1.init进程
内核第一个加载程序,PID(进程的身份标记)总为1
RHEL 6采用Upstart启动方式,将初始化配置分散存放,以前全部存放在/etc/inittab配置文件中
配置文件 | 作用 |
---|---|
/etc/inittab | 配置默认运行级别 |
/etc/sysconfig/init | 控制tty终端的开启数量、终端颜色方案 |
/etc/init/rcS.conf | 加载rc.sysinit脚本,完成系统初始化任务 |
/etc/init/rc.conf | 兼容脚本,负责各运行级别的调用处理 |
/etc/init/rcS-sulogin.conf | 为单用户模式启动/sbin/sushell环境 |
/etc/init/control-alt-delete.conf | 控制终端下的Ctrl+Alt+Del热键操作 |
/etc/init/start-ttys.conf | 配置tty终端的开启数量、设备文件 |
/etc/init/tty.conf | 控制tty终端的开启 |
2./etc/inittab配置文件
vim /etc/inittab
id:3:initdefault:
标识名:运行级别:动作:开机需执行命令
0:关机;不要设置为默认
1:单用户模式;一般用于维护或救援操作
2:多用户模式;不支持网络
3:完整的多用户模式;大多数使用
4:未定义
5:图形化
6:重启;不要设置为默认
3.运行级别控制
1.runlevel //查看当前系统运行级别
N 3
上次运行级别 当前运行级别
N=从未切换运行级别
S=与1效果一样,运行级别为1
2.init <运行级别> :切换运行级别;一次生效
三、Linux服务控制
1.方式一
service 服务名称 控制类型
2.方式二
/etc/init.d/服务名称 控制类型
控制类型:
start:启动
stop:停止
restart:重启
reload:重新加载配置文件
status:查看服务状态
例:
(1)service sshd start :启动sshd远程服务
(2)/etc/init.d/ntpd restart :重启ntpd时间同步服务
(3)/etc/init.d/ntpd status :查看ntpd服务状态;is running为正在运行、is stopped为停止状态
四、服务的自启动控制
1.ntsysv:交互式控制服务的自启动状态;批量控制较常见
ntsysv --level 35 //运行级别35设置服务的自启动状态;如未使用--level选项则为当前运行级别设置
2.chkconfig:非交互式控制服务的自启动状态;控制单个服务较常使用
chkconfig --level 35 sshd { on | off } //设置sshd服务在35运行级别为开启|禁用;如未使用--level选项则为当前运行级别设置
3.chkconfig --list //查看所有服务的自启动状态
4.chkconfig --list sshd //只查看sshd服务的自启动状态
五、故障恢复
1.MBR故障
(1)备份MBR
新建硬盘,并分区挂载到/hehe/目录下
dd if=/dev/sda of=/hehe/mbr.bak bs=512 count=1 //将系统磁盘头部的512字节MBR引导拷贝到/hehe/mbr.bak
(2)模拟故障
dd if=/dev/zero of=/dev/sda bs=512 count=1 //使用/dev/zero文件覆盖掉/dev/sda的512字节头部MBR引导
(3)放入光盘,进入救援模式
(4)还原
mkdir /aa //新建目录/aa
mount /dev/sdb1 /aa //挂载/dev/sdb1到/aa
dd if=/aa/mbr.bak of=/dev/sda bs=512 count=1 //将之前备份出的/aa/mbr.bak怼到/dev/sda头部的512字节
(5)验证结果,重启查看是否能启动系统
2.GRUB菜单
#Centos 7以上(Grub2)
#chroot /mnt/sysimage
#grub-mkconfig -o /boot/grub/grub.cfg
Centos 6以下(Grub1)
(1)备份Grub文件
cp /boot/grub/grub.conf /hehe/ //将grub配置文件拷贝到/hehe/
(2)模拟故障
rm -rf /boot/grub/grub.conf //删除grub引导
(3)放入光盘,进入救援模式
(4)还原
chroot /mnt/sysimage //切换到原系统环境
#如不使用chroot
{
mkdir /aaa
mount /dev/sdb1 /aaa
cp /aaa/grub.conf /mnt/sysimage/boot/grub/
exit
}
mount /dev/sdb1 /hehe //挂载/dev/sdb1到/hehe
cp /hehe/grub.conf /boot/grub/ //将之前拷贝出的文件还原到/boot/grub
exit
reboot //退出重启系统
3.testdisk <要恢复的磁盘> //Linux下恢复分区表命令
4.root用户密码恢复
(1)GRUB菜单 --> e --> kernel一行按e --> 空格1 --> 回车 --> b //进入单用户
(2)passwd root 或 echo "密码" | passwd --stdin root //重置密码