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