首页 > 代码库 > grub2和systemd
grub2和systemd
centos7全面升级了引导程序和系统管理程序,使用grub2替代了grub来引导操作系统,使用systemd替换了init管理系统程序,systemd的升级比较激进,从架构上变更init管理程序。微服务docker却希望使用docker domean管理微服务中的进程,这是一个问题。
一 grub2
grub2和grub之间区别主要是grub2把引导模块化了,每个驱动一个模块放置在/boot/grub2/i386-pc/目录下了。一次centos7的引导流程:post->grub2(mbr->第一个分区内部的数据->/boot/grub2/i386-pc中的驱动)->systemd。grub2的两个重要命令命令:
grub2-install --root-directory=/DIR /dev/SD*
假如有--root-directory=/DIR,就会在/DIR目录下创建/boot/grub2,并且会把*.mod、*.lst、*.img从 /usr/lib/grub/i386-pc/ 目录复制到/DIR/boot/grub2
把boot.img写入MBR中,把core.img写进设备的第一个扇区。
grub2-mkconfig -o /DIR
会把boot目录下的内核文件和initramfs文件对应组合起来,生成引导项。写入/DIR目录下的grub.cfg
制作一个由grub2引导的磁盘
添加一个新的硬盘到centos7
硬盘分区
fdisk /dev/sdc <<eof n p 1 2048 w eof
格式化分区mkfs.xfs /dev/sdc1,这个分区类型取决你的系统采用的根分区类型,主要是因为想减少我们对grub.cfg文件的更改,减少定制防止出错。
mount /dev/sdc1 /mnt挂载sdc1分区
grub2-install--root-directory=/mnt /dev/sdc安装grub2到sdc
cd /boot
cp vmlinuz-3.10.0-327.el7.x86_64initramfs-3.10.0-327.el7.x86_64.img /mnt/boot/复制内核和initramfs
cp grub2/grub.cfg /mnt/boot/grub2复制grub.cfg文件到sdc
vim /mnt/boot/grub2/grub.cfg更改第一次linux16为以下格式
linux16 /boot/vmlinuz-3.10.0-327.el7.x86_64 root=/dev/sda1rw init=/bin/bash selinux=0
移植一些命令,这里我写了一个脚本,写在附件里。mvcomm.sh
mvcomm.sh <<eof > vim > bash > cat > halt > mv > cp > q > eof
umount /mnt这一步就完成了对新磁盘的创建,就可以移植到其它虚拟机内使用了。
二systemd
init内有一个xinet程序,大家应该知道它的功能吧,帮助telnet、tftp等等进程监听端口。systemd就不需要这个进程了,因为它的运行模式很类似xinet,并且很过分的把所有的进程的监听和提供服务的进程拆分了,也就是把socket和进程分离。centos7开机之所以那么快主要就是因为这个原因,系统虽然启动了,端口监听也启动了但是真正提供服务的进程没有启动起来,只有端口被访问的时候才会启动。
systemd把所有的服务都定义成了对象,假如我们调用httpd服务,必须通过systemd调用,这就有一个问题了,centos6上的时候我们调用服务是通过脚本调用的,并且脚本我们可以随意定制调用服务的参数。而systemd是一个已经编译好的二进制程序,我们完全没有了议价能力只能使用systemd定义调用接口,我们只能使用有限的几个参数,这貌似有点问题,虽然systemd是开源的,但是定制成本远远大于我们写脚本。centos7我们依然可以使用service命令。
systemd的配置文件
配置文件主要分为三部分:
1 第一部分/usr/lib/system/system/,主要存储每个服务的启动停止脚本。
2 第二部分/run/system/system/,系统执行过程中所产生的服务脚本,比上一个目录优先。
3 第三部分别/etc/system/system,管理员建立的脚本,实现类似/etc/rc.d/rc#.d/sXX的功能,比上一个目录更优先。
这三部分文件我们都可以更改,更改后需要是systemctl deamon-reload命令重新加载文件使配置生效。
systemctl命令的使用
这个命令在centos7上具有非常强大的补全功能,双击tab可以显示大部分的命令。systemctl的命令格式
systemctl ctrlcommserver.unit
ctrlcomm主要使用的有start,stop,status,reload-or-try-restart,restart,enable,disable,is-enabled
server.unit的类型主要有:
socket 套接字
service 服务
device 设备
等等
总结
这一节主要学习了grub2的安装和配置文件的生成,定制了一个以grub2引导的硬盘。其次就是systemd的部分原理和systemctl的使用,同时这也是重点
本文出自 “老王linux旅程” 博客,请务必保留此出处http://oldking.blog.51cto.com/10402759/1881685
grub2和systemd