RHEL7学习笔记6:系统启动过程

1 RHEL6引导过程

RHEL启动过程演变:Sysvinit、Upstart、systemd

RHEL7引导过程:

1.POST

2.BIOS

3.GRUB

4.systemd

2 引导过程中的文件

2.1./boot/grub2/grub.cnf //启动引导器配置文件

2.2.grub2加载内核和initramfs文件

2.3.内核初始化,初始化结束后把控制权交给/init(此文件位于initramfs文件中)

2.4.initramfs中的/init加载硬盘驱动、文件系统驱动等,挂载硬盘分区,然后把根文件 系统切换到硬盘上的根分区,再运行/sbin/init程序。

2.5./sbin/init程序负责系统的初始化、各种服务的运行、用户的登陆等等。

2.6.如果需要运行图形界面,则/sbin/init程序会运行 Display Manager,在RHEL 中是 gdm释放initramfs文件

#/usr/lib/dracut/skipcpio initramfs-$(uname -r).img | zcat | cpio -imd

3 手工引导系统

/etc/grub2.cfg、/boot/grub2/grub.cfg

/etc/grub2.cfg -> …/boot/grub2/grub.cfg

e 进去编辑模式
空格rd.break空格 console=tty Ctrl+x 启动系统 //破解密码
#mount
#mount -o remount,rw /sysroot
#chroot /sysroot
#echo 123456 | passwd --stdin root
#touch /.autorelabel //使seliunx生效
Ctrl+d
#reboot
=================破解密码2=
空格init=/bin/sh空格 console=tty,并且把rhgb 和quiet删掉
#mount
#mount -o remount,rw /sysroot
#passwd
#touch /.autorelabel //使seliunx生效
Ctrl+d
#reboot

c 命令行模式

grub> set root=(hd0,1)

grub> linux16 /vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/sda3

grub> initrd16 /initramfs-3.10.0-123.el7.x86_64.img

grub> boot

3.1. grub2命令行下手工加载kernel启动系统

grub>set root=(hd0,1)

grub>linux16 /vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/sda3

grub>initrd16 /initramfs-3.10.0-123.el7.x86_64.img

grub>boot

3.2. 破解管理员口令

1)rd.break方法

如果是kvm虚拟机还要加上console=tty,crtl+x启动

mount -o remount,rw /sysroot/

chroot /sysroot

echo 123456 | passwd --stdin root

touch /.autorelabel 这句是为了selinux生效

ctrl+d,reboot

2)init方法

init=/bin/sh console=tty //并去掉命令行的rhgb quiet。

挂载文件系统为可写模式:mount -o remount,rw /

运行passwd,并按提示修改root密码

如何启用了selinux,必须运行以下命令:touch /.autorelabel,否则将无法正常启动 系统。

reboot。

3.3. 内核模块管理:lsmod、modprobe、insmod、modinfo

4 对引导过程进行debug

4.1. Rescue Mode

光盘引导进入troubleshooting

4.2. 重新安装grub到MBR

#grub2-install --root-directory=/mnt/sysimage /dev/sda

#exit

5 认识systemd

按需启动服务,减少系统资源消耗;尽可能并行启动进程,减少系统启动等待时间。

5.1. 系统初始化要做很多工作,如挂载文件系统,配置交换分区等,启动sshd服务等,systemd把每一个工作作为一个unit,每一个unit 对应一个配置文件。systemd 又 将 unit 分成不同的类型,每一种类型的 unit 其配置文件具有不同的扩展名,常见的 unit 类型有systemd.unit(5)。

service 对应一个后台服务进程,如 httpd、mysqld 等;

soket 对应一个套接字,之后对应到一个service,类似于xinetd的功能;

device 对应一个用 udev 规则标记的设备;

mount 对应系统中的一个挂载点,systemd 据此进行自动挂载,为了与 SysVinit 兼容, 目前 systemd 自动处理/etc/fstab 并转化为 mount;

automount 自动挂载点;

swap 配置交换分区;

target 配置单元的逻辑分组,包含多个相关的配置单元,可以当成是SysVinit 中的运 行级;

timer 定时器,用来定时触发用户定义的操作,它可以用来取代传统的atd,crond 等;

Unit文件的位置:

