Linux系统管理第六周作业【Linux微职位】

1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

CentOS系统启动流程如下:

POST --> Boot Sequence(BIOS) --> Boot Loader(MBR) --> GRUB --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->

(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端

每个过程具体工作内容说明如下:

1.加电自检POST(Power On Self Test)

主机加电开机后,首先进行硬件自检。主机通电后,主板会自动读取ROM中的程序,并从CMOS中加载BIOS信息,检查各种硬件设备是否完整,如内存,硬盘、显卡及各种I/O设备等。如遇到硬件故障的话将按两种情况进行处理:对于严重故障(致命性故障)则直接停机,此时由于各种初始化操作未完成,不能给出任何提示或信号;对于非严重故障,则会给出相应的提示或声音报警信号,等待用户处理。如果没有遇到故障,则加电自检通过,将后续工作交接给BIOS处理。

2.启动顺序Boot Sequence

POST完成后,系统控制权转交到BIOS(Basic Input/Output System),BIOS通过预设的参数识别基础硬件设备,启动硬件初始化;同时按照系统启动顺序依次查找各引导设备,第一个有引导程序的设备即为本次启动用到设备(一般为本地硬盘)。BIOS完成相关工作后,将后续工作交接给MBR中的Bootloader处理。

3.启动加载BootLoader

硬盘上第0头0道第1扇区被称为MBR(Master Boot Record),即主引导记录。虽然MBR仅有512个字节,但却存放了前446个字节的启动加载器(Bootloader,其中装有GRUB)、中间64个字节的磁盘分区表(Disk Partition Table)以及最后2个字节的结束标识(Magic Number)。启动设备读取MBR中前个446字节的Bootloader寻找GRUB,接着读取MBR后的扇区来识别磁盘分区表DPT以及内核Kernel所在的区域,最后启动GRUB。

4.引导加载器GRUB(GRand Uniform Bootloader)

第1阶段(stage 1)

读取磁盘设备上第0头0道第1扇区的MBR;用来加载第2阶段, 只存放了Bootloader的部分代码

第1.5阶段(stage 1.5)

读取MBR之后的扇区,让第1阶段中的Bootloader能够识别到第2阶段所在分区上的文件系统

第2阶段(stage 2)

找到grub的配置文件(/boot/grub/grub.conf <-- /etc/grub.conf或/boot/grub2/grub.cfg),并根据其中的预设内容给用户提供一个可选择的菜单,用于选择想要启动的系统或内核版本。同时stage2即/boot/目录下还提供了Linux系统内核文件(vmlinuz文件)和虚拟文件系统文件(initramfs)等其它核心文件。

最后,GRUB把用户选定的启动系统或内核装载到内存中的特定空间中解压、展开,并把系统控制权移交给内核Kernel。

5.加载Kernel

自身初始化

探测可识别到的所有硬件设备;

加载硬件驱动程序(有可能会借助于ramdisk加载驱动);

以只读方式挂载根文件系统rootfs;

切换至根文件系统switchroot;

运行用户空间的第一个应用程序:/sbin/init

至此,内核初始化完成,后续任务交给用户空间程序,只在模式切换或系统发生中断时,内核才会参与。

6.初始化init

/sbin/init最主要的功能就是准备系统运行环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等

init程序的类型:

CentOS 5:SysV init

配置文件:/etc/inittab

CentOS 6:Upstart init

配置文件:/etc/inittab, /etc/init/*.conf

CentOS 7:Systemd systemd

配置文件:/usr/lib/systemd/system, /etc/systemd/system

7.配置文件/etc/inittab,设置默认运行级别

运行级别:为了系统的运行或维护等应用目的而设定;

0-6:7个级别

0:关机

1:单用户模式(root, 无须登录), single, 维护模式;

2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;

3:多用户模式,正常模式;文本界面;

4:预留级别;可同3级别;

5:多用户模式,正常模式;图形界面;

6:重启

8.配置文件/etc/rc.d/rc.sysinit,运行系统初始化脚本,完成系统初始化

(1) 设置主机名;

(2) 设置欢迎信息;

(3) 激活udev和selinux;

(4) 挂载/etc/fstab文件中定义的文件系统;

(5) 检测根文件系统,并以读写方式重新挂载根文件系统;

(6) 设置系统时钟;

(7) 激活swap设备;

(8) 根据/etc/sysctl.conf文件设置内核参数;

(9) 激活lvm及software raid设备;

(10) 加载额外设备的驱动程序;

(11) 清理操作;

9.对应脚本程序,关闭需要关闭的服务,启动需要启动服务

根据运行级别的不同,系统会运行/etc/rc.d/rc0.d到/etc/rc.d/rc6.d中的响应的脚本程序,来完成相应服务的关闭和启动,并执行用户自定义开机启动程序脚本/etc/rc.d/rc.local。

10.配置文件/sbin/mingetty,设置启动终端

mingetty会调用/etc/login程序,登入成功后,整个系统启动流程完成。

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

(1) 为硬盘新建两个主分区;并为其安装grub;

[[email protected] Desktop]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
         switch off the mode (command ‘c‘) and change display units to
         sectors (command ‘u‘).
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xac72d6fd
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263         524     2104515   83  Linux
Command (m for help): q
[[email protected] Desktop]# mke2fs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131648 inodes, 526120 blocks
26306 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=541065216
17 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[[email protected] Desktop]# mke2fs -t ext4 /dev/sdb2
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131648 inodes, 526128 blocks
26306 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=541065216
17 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[[email protected] Desktop]# mkdir -p /mnt/myboot /mnt/myroot
[[email protected] Desktop]# mount /dev/sdb1 /mnt/myboot/
[[email protected] Desktop]# mount /dev/sdb2 /mnt/myroot/
[[email protected] Desktop]# ls /mnt/myboot/
lost+found
[[email protected] ~]# grub-install --root-directory=/mnt/myboot /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/myboot/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install‘.
(fd0)/dev/fd0
(hd0)/dev/sda
(hd1)/dev/sdb
[[email protected] ~]# ls /mnt/myboot/boot/
grub

(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

[[email protected] ~]# cp /boot/vmlinuz-2.6.32-573.el6.x86_64 /mnt/myboot/boot/vmlinuz
[[email protected] ~]# cp /boot/initramfs-2.6.32-573.el6.x86_64.img /mnt/myboot/boot/initramfs.img
[[email protected] ~]# ls /mnt/myboot/boot/grub  initramfs.img  vmlinuz
[[email protected] ~]# mkdir -pv /mnt/myroot/{bin,dev,etc/{rc.d/init.d,sysconfig/network-
scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
mkdir: created directory `/mnt/myroot/bin‘
mkdir: created directory `/mnt/myroot/dev‘
mkdir: created directory `/mnt/myroot/etc‘
mkdir: created directory `/mnt/myroot/etc/rc.d‘
mkdir: created directory `/mnt/myroot/etc/rc.d/init.d‘
mkdir: created directory `/mnt/myroot/etc/sysconfig‘
mkdir: created directory `/mnt/myroot/etc/sysconfig/network-scripts‘
mkdir: created directory `/mnt/myroot/lib‘
mkdir: created directory `/mnt/myroot/lib/modules‘
mkdir: created directory `/mnt/myroot/lib64‘
mkdir: created directory `/mnt/myroot/proc‘
mkdir: created directory `/mnt/myroot/sbin‘
mkdir: created directory `/mnt/myroot/sys‘
mkdir: created directory `/mnt/myroot/tmp‘
mkdir: created directory `/mnt/myroot/usr‘
mkdir: created directory `/mnt/myroot/usr/local‘
mkdir: created directory `/mnt/myroot/usr/local/bin‘
mkdir: created directory `/mnt/myroot/usr/local/sbin‘
mkdir: created directory `/mnt/myroot/var‘
mkdir: created directory `/mnt/myroot/var/lock‘
mkdir: created directory `/mnt/myroot/var/log‘
mkdir: created directory `/mnt/myroot/var/run‘

(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

[[email protected] ~]# cp `ldd /bin/{bash,ls,cat} | grep -oe "/lib.*[[:space:]]" | sort -u` /mnt/myroot/lib64/
[[email protected] ~]# chroot /mnt/myroot/
bash-4.1# ls
bin  dev  etc  lib  lib64  lost+found  proc  sbin  systmp  usr  var
bash-4.1# exit
exit
[[email protected] ~]# sync

(4) 为grub提供配置文件;

[[email protected] ~]# vim /mnt/myboot/boot/grub/grub.conf
[[email protected] ~]# cat /mnt/myboot/boot/grub/grub.conf
default=0
timeout=5
title MyCentOS6
root hd(0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img

(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

[[email protected] ~]# init 6

重启后进入bios设置 调整硬盘启动顺序后保存退出。

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

1.制作一个kickstart文件

一般通过system-config-kickstart工具(默认系统不自带,需要另行安装)或手动编辑(可参考/root/anaconda-ks.cfg)来创建ks.cfg的kickstart文件

关键字段说明如下:

#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
# 安装介质,可以是光驱或指定URL路径(http或ftp)
cdrom
# Run the Setup Agent on first boot
# 首次引导禁用代理
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# 键盘样式
keyboard --vckeymap=us --xlayouts=‘us‘
# System language
# 系统语言
lang en_US.UTF-8
# Network information
network  --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
network  --hostname=localhost.localdomain
# Root password
# 加密后的root密码
rootpw --iscrypted $6$vrl5aUHW0KQkjl36$NKJRP/JGTiPV65ZAHKsa.T2jREHzBeQLUU1VHQHfLdAj2Zin4P74Mg6o96Ac3nKJnDDW2vvQ4KiSW7wT8X2tj.
# System timezone
# 系统时区
timezone Asia/Shanghai --isUtc
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
# 系统引导配置,在MBR安装引导程序
bootloader --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
# 清空所有磁盘内容并初始化
clearpart --all --initlabel
# Disk partitioning information
# 自定义分区
part /boot --fstype="ext4" --size=500
part swap --fstype="swap" --size=2000
part / --fstype="ext4" --grow --size=1
# Firewall configuration
# 防火墙设置为关闭
firewall --disabled
# SELinux configuration
# SElinux设置为禁用
selinux --disabled
# 程序包段
%packages
@base
@core
@desktop-debugging
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@multimedia
@print-client
@x11
%end

2.准备系统ISO镜像(RHEL7),并复制到自己要创建的引导镜像

[[email protected] ~]# mount /dev/cdrom /media/cdrom/
[[email protected] ~]# cd /media/cdrom/
[[email protected] ~]# mkdir /mnt/iso
[[email protected] cdrom]# ls -al
total 819
dr-xr-xr-x. 10 root root   4096 May  7  2014 .
drwxr-xr-x.  3 root root     18 Aug  2  2016 ..
dr-xr-xr-x.  4 root root   2048 May  7  2014 addons
-r--r--r--.  1 root root     48 May  7  2014 .discinfo
dr-xr-xr-x.  3 root root   2048 May  7  2014 EFI
-r--r--r--.  1 root root   8266 Apr  4  2014 EULA
-r--r--r--.  1 root root  18092 Mar  6  2012 GPL
dr-xr-xr-x.  3 root root   2048 May  7  2014 images
dr-xr-xr-x.  2 root root   2048 May  7  2014 isolinux
dr-xr-xr-x.  2 root root   2048 May  7  2014 LiveOS
-r--r--r--.  1 root root    108 May  7  2014 media.repo
dr-xr-xr-x.  2 root root 774144 May  7  2014 Packages
dr-xr-xr-x. 24 root root   6144 May  7  2014 release-notes
dr-xr-xr-x.  2 root root   4096 May  7  2014 repodata
-r--r--r--.  1 root root   3375 Apr  1  2014 RPM-GPG-KEY-redhat-beta
-r--r--r--.  1 root root   3211 Apr  1  2014 RPM-GPG-KEY-redhat-release
-r--r--r--.  1 root root   1568 May  7  2014 TRANS.TBL
-r--r--r--.  1 root root   2166 May  7  2014 .treeinfo
[[email protected] cdrom]# cp -a * /mnt/iso/
[[email protected] cdrom]# cp .discinfo /mnt/iso/

3.将制作完成的ks文件与镜像文件整合

[[email protected] cdrom]# cp /root/ks.cfg /mnt/iso/isolinux/
[[email protected] cdrom]# cd /mnt/iso/isolinux/
[[email protected] isolinux]# ll
total 72840
-r--r--r--. 1 root root     2048 May  7  2014 boot.cat
-r--r--r--. 1 root root       84 May  7  2014 boot.msg
-r--r--r--. 1 root root      321 May  7  2014 grub.conf
-r--r--r--. 1 root root 35544564 May  7  2014 initrd.img
-r--r--r--. 1 root root    24576 May  7  2014 isolinux.bin
-r--r--r--. 1 root root     3166 May  7  2014 isolinux.cfg
-rw-------. 1 root root     1044 Jun 21 00:48 ks.cfg
-r--r--r--. 1 root root   176500 Jan  2  2014 memtest
-r--r--r--. 1 root root      186 Mar  3  2014 splash.png
-r--r--r--. 1 root root     2438 May  7  2014 TRANS.TBL
-r--r--r--. 1 root root 33744152 May  7  2014 upgrade.img
-r--r--r--. 1 root root   155792 Feb 28  2014 vesamenu.c32
-r-xr-xr-x. 1 root root  4902000 May  5  2014 vmlinuz

修改isolinux.cfg配置文件,在append initrd=initrd.img添加ks文件读取路径inst.ks=cdrom:/isolinux/ks.cfg

[[email protected] isolinux]# vim isolinux.cfg 
[[email protected] isolinux]# cat isolinux.cfg | grep ks
  append initrd=initrd.img inst.ks=cdrom:/isolinux/ks.cfg inst.stage2=hd:LABEL=RHEL7 quiet

4.创建引导光盘

[[email protected] isolinux]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "RHEL 7.0 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/RHEL7.iso /mnt/iso/
[[email protected] isolinux]# ll /root/RHEL7.iso 
-rw-r--r--. 1 root root 3843938304 Jun 21 01:11 /root/RHEL7.iso
时间: 2024-08-05 20:54:26

Linux系统管理第六周作业【Linux微职位】的相关文章

Linux系统管理第七周作业【Linux微职位】

1.写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin):分别这两类用户的个数:通过字符串比较来实现: [[email protected] ~]# vim usershell.sh #!/bin/bash # declare -i nologin_num=0 declare -i login_num=0 for i in $(cut -d: -f7 /etc/passwd);do     if [ "$i" == &

Linux系统管理第五周作业【Linux微职位】

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥(Network Bridge):工作在OSI模型的第二层数据链路层,主要用于将两个局域网(LAN)连起来,根据MAC地址来转发帧(Frame).它可以有效地联接两个局域网,使本地通信限制在本网段内,并转发相应的信号至另一端.网桥主要用于联接数量不多.同一类型的网段. 集线器(Hub):工作在OSI的第一层物理层,主要用于对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上

linux学习第六周总结

linux学习第六周总结 本周共学习4项内容,简单总结一下 shell脚本编程进阶 系统启动和内核管理 selinux 文本处理三剑客之awk 一.shell脚本进阶 编程中的逻辑处理: 顺序执行选择执行循环执行 循环执行 将某代码段重复运行多次重复运行多少次循环次数事先已知循环次数事先未知有进入条件和退出条件r, while, until for循环for 变量名 in 列表;do循环体done执行机制:依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一循环体; 直到列表中的元

第六周作业。

第六周作业.额,暂时不知道写什么好.那就写写如何翻越GFW   (科学上网)的教程吧.基于Shadow socks的教程.可能不是第一个,也可能不是最后一个.但是这也算是科普吧.毕竟连翻越GWF(科学上网)能力都没有何必谈的上是一个好的Programer呢?. ========================================================== 顺便说一句:Fk GFW. ==============================================

linux内核分析 第六周 分析Linux内核创建一个新进程的过程

进程的描述 操作系统的三大管理功能:进程管理.内存管理.文件系统 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 进程控制块PCB task_struct:进程状态.进程打开的文件.进程优先级信息 task_struct总体数据结构的抽象: tty:控制台 fs:文件系统 files:文件描述符 mm:内存管理 signal:信号描述 进程的状态: 注意:Linux下,中就绪状态和运行状态都是TASK_RUNNING 一.gdb跟踪分析一个fork系统调

linux培训第三周作业

本周作业内容: 1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. # who | awk -F ' ' '{print $1}' | uniq 2.取出最后登录到当前系统的用户的相关信息.     w > /abc.txt && tail -n 1 /abc.txt     root     pts/0    192.168.58.1     23:17    5.00s  0.02s  0.00s w 3.取出当前系统上被用户当作其默认sh

2017-2018-2 20179215《网络攻防实践》第六周作业

2017-2018-2 20179215<网络攻防实践> 第六周学习总结 课本学习笔记 一.TCP/IP网络协议攻击 1.网络安全的属性:机密性 .完整性 .可用性 .真实性 .不可抵赖性 . 2.网络攻击的基本模式分为:截获(嗅探 与 监听) .中断(拒绝服务) .篡改(数据包篡改) .伪造(欺骗) . 3.TCP/IP网络协议栈在设计时采用了分层模型,分为:网络接口层 .互联层 .传输层 .应用层.每一层当中都有针对破坏网络安全属性为目的的攻击技术.每一层所涉及的主要协议: 网络接口层:以

第六周作业【Linux微职位】

一.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1)加电自检,BIOS启动引导阶段:      在该过程中实现硬件的初始化以及查找启动介质:      从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理: 2)GRUB启动引导阶段:      装载stage1      装载stage1.5      装载stage2      读取/boot/grub.conf文件并显示启动菜单:      装载所选的kernel和initrd文件到内存中 3)内核阶段:

Linux内核分析第六周作业

分析Linux内核创建一个新进程的过程 首先更新MenuOS的代码,加入调用fork的命令.吐槽一句,实验楼免费用户无法连网.还好只要去github复制一段代码即可 先观察一下fork命令的实现 1 int Fork(int argc, char *argv[]) 2 { 3 int pid; 4 /* fork another process */ 5 pid = fork(); 6 if (pid<0) 7 { 8 /* error occurred */ 9 fprintf(stderr,