第1章 CentOS系统启动技术介绍
1.1 Sysvinit技术
- 特点:
- 系统第1个进程(pid=1)为init;
- Init进程是所有进程的祖先,不可kill;
- 大多数Linux发行版的init系统是和SystemV相兼容的,被称为sysvinit。
- 代表系统:CentOS5、CentOS6
- 应用场景:用于服务器时代,对桌面端的支持不是很好,很多办公娱乐软件都没有。
- 优点:SysVinit运行非常良好,概念简单清晰,它主要依赖于Shell脚本。
- 缺点:
- 按照一定顺序执行导致启动太慢。
- 很容易hang住:fstab与nfs挂载问题
- 未来的趋势:个人PC机和移动平台,需要便捷、快的系统。
1.2 Upstart技术
CentOS6采用了Upstart技术代替sysVinit进行引导,Upstart对rc.sysinit脚本做了大量的优化,缩短了系统初始化时的启动时间。但是CentOS6为了简便管理员的操作,upstart的很多特性并没有凸显或者直接不支持,因此在 CentOS6中的服务启动脚本还是以原来SysV的形式提供的,所以我们依然采用 SysVinit的图来讲CentOS6的系统初始化过程。(initctl)
代表系统: CentOS6 ,Ubuntu14,从CentOS7,Ubuntu15开始使用systemd
1.3 Systemd技术
- 特点:
- 新系统都会采用的技术(RedHat7,CentOS7,Ubuntu15等)
- 设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度
- 和 Sysvinit 兼容,降低迁移成本
- 优点:并行启动。
提示:三种技术的区别:http://0pointer.de/blog/projects/why.html
- 并发启动需要解决的三个问题:
- 解决 socket 依赖/端口依赖
- 解决 D-Bus依赖:采用了D-Bus作为程序之间的通信工具,类似消息队列,可以缓存信息(同步/异步的问题)。
- 解决文件系统依赖:类似autofs机制
1.4 三种启动技术对比示意图
第2章 系统初始化优化
2.1 更新yum源
# CentOS 7最小化安装后没有wget命令,所以使用curl命令更新阿里云yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.2 使用本地yum仓库
echo "10.0.0.90 mirrors.aliyun.com" >> /etc/hosts
2.3 安装常用软件
yum install -y vim wget bash-completion lrzsz nmap nc tree htop net-tools nethogs
- 命令说明:
- bash-completion:可以让TAB键补全所有命令和参数
- net-tools:包含ifconfig、netstat、route等常用网络命令
2.4 关闭防火墙
systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld.service # 禁止防火墙开机自启动 systemctl is-enabled firewalld.service # 查看防火墙状态
2.5 关闭SELinux
sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
2.6 系统开机项优化
systemctl list-unit-files | grep enable # 查看开机自启动项
# 优化开机自启动项 for sername in `systemctl list-unit-files | egrep "abrt*|atd|auditd|chronyd|kdump|lvm2*|mdmonitor|microcode|postfix" | awk '{print $1}'`;do systemctl disable $sername;done
提示:画X的为可以关闭开启自启动的程序。
第3章 CentOS7和CentOS6的区别
3.1 区别1:文件系统
- CentOS6:CentOS6默认文件系统:ext4
- CentOS7:CentOS7默认文件系统:xfs:专为大数据、大文件设计,可以加快大容量磁盘格式化速度等。
3.2 区别1:网卡名称eth0和enp5s0
传统上,Linux的网络接口名称为eth0、eth1…,但这些名称并不一定符合实际的硬件插槽等,这可能会导致不同的网络配置错误(例如,由无意的接口改名引起的禁止接口)。基于MAC地址的udev规则在虚拟化的环境中并不有用,这里的MAC地址如端口数量一样无常。
CentOS6/RHEL6引入了一致和可预测的网络设备命名网络接口的方法。这些特性可以唯一地确定网络接口的名称以使定位和区分设备更容易,并且在这样一种方式下,无论是否重启机器、过了多少时间、 或者改变硬件,其名字都是持久不变的。然而,这种命名规则并不是默认在CentOS6/RHEL6上开启。
这种可预见的命名规则变成了默认。根据这一规则,接口名称被自动基于固件, 拓扑结构和位置信息来确定。现在即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。
3.2.1 CentOS7修改网卡名称为eth0方法
- 全新安装CentOS7时的方法:
选中【Install CentOS 7】后按TAB键显示命令行模式,输入" net.ifnames=0 biosdevname=0",直接回车即可开始安装
- 已经安装完系统再修改的方法:
参考:http://oldboy.blog.51cto.com/2561410/1722101
- Cobbler批量安装时的方法:
3.3 区别2:网络配置相关命令
3.3.1 ip、ss替代ifconfig、netstat命令
yum -y install iproute # 安装ip命令 yum -y install net-tools # 安装ifconfig、netstat命令
3.3.2 nmtui替代setup命令
yum -y install setuptool # 废弃的命令
提示:安装好之后会发现里面什么都没有,这只是一个图形工具,需要用到的网络服务,防火墙,系统服务等需要另外再安装。安装好setup tools工具之后,需要安装工具组件如ntsysv(系统服 务),system-config-networktui(网络服务),iptables(防火墙配置)等。只需要部分的也可以只安装需要的也行。
3.4 区别3:主机名等配置文件
3.4.1 修改主机名
- CentOS6方法:
hostname CentOS7 # 临时生效 编辑/etc/hostname # 永久生效
- CentOS7方法:
[root@CentOS7 ~]# hostnamectl set-hostname CentOS7 # 临时/永久生效
3.4.2 修改字符集
- CentOS6方法:
[root@CentOS6 ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"
- CentOS7方法:
# 查看字符集 [root@CentOS7 ~]# cat /etc/locale.conf LANG="en_US.UTF-8" [root@CentOS7 ~]# localectl status System Locale: LANG=en_US.UTF-8 VC Keymap: us X11 Layout: us
# 临时/永久更改字符集 [root@CentOS7 ~]# localectl set-locale LANG=zh_CN.UTF-8
3.4.3 查看系统版本号
- CentOS6方法:
[root@CentOS6 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)
- CentOS7方法:
[root@CentOS7 ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
3.5 区别4:兼容的 /etc/rc.local
[root@CentOS7 ~]# vim /etc/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local
[root@CentOS7 ~]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Oct 19 16:30 /etc/rc.local -> rc.d/rc.local
若想使用rc.local文件开机自启动程序需要将此文件增加执行权限:
[root@CentOS7 ~]# chmod +x /etc/rc.d/rc.local [root@CentOS7 ~]# ll /etc/rc.local [root@centos-text ~]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Oct 20 10:45 /etc/rc.local -> rc.d/rc.local
3.6 区别5:运行级别
- CentOS6方法:
[root@CentOS6 ~]# vim /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
- CentOS7方法:
[root@CentOS7 ~]# vim /etc/inittab # inittab is no longer used when using systemd. # 提示已经不支持此文件修改运行级别 # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To view current default target, run: # systemctl get-default # # To set a default target, run: # systemctl set-default TARGET.target #
# 查看运行级别 [root@CentOS7 ~]# systemctl get-default multi-user.target [root@CentOS7 ~]# ll -h /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 Oct 20 15:11 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target # 设置运行级别 [root@CentOS7 ~]# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target. # CentOS7运行级别种类 [root@CentOS7 ~]# ls -lh /usr/lib/systemd/system/runlevel*.target lrwxrwxrwx. 1 root root 15 Oct /usr/lib/systemd/system/runlevel0.target -> poweroff.target lrwxrwxrwx. 1 root root 13 Oct /usr/lib/systemd/system/runlevel1.target -> rescue.target lrwxrwxrwx. 1 root root 17 Oct /usr/lib/systemd/system/runlevel2.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Oct /usr/lib/systemd/system/runlevel3.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Oct /usr/lib/systemd/system/runlevel4.target -> multi-user.target lrwxrwxrwx. 1 root root 16 Oct /usr/lib/systemd/system/runlevel5.target -> graphical.target lrwxrwxrwx. 1 root root 13 Oct /usr/lib/systemd/system/runlevel6.target -> reboot.target
3.7 区别6:systemd一统天下
所有可用的单元文件(服务等)都存放在/usr/lib/systemd/system/和/etc/systemd/system/目录内(后者优先级更高)。
[root@CentOS7 ~]# ls /usr/lib/systemd/system abrt-ccpp.service rescue.target.wants abrtd.service rhel-autorelabel-mark.service abrt-oops.service rhel-autorelabel.service ...省略部分输出内容... [root@CentOS7 ~]# ls /etc/systemd/system basic.target.wants default.target.wants dbus-org.freedesktop.NetworkManager.service getty.target.wants dbus-org.freedesktop.nm-dispatcher.service multi-user.target.wants default.target system-update.target.wants
3.8 区别7:管理服务
- CentOS6方法:
chkconfig service /etc/init.d/
- CentOS7方法:
systemctl:融合service和chkconfig的功能于一体,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务。
提示:systemctl start crond.service和systemctl start crond效果一样。
3.9 查看看系统启动时间
3.9.1 查看系统总共启动时间
[root@centos-text ~]# systemd-analyze time Startup finished in 1.489s (kernel) + 3.026s (initrd) + 23.998s (userspace) = 28.513s
3.9.2 查看每个进程启动时间
[root@centos-text ~]# systemd-analyze blame 9.043s dev-sda3.device 5.220s NetworkManager-wait-online.serv 2.563s abrt-ccpp.service 2.335s ldconfig.service 2.305s systemd-hwdb-update.service 2.030s tuned.service 2.021s postfix.service 2.005s sshd-keygen.service 1.661s systemd-logind.service 1.633s rhel-dmesg.service 1.521s systemd-user-sessions.service 1.460s network.service 1.312s systemd-udevd.service 1.243s systemd-tmpfiles-setup-dev.serv 1.083s rsyslog.service 1.013s auditd.service 843ms rhel-readonly.service 787ms boot.mount 741ms polkit.service 689ms rhel-import-state.service 652ms NetworkManager.service 433ms systemd-journald.service 404ms systemd-journal-catalog-update. 373ms dev-disk-by\x2duuid-220be57c\x2 373ms plymouth-read-write.service 319ms dev-mqueue.mount 302ms systemd-remount-fs.service 301ms sys-kernel-debug.mount 298ms dev-hugepages.mount 257ms wpa_supplicant.service 198ms systemd-sysctl.service 187ms systemd-update-done.service 152ms systemd-journal-flush.service 114ms kmod-static-nodes.service 89ms systemd-tmpfiles-setup.service 84ms systemd-random-seed.service 65ms systemd-udev-trigger.service 59ms systemd-vconsole-setup.service 57ms systemd-fsck-root.service 45ms systemd-update-utmp.service 36ms plymouth-quit.service 28ms plymouth-quit-wait.service 22ms systemd-tmpfiles-clean.service 21ms plymouth-start.service 6ms systemd-update-utmp-runlevel.se 2ms sys-kernel-config.mount
3.9.3 将启动时间绘制成图表
[root@centos-text ~]# systemd-analyze plot > bootime.svg [root@centos-text ~]# sz bootime.svg

第4章 CentOS7相关学习文档