/etc/systemd/system/* //优先级最高

/run/systemd/system/*

/usr/lib/systemd/system/* //优先级最低

systemd的特性有:

1)支持并行化任务;

2)同时采用socket式与D-Bus总线式激活服务;

3)按需启动守护进程(daemon);

4)利用 Linux 的 cgroups 监视进程;

5)支持快照和系统恢复;

6)维护挂载点和自动挂载点;

7)各服务间基于依赖关系进行精密控制。

5.2. systemd 启动后,先根据default.target配置文件中的规则初始化系统。default.target 是一个链接,如果它链接到multi-user.target,则启动字符界面,如果它链接到 graphical.target,则启动图形界面。这个和传统的 SysVinit 中的运行级别有一定的相似 性。systemd 中的target 很多,它和传统的 SysVinit 中的运行级别对应关系如下,

target与运行级别:

systemctl list-units //列出所有单元

systemctl list-units --type=target --all //列出所有

target单元 systemctl list-unit-files //列出所有单元文件

可以通过内核参数更改默认启动级别:

systemd.unit=multi-user.target (大致相当于级别3)

systemd.unit=rescue.target (大致相当于级别1)

systemd.unit= rescue.target

systemd.unit= emergency.target

5.3. systemctl管理target

5.3.1 切换到不同的target(需target支持,unit文件中有AllowIsolate=yes)

systemctl isolate graphical.target

5.3.2 查看默认目标

systemctl get-default

5.3.3 改变默认目标

systemctl set-default multi-user.target

5.4. systemctl管理服务

5.4.1 查看服务是否启动

systemctl is-active dnsmasq.service

#systemctl is-active vsftpd

active

systemctl status dnsmasq.service

#systemctl status vsftpd

vsftpd.service - Vsftpd ftp daemon

Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)

Active: active (running) since Sun 2015-11-08 12:27:48 CST; 2s ago

Process: 6359 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)

Main PID: 6360 (vsftpd)

CGroup: /system.slice/vsftpd.service
└─6360 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Nov 08 12:27:48 yanxf systemd[1]: Starting Vsftpd ftp daemon…

Nov 08 12:27:48 yanxf systemd[1]: Started Vsftpd ftp daemon.

5.4.2 启动服务

systemctl start dnsmasq.service

5.4.3 停止服务

systemctl stop dnsmasq.service

5.4.4 是否是引导时启动

systemctl is-enabled dnsmasq.service

#systemctl is-enabled vsftpd

disabled

5.4.5 让服务在引导时运行

systemctl enable dnsmasq.service

#systemctl enable vsftpd

ln -s ‘/usr/lib/systemd/system/vsftpd.service’ ‘/etc/systemd/system/multi-user.target.wants/vsftpd.service’

5.4.6 取消服务在引导时运行

systemctl disable dnsmasq.service

#systemctl disable vsftpd

rm ‘/etc/systemd/system/multi-user.target.wants/vsftpd.service’

5.4.7 管理远程系统

systemctl status sshd -H root@1.2.3.4

#systemctl status vsftpd 127.0.0.1

vsftpd.service - Vsftpd ftp daemon

Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled)

Active: active (running) since Sun 2015-11-08 12:27:48 CST; 14min ago

Main PID: 6360 (vsftpd)

CGroup: /system.slice/vsftpd.service

└─6360 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Nov 08 12:27:48 yanxf systemd[1]: Starting Vsftpd ftp daemon…

Nov 08 12:27:48 yanxf systemd[1]: Started Vsftpd ftp daemon.

127.0.0.1.service

Loaded: not-found (Reason: No such file or directory)

Active: inactive (dead)

5.4.8 查看失败的服务

systemctl --failed --type=service

#systemctl --failed --type=service

UNIT LOAD ACTIVE SUB DESCRIPTION

rhnsd.service loaded failed failed LSB: Starts the Spacewalk Daemon

rngd.service loaded failed failed Hardware RNG Entropy Gatherer Daemon

LOAD = Reflects whether the unit definition was properly loaded.

ACTIVE = The high-level unit activation state, i.e. generalization of SUB.

SUB = The low-level unit activation state, values depend on unit type.

2 loaded units listed. Pass --all to see loaded but inactive units, too.

To show all installed unit files use ‘systemctl list-unit-files’.

5.4.9 查看单元的依赖关系

systemctl list-dependencies graphical.target

#systemctl list-dependencies graphical.target

graphical.target

├─accounts-daemon.service

├─firstboot-graphical.service

├─gdm.service

├─iprdump.service

├─iprinit.service

├─iprupdate.service

├─network.service

├─rhnsd.service

├─rtkit-daemon.service

├─systemd-readahead-collect.service

├─systemd-readahead-replay.service

├─systemd-update-utmp-runlevel.service

└─multi-user.target

├─abrt-ccpp.service

├─abrt-oops.service

├─abrt-vmcore.service

├─abrt-xorg.service

├─abrtd.service

├─atd.service

├─auditd.service

├─avahi-daemon.service

├─brandbot.path

├─chronyd.service

├─crond.service

├─cups.path

├─dbus.service

├─hypervkvpd.service

├─hypervvssd.service

├─iprdump.service

├─iprinit.service

├─iprupdate.service

├─irqbalance.service

├─ksm.service

├─ksmtuned.service

├─libstoragemgmt.service

├─libvirtd.service

├─mdmonitor.service

├─ModemManager.service

├─network.service

├─NetworkManager.service

├─plymouth-quit-wait.service

├─plymouth-quit.service

├─postfix.service

├─rhnsd.service

├─rhsmcertd.service

├─rngd.service

├─rpcbind.service

├─rsyslog.service

├─smartd.service

├─sshd.service

├─sysstat.service

├─systemd-ask-password-wall.path

├─systemd-logind.service

├─systemd-update-utmp-runlevel.service

├─systemd-user-sessions.service

├─tuned.service

├─vmtoolsd.service

├─vsftpd.service

├─basic.target

│ ├─alsa-restore.service

│ ├─alsa-state.service

│ ├─firewalld.service

│ ├─microcode.service

│ ├─rhel-autorelabel-mark.service

│ ├─rhel-autorelabel.service

│ ├─rhel-configure.service

│ ├─rhel-dmesg.service

│ ├─rhel-loadmodules.service

│ ├─paths.target

│ ├─slices.target

│ │ ├─-.slice

│ │ └─system.slice

│ ├─sockets.target

│ │ ├─avahi-daemon.socket

│ │ ├─cups.socket

│ │ ├─dbus.socket

│ │ ├─dm-event.socket

│ │ ├─iscsid.socket

│ │ ├─iscsiuio.socket

│ │ ├─lvm2-lvmetad.socket

│ │ ├─rpcbind.socket

│ │ ├─systemd-initctl.socket

│ │ ├─systemd-journald.socket

│ │ ├─systemd-shutdownd.socket

│ │ ├─systemd-udevd-control.socket

│ │ └─systemd-udevd-kernel.socket

│ ├─sysinit.target

│ │ ├─dev-hugepages.mount

│ │ ├─dev-mqueue.mount

│ │ ├─dmraid-activation.service

│ │ ├─iscsi.service

│ │ ├─kmod-static-nodes.service

│ │ ├─lvm2-monitor.service

│ │ ├─multipathd.service

│ │ ├─plymouth-read-write.service

│ │ ├─plymouth-start.service

│ │ ├─proc-sys-fs-binfmt_misc.automount

│ │ ├─sys-fs-fuse-connections.mount

│ │ ├─sys-kernel-config.mount

│ │ ├─sys-kernel-debug.mount

│ │ ├─systemd-ask-password-console.path

│ │ ├─systemd-binfmt.service

│ │ ├─systemd-journal-flush.service

│ │ ├─systemd-journald.service

│ │ ├─systemd-modules-load.service

│ │ ├─systemd-random-seed.service

│ │ ├─systemd-sysctl.service

│ │ ├─systemd-tmpfiles-setup-dev.service

│ │ ├─systemd-tmpfiles-setup.service

│ │ ├─systemd-udev-trigger.service

│ │ ├─systemd-udevd.service

│ │ ├─systemd-update-utmp.service

│ │ ├─systemd-vconsole-setup.service

│ │ ├─cryptsetup.target

│ │ ├─local-fs.target

│ │ │ ├─-.mount

│ │ │ ├─boot.mount

│ │ │ ├─rhel-import-state.service

│ │ │ ├─rhel-readonly.service

│ │ │ ├─systemd-fsck-root.service

│ │ │ ├─systemd-remount-fs.service

│ │ │ └─yanxf.mount

│ │ └─swap.target

│ │ ├─dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart5.swap

│ │ ├─dev-disk-by\x2duuid-10da4686\x2d0bac\x2d4303\x2d940c\x2d878517629325.swap

│ │ ├─dev-disk-by\x2duuid-10da4686\x2d0bac\x2d4303\x2d940c\x2d878517629325.swap

│ │ └─dev-sda5.swap

│ └─timers.target

│ └─systemd-tmpfiles-clean.timer

├─getty.target

│ └─getty@tty1.service

├─nfs.target

│ ├─nfs-lock.service

│ ├─proc-fs-nfsd.mount

│ ├─rpcbind.service

│ └─var-lib-nfs-rpc_pipefs.mount

└─remote-fs.target

5.5. systemctl电源管理

5.5.1 关机

systemctl poweroff

5.5.2 重启

systemctl reboot

5.6. 创建和修改systemd单元文件

5.6.1 创建第二个sshd服务的例子

拷贝sshd_config文件

cp /etc/ssh/sshd_config /etc/ssh/sshd-second_config

5.6.2 编辑sshd-second_config文件,修改22222的端口,和PID文件

Port 22222

PidFile /var/run/sshd-second.pid

5.6.3 拷贝单元文件:

cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd-second.service

5.6.4 编辑单元文件sshd-second.service

cat sshd-second.service

[Unit]

Description=OpenSSH server second instance daemon

After=syslog.target network.target auditd.service sshd.service

[Service]

Type=forking

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -f /etc/ssh/sshd-second_config $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

5.6.5 如果使用SELinux,添加tcp端口,负责第二sshd服务的端口就会被拒绝绑定

semanage port -a -t ssh_port_t -p tcp 22222

5.6.6 设置开机启动并测试:

systemctl enable sshd-second.service

systemctl start sshd-second

ssh -p 22222 localhost

5.6.7 修改已经存在的单元文件

cd /etc/systemd/system

mkdir sshd-second.service.d

cd sshd-second.service.d

cat custom.conf

[Service]

ExecStartPost=/usr/local/bin/custom.sh

/usr/local/bin/custom.sh文件内容如下:

cat /usr/local/bin/custom.sh

#!/bin/bash

date >> /tmp/date.log

systemctl restart sshd-second

5.6.8 查看某一个目标需要哪些进程服务

systemctl show sshd-second

systemctl show multi-user.target

systemctl show multi-user.target -p Wants

转载:http://blog.sina.com.cn/s/blog_80b2b6950102vx71.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值