第十二周作业

1、简述linux操作系统启动流程

centos6

  1. 加载BIOS的硬件信息,获取第一个启动设备
  2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息。
    stage1阶段:是安装时写入MBR中的,安装bootloader的最小程序,主要用来系统启动装载stage2.
    stage1.5阶段:在MBR后面的分区,能识别启动分区文件系统,是stage1和stage2的桥梁,GRUB访问/boot分区grub目录下的stage2文件,将stage2载入内存并执行
    stage2阶段:解析grub的配置文件/boot分区下的/grub/grub.conf,显示操作系统启动菜单,加载内核镜像到内存,通过/boot/initrd开头的文件建立虚拟DAMDISK虚拟文件系统,再转交kernel
    3.kernel引导阶段。
    调用虚拟根文件系统中的init,加载驱动模块初始化系统中的各种设备并做相关配置,加载并切换真正的根文件系统,协助内核呼叫进程/sbin/init程序
  3. 系统初始化阶段,核心执行init程序/etc/inittab,获取用户级别,运行系统初始脚本/etc/rc.d/rc.sysinit、完成系统初始化。
  4. init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
  5. 启动核心的外挂模块
  6. init执行运行的各个批处理文件(scripts)
  7. init执行/etc/rc.d/rc.local
  8. 执行/bin/login程序,等待用户登录
  9. 登录之后开始以Shell控制主机

CentOS 7之后版本引导顺序

  1. UEFi或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序, centos7是grub2,加载装载程序的配置文件:
    /etc/grub.d/
    /etc/default/grub
    /boot/grub2/grub.cfg
  4. 加载initramfs驱动模块
  5. 加载内核选项
  6. 内核初始化,centos7使用systemd代替init
  7. 执行initrd.target所有单元,包括挂载/etc/fstab
  8. 从initramfs根文件系统切换到磁盘根目录
  9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  10. systemd执行sysinit.target初始化系统及basic.target准备操作系统
  11. systemd启动multi-user.target下的本机与服务器服务
  12. systemd执行multi-user.target下的/etc/rc.d/rc.local
  13. Systemd执行multi-user.target下的getty.target及登录服务
  14. systemd执行graphical需要的服务

2、制作一个只运行shell的linux系统

分区并创建文件系统/dev/sdb1对应/boot /dev/sdb2对应根 /

echo -e 'n\np\n1\n\n+10G\nw\n' | fdisk /dev/sdb
echo -e 'n\np\n2\n\n\n\nw\n' | fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

挂载boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot

安装grub
grub-install --root-directory=/mnt/ /dev/sdb

准备内核和initramfs文件
cp /boot/vmlinuz-3.10.0-1062.el7.x86_64 /mnt/boot/vmlinuz
#cp /boot/initramfs-0-rescue-6599689679324c1c9dcdab93e122d08b.img  /mnt/boot/initramfs.img

建立grub.conf
vim /mnt/boot/grub/grub.conf
default=0
timeout=6
title  linux
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img


tree /mnt/boot
/mnt/boot
├── grub
│   ├── device.map
│   ├── e2fs_stage1_5
│   ├── fat_stage1_5
│   ├── ffs_stage1_5
│   ├── grub.conf
│   ├── iso9660_stage1_5
│   ├── jfs_stage1_5
│   ├── minix_stage1_5
│   ├── reiserfs_stage1_5
│   ├── stage1
│   ├── stage2
│   ├── ufs2_stage1_5
│   ├── vstafs_stage1_5
│   └── xfs_stage1_5
├── initramfs.img
├── lost+found
└── vmlinuz
2 directories, 16 files

准备根下面相关程序和库
mkdir /mnt/sysroot
mount /dev/sdb2   /mnt/sysroot
mkdir –pv /mnt/sysroot/{boot,dev,sys,proc,etc,lib,lib64,bin,sbin,tmp,var,usr,opt,home,root
,mnt,media}

#复制bash等命令和相关库文件,如:
bash,ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,tree,fdisk
mkdir /mnt/sysroot/{dev,proc,etc,sys,lib,home,root}

#准备网卡驱动
ethtool -i eth0
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version:

 modinfo -n e1000
/lib/modules/3.10.0-1062.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz

cp lib/modules/3.10.0-1062.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz  /mnt/sysroot/lib/
chroot /mnt/sysroot

准备新的虚拟机将前一虚拟机sdb硬盘对应的vmdk文件增加进去,删除原有磁盘,开机启动

3、总结systemctl管理命令及system unit文件格式

systemctl管理命令

#语法
systemctl COMMAND name.service
#启动
systemctl start name.service
#停止
systemctl stop name.service
#重启
systemctl restart name.service
#查看状态
systemctl status name.service
#禁止自动和手动启动
systemctl mask name.service
#取消禁止
systemctl unmask name.service
#查看某服务当前激活与否的状态:
systemctl is-active name.service
#查看所有已经激活的服务:
systemctl list-units --type|-t service
#查看所有服务:
systemctl list-units --type service --all|-a
#设定某服务开机自启,相当于chkconfig name on
systemctl enable name.service
#设定某服务开机禁止启动:相当于chkconfig name off
systemctl disable name.service
#查看所有服务的开机自启状态,相当于chkconfig --list
systemctl list-unit-files --type service
#用来列出该服务在哪些运行级别下启用和禁用:chkconfig –list name
ls /etc/systemd/system/*.wants/name.service
#查看服务是否开机自启:
systemctl is-enabled name.service
#列出失败的服务
systemctl --failed --type=service
#开机并立即启动或停止
systemctl enable --now postfix
systemctl disable  --now postfix
#查看服务的依赖关系:
systemctl list-dependencies name.service
#杀掉进程:
systemctl kill unitname
#重新加载配置文件
systemctl daemon-reload
#关机
systemctl halt、systemctl poweroff
#重启:
systemctl reboot
#挂起:
systemctl suspend
#休眠:
systemctl hibernate
#休眠并挂起:
systemctl hybrid-sleep

unit 格式说明:
1、以 “#” 开头的行后面的内容会被认为是注释
2、相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
3、时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明

service unit file文件通常由三部分组成:

1、[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
2、[Service]:与特定类型相关的专用选项;此处为Service类型
3、[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项

Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系

Service段的常用选项:
1、Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
2、EnvironmentFile:环境配置文件
3、ExecStart:指明启动unit要运行命令或脚本的绝对路径
4、ExecStartPre: ExecStart前运行
5、ExecStartPost: ExecStart后运行
6、ExecStop:指明停止unit要运行的命令或脚本
7、Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
8、PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务

注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启

systemctl daemon-reload

4、破解centos7 密码

方法一:
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,添加内核参数rd.break
按ctrl-x启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root

方法二:
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,改为rw init=/sysroot/bin/sh
按ctrl-x启动
chroot /sysroot
passwd root

你可能感兴趣的:(第十二周作业)