首页 > 代码库 > grub2和systemd

grub2和systemd

  centos7全面升级了引导程序和系统管理程序,使用grub2替代了grub来引导操作系统,使用systemd替换了init管理系统程序,systemd的升级比较激进,从架构上变更init管理程序。微服务docker却希望使用docker domean管理微服务中的进程,这是一个问题。

grub2

  grub2grub之间区别主要是grub2把引导模块化了,每个驱动一个模块放置在/boot/grub2/i386-pc/目录下了。一次centos7的引导流程:post->grub2(mbr->第一个分区内部的数据->/boot/grub2/i386-pc中的驱动)->systemdgrub2的两个重要命令命令:

grub2-install --root-directory=/DIR /dev/SD*

  1. 假如有--root-directory=/DIR,就会在/DIR目录下创建/boot/grub2,并且会把*.mod*.lst*.img /usr/lib/grub/i386-pc/ 目录复制到/DIR/boot/grub2

  2. boot.img写入MBR中,把core.img写进设备的第一个扇区。

grub2-mkconfig -o /DIR

会把boot目录下的内核文件和initramfs文件对应组合起来,生成引导项。写入/DIR目录下的grub.cfg

制作一个由grub2引导的磁盘

  1. 添加一个新的硬盘到centos7

  2. 硬盘分区

fdisk /dev/sdc <<eof
n
p
1
2048
 
w
eof
  1. 格式化分区mkfs.xfs /dev/sdc1,这个分区类型取决你的系统采用的根分区类型,主要是因为想减少我们对grub.cfg文件的更改,减少定制防止出错。

  2. mount /dev/sdc1 /mnt挂载sdc1分区

  3. grub2-install--root-directory=/mnt /dev/sdc安装grub2sdc

  4. cd /boot

  5. cp vmlinuz-3.10.0-327.el7.x86_64initramfs-3.10.0-327.el7.x86_64.img /mnt/boot/复制内核和initramfs

  6. cp grub2/grub.cfg /mnt/boot/grub2复制grub.cfg文件到sdc

  7. 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

  1. 移植一些命令,这里我写了一个脚本,写在附件里。mvcomm.sh

mvcomm.sh <<eof
> vim
> bash
> cat
> halt
> mv
> cp
> q
> eof
  1. umount /mnt这一步就完成了对新磁盘的创建,就可以移植到其它虚拟机内使用了。

systemd

  init内有一个xinet程序,大家应该知道它的功能吧,帮助telnettftp等等进程监听端口。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主要使用的有startstopstatusreload-or-try-restartrestartenabledisableis-enabled

server.unit的类型主要有:

socket                 套接字

service                 服务

device                 设备

等等

总结

  这一节主要学习了grub2的安装和配置文件的生成,定制了一个以grub2引导的硬盘。其次就是systemd的部分原理和systemctl的使用,同时这也是重点


本文出自 “老王linux旅程” 博客,请务必保留此出处http://oldking.blog.51cto.com/10402759/1881685

grub2和systemd