鸿 网 互 联 www.68idc.cn

Linux启动管理

来源:互联网 作者:佚名 时间:2022-07-19 10:48
1、Linux启动管理 1.1 CentOS 6 启动流程 1、加载BIOS的硬件信息,获取第一个启动设备 2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3、加载核心操作系统的核心信息,核心开

1、Linux启动管理

1.1 CentOS 6 启动流程

1、加载BIOS的硬件信息,获取第一个启动设备

2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备

4、核心执行init程序,并获取默认的运行信息

5、init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统

6、启动核心的外挂模块

7、init执行运行的各个批处理文件scripts

8、init执行/etc/rc.d/rc.local

9、执行/bin/login程序,等待用户登录

10、登录之后开始以Shell控制主机

1.2 CentOS 7 之后版本引导顺序

1、UEFi或BIOS初始化,运行POST开机自检

2、选择启动设备

3、引导装载程序,centos7是grub2,加载装载程序的配置文件:

/etc/grub.d/ /etc/default/grub /etc/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需要的服务

通过systemd-analyze工具可以了解启动的详细过程

1.3 CentOS启动过程总结

/sbin/init --> (/etc/inittab) --> 设置默认运行级别--> 运行系统初始脚本/etc/rc.d/rc.sysinit、完成系统初始化--> 启动需要启动服务(关闭对应下需要关闭的服务)/etc/rc#.d/Sxxxx,/etc/rc.d/rc.local--> 设置登录终端

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

2.1 准备启动设备分区并创建文件系统

#添加一块启动硬盘,分两个分区,/dev/sdb1对应/boot,/dev/sdb2对应根 / [root@Centos7 ~]#echo '- - -' > /sys/class/scsi_host/host0/scan [root@Centos7 ~]#echo '- - -' > /sys/class/scsi_host/host1/scan [root@Centos7 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan [root@Centos7 ~]#fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x8a3f9475. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (2099200-41943039, default 2099200): Using default value 2099200 Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): Using default value 41943039 Partition 2 of type Linux and of size 19 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@Centos7 ~]#fdisk -l Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 41943039 19921920 83 Linux [root@Centos7 ~]#mkfs.ext4 /dev/sdb1 [root@Centos7 ~]#mkfs.ext4 /dev/sdb2

2.2 挂载boot

#子目录必须为boot [root@Centos7 mnt]#mkdir /mnt/sysimage [root@Centos7 mnt]#mkdir /mnt/sysimage/boot [root@Centos7 mnt]#mount /dev/sdb2 /mnt/sysimage/ [root@Centos7 mnt]#mount /dev/sdb1 /mnt/sysimage/boot/ [root@Centos7 mnt]#df -h |grep sdb /dev/sdb2 19G 45M 18G 1% /mnt/sysimage /dev/sdb1 976M 2.6M 907M 1% /mnt/sysimage/boot

2.3 安装grub2并配置grub2文件

[root@Centos7 mnt]#grub2-install --boot-directory /mnt/sysimage/boot /dev/sdb Installing for i386-pc platform. Installation finished. No error reported. #如果是grub的grub-install,那么指定的选项是--root-directory,需要指定的路径是/mnt/sysimage而不是/mnt/sysimage/boot [root@Centos7 ~]#blkid /dev/sdb{1,2} /dev/sdb1: UUID="d63c3022-411c-41f5-819a-2f4c20d19416" TYPE="ext4" /dev/sdb2: UUID="ce15b72d-5243-424a-845a-76d1df232209" TYPE="ext4" #修改/mnt/sysimage/boot/grub2/grub.cfg文件的 "root"为/dev/sdb2的UUID值,"set root" 修改为/dev/sdb1的UUID [root@Centos7 mnt]#vim /mnt/sysimage/boot/grub2/grub.cfg

2.4 准备内核和initramfs文件

[root@Centos7 mnt]#cp /boot/vmlinuz-3.10.0-1160.el7.x86_64 /mnt/sysimage/boot/vmlinuz-3.10 [root@Centos7 mnt]#cp /boot/initramfs-3.10.0-1160.el7.x86_64.img /mnt/sysimage/boot/initramfs.img #为启动设备创建系统版本信息文件 [root@Centos7 sysimage]#cat /etc/system-release > /mnt/sysimage/etc/os-release

2.5 准备根下面相关程序和库

[root@Centos7 sysimage]#mkdir -pv /mnt/sysimage/{boot,dev,sys,proc,etc,lib,lib64,bin,sbin,tmp,var,usr,opt,home,root,mnt,media} #准备网卡驱动 [root@Centos7 sysimage]#ethtool -i ens33 driver: e1000 version: 7.3.21-k8-NAPI firmware-version: expansion-rom-version: bus-info: 0000:02:01.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no [root@Centos7 sysimage]#modinfo -n e1000 /lib/modules/3.10.0-1160.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz [root@Centos7 sysimage]#cp /lib/modules/3.10.0-1160.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz /mnt/sysimage/lib #复制bash等命令和相关库文件,使用以下脚本复制命令 如: bash,ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,tree,psree,fdisk [root@Centos7 sysimage]#cat copy_cmd.sh #!/bin/bash dest_root=/mnt/sysimage cmd_name=$1 cmd_path=$(which --skip-alias $cmd_name) [ -e $dest_root/$cmd_path ] || cp --parent -v $cmd_path $dest_root ldd $cmd_path | grep -oE "/.*" | while read libfile;do lib_dir=$(dirname $libfile) while true;do [ -e $dest_root/$libfile ] || cp -d -v --parent $libfile $dest_root libfile=$lib_dir/$(readlink $libfile) [ $? -ne 0 ] && break done done

2.6 准备新的虚拟机

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

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

3.1 systemctl管理命令

systemctl COMMAND name.service #启动 相当于service name start systemctl start name.service #停止 相当于service name stop systemctl stop name.service #重启 相当于service name restart systemctl restart name.service #查看状态 相当于service name status systemctl status name.service #开机并立即启动或停止 systemctl enable --now name.service systemctl disable --now 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 list-dependencies name.service #杀掉进程 systemctl kill unitname

3.2 service unit文件格式

unit格式说明:

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

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

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

Unit段的常用选项:

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

Service段的常用选项:

  • Type:定义影响ExecStart及相关参数的功能的unit进程启动类型

    ? 1、simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中

    ? 2、forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服? 务。原生父程序在启动结束后就会终止

    ? 3、oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中? 4、dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因? 此通常也要同时设定BusNname= 才行? 5、notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消? 息? 6、idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这? 类的daemon通常是开机到最后才执行即可的服务

  • EnvironmentFile:环境配置文件

  • ExecStart:指明启动unit要运行命令或脚本的绝对路径

  • ExecStartPre: ExecStart前运行

  • ExecStartPost: ExecStart后运行

  • ExecStop:指明停止unit要运行的命令或脚本

  • Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务

  • 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 #如果SELinux是启用的,才需要执行下面操作,如没有启动,不需要执行 touch /.autorelabel exit reboot

方法二:

启动时任意键暂停启动 按e键进入编辑模式 将光标移动linux 开始的行,改为rw init=/sysroot/bin/sh 按ctrl-x启动 chroot /sysroot passwd root #如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行 touch /.autorelabel exit reboot 【文章原创作者:美国服务器 https://www.68idc.cn 欢迎留下您的宝贵建议】
上一篇:基于Jira的运维发布平台的设计与实现
下一篇:没有了
网友评论
<