zoukankan      html  css  js  c++  java
  • Linux硬件与服务

    Linux硬件与服务

    Linux


     

     

    1 Linux磁盘管理与磁盘结构

    运算器 存储器(内部存储器 RAM 易失性存储器) I/O输入输出

    外部存储器:U盘 光盘 软盘 硬盘 磁带等 
    I/O 磁盘:机械式硬盘 
    接口:IDE SATA iSCSI接口

     

    磁盘的组成结构

    盘片 Platers(存储数据的设备),轴 Spindle,利用轴组成同心圆;马达(数据记录时候提供高速旋转的动力),磁头(读写头,伸缩臂)

     

    盘片的逻辑结构

    默认硬盘有四个盘片,最靠近中心的为0盘片,一个盘片有两面,双读取,上为0,下为1,依次排布,一般一个磁盘有四个盘片;多盘片并行存取存储到不同盘片的相同编号的磁道上引用

    磁道:盘片以轴为中心组成的同心圆; 
    扇区:磁道被分为多个扇区; 
    柱面:不同盘片上相同编号的磁道组成一个柱面

    磁盘延时(寻址时间):磁头从一个位置到一个位置需要时间;盘片高速旋转定位也需要时间;硬盘以转速速度越快,寻址时间越短,运行速度越快;磁头是悬浮在盘片之上,距离只有几微米。笔记本5400转/min,台式机7200/min

     

    分区格式化

    MBR:主引导记录,位于0磁道0柱面1扇区,512字节,三部分组成,分别是 446字节的boot loader(启动加载器,存放引导代码),64字节磁盘分区表,2字节magic number(检查MBR是否有效)

    ROM:开机自检,自检ROM中的BIOS;检查硬盘,将boot loader 复制加载到内存中,同时把磁盘分区表,读取分区表和分区上的操作系统。 
    磁盘分区表指向不同的地方,称为扩展分区,只能由一个;原来的四个分区叫主分区;

    主分区+扩展分区 <= 4 
    扩展分区extended:只能有一个,16字节,扩展分区是一个指针,指向磁盘另外的位置,不能直接存储数据 
    逻辑分区logical :逻辑分区组成extended

     

    实例说明:

    默认使用 MBR 分区方式的情况下,在第二颗 SATA 磁盘中,分区“六个有用”的分区 (具有 filesystem 的) ,此外,已知有两个 primary 的分区类型!请问六个分区的文件名?/dev/sdb1(primary) /dev/sdb2(primary) /dev/sdb3(extended) /dev/sdb5(logical 下面皆为 logical) /dev/sdb6 /dev/sdb7 /dev/sdb8 请注意,5-8 这四个 logical 容量相加的总和为 /dev/sdb3! 
    -- P(primary)+E(extended)最多叧能有四个 
    -- E 最多叧能有一个 
    -- 1~4 号是保留给主要/延伸分割槽的, 所有在上面的实例当中 没有sdb4

     

    2 磁盘管理之Block、iNode、 super、super block

     

    block

    磁盘上存放的数据块

     

    block bitmap

    段落引用

    在元数据区域,标记数据块是否被使用

    文件系统:软件(XFS NTFS FAT EXT3 
    EXT4等),存储数据或文件的一种格式,文件系统不存在分区上,位于磁盘的某一个位置;文件系统把分区分割为两部分,一部分存放元数据(metadata),另一部分存放数据

     

    metadata:

    元数据(和数据本身内容没有关系,包括的是数据属性,比如数据归属,数据权限,数据的时间戳)

     

    inode:index node(索引节点)

    存放数据的属性,不包括文件名,数据对应的数据块(block),同一个inode可以指向多个文件

     

    super block:

    超级块,管理元数据区域内其他的区域的

     
     
    1. ln [-s -v]:语法: ln [ -s -v ] src_file des_file
    2. -s:创建软链接
    3. -v:显示详细过程

    硬链接:只能对文件进行硬链接,并且在同一个文件系统,指向一个inode节点 ,文件内容与inode有关 多个文件名对应到同一个inode号码 关联记录,硬链接的修改会影响实际文件内容 但其删除并不影响inode和数据块,硬链接的增加也不会增加inode数目

    软链接:使用绝对路径,指向一个路径,文件大小是字符串的个数,跨文件系统建立,可以为文件或目录建立 
    文件让数据指向其链接的文件名。若源文件删除,链接也无法打开。它是建立独立的文件 会占用inode与区块 
    - 符号链接

     
    1. [root@localhost ~]# ll /etc/ -i
    2. ...
    3. 8388720 lrwxrwxrwx. 1 root root 14 Jul 28 08:36 system-release -> centos-release
     

    3 磁盘管理之fdisk,gdisk分区

    设备文件: /dev/ 
    b:块设备 
    c:字符设备

    主设备号(MAJOR):标识某一类设备 
    次设备号(MINOR):标识一类设备下不同设备

    mknod:创建设备:mknod [OPTION]... NAME TYPE [MAJOR MINOR] 
    -m:设置权限

    磁盘类型按接口划分:如 
    IDE ATA:hd 主板:2种 IDE接口 
    SATA:sd ;SCSI:sd ;USB:sd

     

    Linux磁盘表示方式

    Linux以字母标识磁盘的个数 a:第一块 b:第二块 
    Linux用数字标识分区:1-4标识主分区或扩展分区 逻辑分区从5开始 
    例如:sda、sda1、sda2

    低级格式化:划分磁道 
    高级格式化:为分区装载文件系统 
    文件系统:内核功能(FAT32 NTFS EXT2 EXT3 EXT4 XFS等) 
    EXT2 EXT3 EXT4:低容量 
    XFS:高容量 TB级

     

    查看系统磁盘分区情况

     
    1. [root@localhost ~]# cat /proc/partitions
    2. [root@localhost ~]# ls /dev/sda*
     

    du:data usage

    显示特定目录下的使用情况

     
    1. du -h 查看特定目录的空间使用情况
     

    df:disk free

    df命令用于显示磁盘分区上的可使用的磁盘空间

     
    1. df -h
     

    lsblk 列出分区状态

     

    blkid

     

    磁盘分区 gdisk fdisk parted

    fdisk:针对MBR分区类型的工具 
    gdisk:针对GPT分区类型的工具

     

    fdisk:交互式工具

     
    1. fdisk:交互式工具
    2. d:删除一个分区
    3. l:显示linux支持的分区类型
    4. m:显示帮助信息
    5. n:创建一个新分区
    6. p:创建主分区
    7. e:创建扩展分区
    8. p:显示当前分区列表
    9. q:不保存退出
    10. w:保存更改并退出
    11. t:更改分区的系统ID
     

    gdisk

    该命令要是在GPT分区下使用的,需要在安装centOS的时候强制进行GPT分区,并安装gdisk 命令,其选项用法与fdisk基本相同

     

    parted

    使用 parted 命令可以查看系统采用什么类型的分区表 gpt/mbr/msdos/ext/ext/ext2/ext3/ext4

     
    1. parted -l
     

    磁盘格式化 mkfs: Make File System

    创建/格式化文件系统,借助中间层vfs,虚拟文件系统 
    -t:指定文件系统 
    mkfs -t ext3 dev_name

     
    1. mkfs -t xfs /dev/sdb1
    2. mkfs.xfs /dev/sdb1
     

    磁盘ID

    5:扩展分区 
    82:交换分区 
    83:linux系统分区 
    8e:LVM(逻辑卷管理)

     

    多磁盘应用 Mount 挂载

    mount src(挂载源) des(要挂载点) 
    如挂载sdb1

     
    1. /sdb1 mount /dev/sdb1 /sdb1
    2. mkfs /sdb1 #先在根下创建该sdb1,再进行挂载
    3. blkid #查看设备的id号
    4. /etc/fstab #在该文件内添加以下内容: /实现开机自动挂载:
    5. UUID=8567c02b-fac2-46d3-984e-b9fd8c9a2072 /sdb1 xfs defaults 0 0 #UUID=id号 挂载点 文件系统 默认选项 是否开机检查 是否备份
    6. mkswap #创建交换分区

    umount 卸载磁盘 
    df -h 可以查看是否挂载/卸载 
    fstab :filesystem table

     
    1. /etc/fstab 写入错误 只读状态 系统无法自动挂载正常启动 可使用mount的手动重新挂载根目录
    2. mount -n -o remount, rw /

    实际文件系统的挂载是记录到 /etc/mtab 和/pro/mounts

     

    镜像设备的挂载 loop挂载

     

    4 Linux安装磁盘必须安装的两个分区

     

    / 根分区

    根分区下还有一个/boot 引导分区 :用于存放引导文件和Linux内核 
    大小应 <100M 
    / 根分区 :文件系统的根目录 硬盘无论有多少个分区 所有文件都会在根目录下

     

    swap交换分区

    作为虚拟内存使用 swap分区=物理内存的1.5-2倍

     

    5 Linux文件系统

     
    1. ls -l /lib/modules/$(uname -r)/kernel/fs
    2. 查看系统可以支持的系统格式
    3. cat /proc/filesystems
    4. 查看系统正在使用的文件系统格式
     

    ext2 索引式文件系统 与之相对的无索引的 FAT

    文件系统将文件权限、属性与文件内容分开存储

     

    超级区块

    记录整个文件系统的整体信息:inode与数据区块的总量 使用量 剩余量等 
    文件系统挂载时间 最近一次写入数据的时间、最近一次磁盘检验的时间 
    有效位数值(0/1):磁盘是否挂载

     

    inode

    记录文件属性 、权限;一个文件 仅有一个inode 
    atime、mtime SetUID、pointer

     

    数据区块

    实际数据存储于此,但文件太大的时候回占用多个区块

     

    ext2文件系统的限制

    • 原则上 区块大小与数量在格式化之后不能够再修改
    • 每一个区块最多只能放置一个文件的数据 如果文件太大 则占多个区块
    • 如果文件小于区块则该区块其余空间不能够再使用(浪费磁盘空间)
     

    inode的特点

    • inode固定大小 128B,新的ext4/xfs可设置成256B
    • 每个文件仅使用一个inode
    • 文件系统能建立的文件数量与inode的数量有关
     

    dumpe2fs

     
    1. dumpe2fs 查询ext系列超级区块信息的命令
     

    blkid: 查看各个磁盘的uuid、label name、文件系统格式

     

    日志式文件系统

    防止元数据的内容与实际生产数据不一致的问题,快速修复文件系统

     

    6 Linux关机的正确方式

    shutdown -h 时间(默认单位为min)

     
    1. shutdown -h now
    2. shutdown -h +10
    3. shutdown -h 7:30
    4. shutdown -c (强制取消关机命令)

    常用 
    poweroff 关闭系统同时关闭电源 
    halt 关闭系统 不关电源 
    reboot

     

    软件包

     

    任务计划

     

    一次性周期任务

    =======

     

    at

    at:设置系统在某一个时间点执行的任务,执行结果以邮件的方式发送给任务发起者 
    # systemctl start atd 启用at任务计划服务 
    # systemctl enable atd 设置at服务开机自启动 
    # systemctl status atd 查看at服务状态 
    Linux中设置at任务后,会在/var/spool/at/目录生成at任务计划的文件,按照文件名的排序顺序执行 
    应用示例:

     
    1. [root@localhost ~]# at 11:15
    2. at> ls
    3. at> <EOT> # ctrl+d 退出结束
    4. job 5 at Sun Aug 12 11:15:00 2018
    5. [root@localhost ~]# cd /var/spool/at/
    6. [root@localhost at]# ls
    7. a00005018620a3 spool
    8. [root@localhost at]# cat a00005018620a3
     
    1. [root@localhost at]# mail
    2. Heirloom Mail version 12.5 7/5/10. Type ? for help.
    3. "/var/spool/mail/root": 2 messages 2 new
    4. >N 1 llp002@localhost.loc Wed Mar 7 14:40 16/700 "*** SECURITY information for"
    5. N 2 root Sun Aug 12 11:15 23/601 "Output from your job "
    6. & 2
    7. Message 2:
    8. From root@localhost.localdomain Sun Aug 12 11:15:02 2018
    9. Return-Path: <root@localhost.localdomain>
    10. X-Original-To: root
    11. Delivered-To: root@localhost.localdomain
    12. Subject: Output from your job 5
    13. To: root@localhost.localdomain
    14. Date: Sun, 12 Aug 2018 11:15:02 +0800 (CST)
    15. From: root@localhost.localdomain (root)
    16. Status: R
    17. anaconda-ks.cfg
    18. Desktop
    19. Documents
    20. Downloads
    21. initial-setup-ks.cfg
    22. Music
    23. Pictures
    24. Public
    25. Templates
    26. Videos

    /etc/at.allow和/etc/at.deny: 
    /etc/at.allow:at任务计划的白名单-用户名,仅允许此文件中的用户执行at 
    /etc/at.deny:at任务计划的黑名单-用户名,仅拒绝次文件中的用户执行at 
    设置完成后,重启at 服务 systemctl restart at

    语法: 
    # at data_time 
    at>at_command1 
    at>at_command2 
    at>ctrl+d 保存退出 
    data_time:时间日期写法 
    绝对时间: 
    HH:MM:具体时间点 
    DD.MM.YY:天.月.年 
    YY-MM-DD:年-月-日 
    MM/DD/YY:月/日/年 
    HH:MM YY-MM-DD: 
    相对时间:at now+3minutes:从任务计划创建开始计时,3分钟以后执行

    at命令:设置at任务计划 
    -l:查看系统中at任务列表,相当于atq 
    -r:删除系统中的at任务列表,相当于atrm 
    -d:删除系统中的at任务列表,相当于atrm 
    -c:列出后续at任务的具体指令内容

     

    batch

    用法和at相同,不过batch任务计划是在CPU空闲时执行,当CPU的平均负载小于0.8时执行batch设定任务 
    uptime:查看CPU的平均负载

     

    周期性任务计划

    =======

     
    1. 周期性任务计划:
    2. 系统周期性任务:
    3. 日志轮换:logrotate
    4. 登录文件分析:logwatch任务
    5. 创建locate数据库:updatedb
    6. 创建man帮助信息数据库:CentOS6:makewathis CentOS7:mandb
    7. RPM软件登录文件的创建
    8. 与网络相关的分析行为:
    9. 用户周期性任务:
    10. cron:设置周期任务计划
    11. anacron:当cron周期性任务由于某种原因没有执行,anacron重新执行cron任务
     

    cron

    控制crond服务: 
    # systemctl start crond 
    # systemctl enable crond 
    # systemctl status crond

    /etc/cron.allow和/etc/cron.deny 
    /etc/cron.allow:白名单 
    /etc/cron.deny:黑名单,默认情况下系统只保留/etc/cron.deny

    cron相关的配置文件: 
    /etc/crontab:cron配置文件 
    /etc/cron.d/:cron辅助配置文件 
    /var/spool/cron:用户cron任务计划的配置文件,Linux用户设置完cron任务后,会在/var/spool/cron目录下生成以用户名名称的cron文件

    crontab:设置/查看/删除等cron任务计划,执行结果以邮件方式发送给任务发起者 
    -e:编辑cron任务内容 
    -u:为指定用户设置cron任务计划(只有root用户能够使用) 
    -l:查看cron任务列表 
    -r:删除所有的cron列表

    设置cron任务语法: 
    系统设置: 
    分 时 日 月 周 用户 命令 
    用户设置: 
    分 时 日 月 周 命令

    时间取值范围: 
    分钟:0-59 
    小时:0-23 
    日期:1-31 
    月份:1-12或jan,feb,mar,apr ... 
    周:0-7或sun,mon,tue,wed,thu,fri,sat,其中0和7都代表周日 
    时间的特殊写法: 
    通配:*代表任意时间 10 17 * * * cat /etc/fstab 
    离散时间段:,(逗号) 5,15,30,45,56 17 * * * cat /etc/fstab 
    连续时间段:-(中横线) 00 23 * * 1-5 cat /etc/fstab 
    间隔时间段:*/n */5 * * * * cat /etc/fstab 00 10 */5 * * cat /etc/fstab

    /etc/crontab文件解析: 
    SHELL=/bin/bash:cron任务计划执行使用的shell程序 
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:cron任务计划命令搜索地址 
    MAILTO=root:cron任务计划执行结果发送给哪个用户 
    /etc/cron.d:辅助配置文件目录

    cron.hourly:cron工具去执行 
    cron.daily,cron.weekly cron.monthly是有anacron工具去执行

    cron设置任务计划时注意事项: 
    CPU和内存资源集中使用时的问题: 
    # vim /etc/crontab 
    1,6,11,16,21,26,31,36,41,46,51,56 * * * * root COMMAND1 
    取消一些不必要的输出:设置命令时可以重定向输出 
    时间的检验:设置时间时,周与日月不可并存 
    安全的检验:借有/var/log/cron的内容查看cron任务计划中是否有非法任务 
    环境变量:系统命令查找和cron任务命令位置由$PATH变量决定,设置cron任务时,使用命令的绝对路径

     

    anacron

    当cron周期性任务由于某种原因没有执行,anacron重新执行cron任务

    anacron语法: 
    anacron [options] [job] 
    -s:依据时间记录文件去判断是否执行 
    -f:强制执行 
    -n:立刻运行未执行的任务,不需要延时

    anacron执行流程: 
    1:由/etc/anacrontab分析到cron.daily天数为1天 
    2:由/var/spool/anacron/cron.daily取出最近一次执行anacron时间戳 
    3:由2步骤分析出的时间戳和cron任务进行比较,查看哪些cron任务超过1天时间没有执行 
    4:准备执行指令,根据/etc/anacrontab的设置,将延时执行 
    5:延时时间过后,执行指令

     

    文件查找命令find

    which:查找命令字所在的位置 
    locate:模糊匹配(只要包含关键字的文件都查找出来) 
    不是实时的,基于数据库查找, updatedb升级locate数据库 
    查找速度特别快

    find:查看文件或目录的工具 
    实时查找 
    精确查找 
    遍历整个指定目录中的文件,速度很慢 
    支持多种查找条件(属主,属组,权限,文件名等) 
    语法: find [find_path] [条件] [处理动作] 
    find_path:如果不写,默认在当前工作目录查找 
    条件:如果不写,会查找出该路径下所有的文件 
    处理动作:默认打印到屏幕上 print

    条件:(匹配标准)
       -name file_name:根据文件名进行查找,区分大小写
       -iname file_name:根据文件名进行查找,不区分大小写
       -regex PATTERN:根据正则表达式的模式进行查找
       -user:通过属主进行查找
       -group:通过属组进程查找
       -uid UID:通过UID号进行查找
       -gid GID:通过GID号进行查找
       -nouser:查找没有属主的文件
       -nogroup:查找没有属组的文件
       -type:根据文件类型进行查找
         -b:块设备
         -c:字符设备
         -d:目录
         -f:文件
         -p:命名管道
         -s:套接字文件
         -l:链接文件
       -size [+ | -] k m g
         -size 5k:精确匹配
         +:大于
         -:小于
       根据时间戳进行查找: # stat file_name  //查看文件的时间戳
         -atime:时间单位为天,access时间
         -mtime:时间单位为天,modify时间
         -ctime:时间单位为天,change时间
         -mmin:时间单位为分钟,modify时间
         -amin:时间单位为分钟,access时间
         -cmin:时间单位为分钟,change时间
       根据权限查找:
         -perm MODE:
               MODE:644,精确匹配
               /MODE:任意一位匹配
               -MODE:文件权限能够完全包含此MODE时才能匹配
    
       条件组合: 
         -a:同时满足多个条件,比如查找属主是tom并且权限为644的文件
         -o:满足一个条件即可,比如查找属主是tom或者权限为包含644的文件
         -not:不满足条件的被查找出来
    
       出来动作:
         -print:默认动作,默认查找结果打印到屏幕
         -ls:默认以类似于ls -l的形式显示结果的信息
         -ok COMMAND {} ;执行动作时提示用户是否执行,必须以;结尾,{}代表文件名占位符
         -exec COMMAND {} ;执行动作时不提示用户直接执行,必须以;结尾,{}代表文件名占位符
    
    
    查找条件通配符:
       *:通配任意个数的任意字符   # find /etc/ -name "pass*"  # find /etc/ -name "*pass"
       ?:通配单个的任意字符       # find /etc/ -name "passw*"
    
     

    CentOS6系统启动详解

     

    简介

     
    1. 进程管理:kernel+process
    2. CPU分环:ring0:内核空间 ring1-2:库文件等 ring3:用户空间
    3. CPU读取的数据都来自内存
    4. 内存:内核空间和用户空间,RAM:易失性存储器
    5. ROM:只读存储器,存储硬件信息等
    6. 系统启动流程:CentOS6CentOS7
    7. PC:Linux
    8. 启动过程:
    9. POST(加电自检:PowerOnSelfTest)--BIOS(基本输入输出系统:Basic Input Output System:硬件信息;Boot sequence:启动顺序)--MBR(主引导记录;446字节bootloader)--启动菜单(Linux启动菜单:GRUB)--kernel--initramfs(虚拟根文件系统)--/sbin/init
    10. kernel作用:驱动和测检系统外围硬件或程序
    11. 文件系统
    12. 安全管理
    13. 网络管理
    14. 进程管理
    15. 驱动程序
    16. 内核设计:
    17. 单内核:把所有的功能都集成到内核中去
    18. Linux使用单内核,模块化设计 /lib /lib64
    19. /lib/modules/'内核版本号为名称的目录'/kernel
    20. arch:平台架构相关
    21. crypto:安全加密
    22. drivers:驱动程序
    23. fs:文件系统
    24. kernel:内核
    25. lib:内核库 .ko(kernel object)
    26. mm:memory mangement内存管理
    27. net:系统中的TCP/IP协议栈
    28. sound:声卡
    29. modules.dep:解决系统中依赖关系
    30. 微内核:把每个功能都做成小模块 Windows solaris

    Linux运行级别:0-6 
    0:halt关机 
    1:单用户模式(root, 无须登录), single, 维护模式; 
    2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式; 
    3:多用户模式,正常模式;文本界面; CLI:command line interface 
    4:预留级别; 
    5:多用户模式,正常模式;图形界面; GUI:graphical user interface 
    6:重启

    initramfs:CentOS6,虚拟根文件系统,把/proc /sys /dev目录复制到根文件系统 
    initrd:CentOS5

    虚拟根系统,可以切换根目录只要有bin/bash 和对应的lib模块 和所应用的相关模块则可相互切换 
    chroot 文件地址:改变根目录 
    ldd:查看二进制文件所依赖的库文件,查看所需要的lib模块

     

    GRUB

    启动流程详解: 
    BootLoader:MBR(位于磁盘中0磁道0柱面1扇区,512字节),后安装的系统的BootLoader覆盖先安装的BootLoader,安装双系统时,先安装Linux,在安装Windows 
    windows:不允许其他系统引导,也不引导其他系统 
    linux: 
    LILO:有众多的限制 
    GRUB:默认的BootLoader 
    GRUB引导系统时几个阶段:(配置文件/boot/grub/grub.conf) 
    grub.conf的文件内容解析

     
    1. default=0 //默认引导系统
    2. timeout=5 //GRUB引导系统超时时间
    3. splashimage=(hd0,0)/grub/splash.xpm.gz //引导系统时图片
    4. hiddenmenu //隐藏菜单
    5. title CentOS 6 (2.6.32-642.el6.x86_64) //系统title及在GRUB中显示的名称
    6. root (hd0,0) //根所在的位置
    7. kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ef361140-6306-423c-90f0-63a93c664f96 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    8. initrd /initramfs-2.6.32-642.el6.x86_64.img

    grub配置文件/boot/grub/grub/conf详细解释: 
    GRUB要求设备名被括在一个括号中。fd表示软盘,hd 表示硬盘(不区分IDE还是SCSI)。其次设备是从0开始编号。分区也是如此,分区和设备之间用一个逗号分开。 
    default 启动系统时在人为不干预的情况下,默认读取哪一个title,如果安装了多个不同版本内核或者安装了不用的操作系统,会产生多个title,0表示第一个,1第二个,以此类推。 
    timeout 开机等待用户的超时时间,单位为秒。在超时时间结束时,如果用户没有人为选择,则以default指定的title读取。 
    hiddenmenu:用于启动时隐藏菜单,除非在timeout之前按下任意键才能看到菜单。 
    title:定义引导项名称。 
    root:指定boot分区所在磁盘及分区,如:root (hd0,6)。 
    kernel:指定kernel文件所在绝对目录地址,如:kernel /vmlinuz-2.6.32-220.el6.x86_64 ,这里的/表示root(hd0,0)分区 
    initrd:指定ramdisk盘所在绝对目录地址,如:initrd /initramfs-2.6.32-220.el6.x86_64.img

    GRUB分阶段启动: 
    stage1:第一个阶段,位于BootLoader,为了引导第二阶段 
    stage1_5:识别文件系统 
    stage2:加载启动设置等等,读取配置文件/boot/grub/grub.conf

    GRUB修复:光盘启动,进入救援模式: 
    # chroot /mnt/sysimage 
    # grub-install --root-directory=/ /dev/sda 
    # grub 
    grub> root (hd0,0) 
    grub> setup (hd0) 
    grub> quit 
    # 准备GRUB配置文件 
    # exit 
    # reboot

    为GRUB启动菜单添加密码: 
    # grub-crypt --sha-512 //生成加密密码 
    # vim /boot/grub/grub.conf,在hiddenmenu添加一行 
    password --encryped 生成的密文 
    为系统添加启动密码: 
    # grub-crypt --sha-512 //生成加密密码 
    # vim /boot/grub/grub.conf,在title中添加一行 
    password --encryped 生成的密文

     

    Kernel、upstart init

    Kernel 
    Linux内核与内核模块: 
    内核:/boot/vmlinuz-version 
    initramfs:/boot/initramfs-kernel_version 
    内核模块:/lib/modules/kernel_version/kernel 
    内核源码:/usr/src/kernels/kernel_version 
    内核版本:/proc/version 
    系统内核功能:/proc/sys/kernel

    Linux关于内核的命令: 
    # lsmod:查看系统中加载的内核模块 
    结果解释: 
    module:模块的名称 
    size:模块的大小 
    userd by:此模块是否被其他模式使用(依赖关系)

     

    init

    init程序的类型: 
    SysV: init, CentOS 5 
    配置文件:/etc/inittab 
    Upstart: init, CentOS 6 
    配置文件:/etc/inittab, /etc/init/*.conf 
    Systemd:systemd, CentOS 7 
    配置文件:/usr/lib/systemd/system, /etc/systemd/system 
    systemV中的 init、upstart init,二者差异不大,centOS中的init称为systemd

    init upstart 系统中的第一个进程 
    系统中第一个进程,PID是1,配置文件/etc/inittab 
    Sys V:init CentOS5:把所有的功能都集成到一个文件中/etc/inittab,启动速度非常慢 
    Upstart:CentOS6:采用事件驱动(event driven),把功能并行执行

    Upstart 概念和术语 
    Upstart 的基本概念和设计清晰明确。UpStart 主要的概念是 job 和 event。Job 就是一个工作单元,用来完成一件工作,比如启动一个后台服务,或者运行一个配置命令。每个 Job 都等待一个或多个事件,一旦事件发生,upstart 就触发该 job 完成相应的工作。 
    Job: 
    Job 就是一个工作的单元,一个任务或者一个服务。可以理解为 sysvinit 中的一个服务脚本。有三种类型的工作: 
    task job:代表在一定时间内会执行完毕的任务,比如删除一个文件 
    service job:代表后台服务进程,比如 apache httpd。这里进程一般不会退出,一旦开始运行就成为一个后台精灵进程,由 init 进程管理,如果这类进程退出,由 init 进程重新启动,它们只能由 init 进程发送信号停止。它们的停止一般也是由于所依赖的停止事件而触发的,不过 upstart 也提供命令行工具,让管理人员手动停止某个服务; 
    Abstract job:仅由 upstart 内部使用,仅对理解 upstart 内部机理有所帮助。我们不用关心它。 
    除了以上的分类之外,还有另一种工作(Job)分类方法。Upstart 不仅可以用来为整个系统的初始化服务,也可以为每个用户会话(session)的初始化服务。系统的初始化任务就叫做 system job,比如挂载文件系统的任务就是一个 system job;用户会话的初始化服务就叫做 session job。

    Job 生命周期:Upstart 为每个工作都维护一个生命周期。一般来说,工作有开始,运行和结束这几种状态。为了更精细地描述工作的变化,Upstart 还引入了一些其它的状态。比如开始就有开始之前(pre-start),即将开始(starting)和已经开始了(started)种不同的状态,这样可以更加精确地描述工作的当前状态。 
    工作从某种初始状态开始,逐渐变化,或许要经历其它几种不同的状态,最终进入另外一种状态,形成一个状态机。在这个过程中,当工作的状态即将发生变化的时候,init 进程会发出相应的事件(event)。

    Upstart 中 Job 的可能状态 
    Waiting:初始状态 
    Starting:Job 即将开始 
    pre-start:执行 pre-start 段,即任务开始前应该完成的工作 
    Spawned:准备执行 script 或者 exec 段 
    post-start:执行 post-start 动作 
    Running:interim state set after post-start section processed denoting job is running (But it may have no associated PID!) 
    pre-stop:执行 pre-stop 段 
    Stopping:interim state set after pre-stop section processed 
    Killed:任务即将被停止 
    post-stop:执行 post-stop 段

    事件 Event 
    顾名思义,Event 就是一个事件。事件在 upstart 中以通知消息的形式具体存在。一旦某个事件发生了,Upstart 就向整个系统发送一个消息。没有任何手段阻止事件消息被 upstart 的其它部分知晓,也就是说,事件一旦发生,整个 upstart 系统中所有工作和其它的事件都会得到通知。

    Event 可以分为三类: signal,methods 或者 hooks。 
    Signal 事件是非阻塞的,异步的。发送一个信号之后控制权立即返回。 
    Methods 事件是阻塞的,同步的。 
    Hooks 事件是阻塞的,同步的。它介于 Signals 和 Methods 之间,调用发出 Hooks 事件的进程必须等待事件完成才可以得到控制权,但不检查事件是否成功。 
    事件是个非常抽象的概念,下面我罗列出一些常见的事件,希望可以帮助您进一步了解事件的含义: 
    系统上电启动,init 进程会发送"start"事件 
    根文件系统可写时,相应 job 会发送文件系统就绪的事件 
    一个块设备被发现并初始化完成,发送相应的事件 
    某个文件系统被挂载,发送相应的事件 
    类似 atd 和 cron,可以在某个时间点,或者周期的时间点发送事件 
    另外一个 job 开始或结束时,发送相应的事件 
    一个磁盘文件被修改时,可以发出相应的事件 
    一个网络设备被发现时,可以发出相应的事件 
    缺省路由被添加或删除时,可以发出相应的事件

    CentOS6上面Upstart大致的一个启动过程: 
    1.内核启动init,读取配置文件/etc/inittab,在CentOS6只定义了运行级别 
    2.系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit) 
    3.init找到/etc/inittab文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit )触发相应的事件RUNLEVEL) 
    5.开始运行/etc/rc.d/rc,传入参数X 
    6./etc/rc.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本 
    7./etc/rcX.d/中的脚本按事先设定的优先级依次启动 
    8.最后执行/etc/rc.d/rc.local 
    9.加载终端或X-Window接口

    /etc/rc.d/rc.sysinit 这个文件做了哪些工作: 
    1、获得网络环境 
    2、挂载设备 
    3、开机启动画面Plymouth(取替了过往的 RHGB) 
    4、判断是否启用SELinux 
    5、显示于开机过程中的欢迎画面 
    6、初始化硬件 
    7、用户自定义模块的加载 
    8、配置内核的参数 
    9、设置主机名 
    10、同步存储器 
    11、设备映射器及相关的初始化 
    12、初始化软件磁盘阵列(RAID) 
    13、初始化 LVM 的文件系统功能 
    14、检验磁盘文件系统(fsck) 
    15、磁盘配额(quota) 
    16、重新以可读写模式挂载系统磁盘 
    17、更新quota(非必要) 
    18、启动系统虚拟随机数生成器 
    19、配置机器(非必要) 
    20、清除开机过程当中的临时文件 
    21、创建ICE目录 
    22、启动交换分区(swap) 
    23、将开机信息写入/var/log/dmesg文件中

    /etc/init/rc.conf:sysv运行级别 
    /etc/rc.d/存放每个运行级别所需要的服务,比如/etc/rc.d/rc3.d/目录定义的运行级别3所需要的服务 
    命名: K+数字+服务名 
    S+数字+服务器 
    K:kill结束服务 
    S:start开启服务 
    数字:代表启动结束的优先级,数字越小优先级越高 
    /etc/rc.d/rc.local:系统启动加载的最后一个脚本(用户的脚本)

    sysv init:chkconfig:定义系统服务在每个级别的运行状态 
    chkconfig --list:查看系统中所有服务的状态 
    chkconfig --level 2345 httpd on 
    chkconfig --level 2345 httpd off

    服务分类: 
    独立服务:应用程序自己控制 
    超级服务:依赖于xinetd进程来管理

    控制服务: 
    service service_name start|stop|restart|reload|status 
    常见命令解释: 
    start:启动服务 
    stop:停止服务 
    restart:重新启动 
    reload:重新加载服务 
    status:查看服务状态

    upstart 常见命令 
    initctl start|stop|restart|reload|status service_name

     

    systemd

    systemd特性 
    1.平行处理所有服务,加速开机流程:旧的init启动脚本是一项一项任务依序启动的模式,因此不相依的服务也是得要一个一个的等待.systemd可以让所有的服务同时启动,因此系统启动的速度变快了 
    2.一经要求就回应的on-demand启动方式:systemd全部就是仅有一只systemd服务搭配systemctl指令来处理,无须其他额外的指令来支援.不像systemV还要init,chkconfig,service...等等指令.此外,systemd由于常驻存储器,因此任何要求(on-demand)都可以立即处理后续的daemon启动的任务. 
    3.服务依赖性的自我检查:由于systemd可以自订服务相依性的检查,因此如果B服务是架构在A服务上面启动的,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务! 
    4.按照daemon功能分类:systemd管理的服务非常多,首先systemd先定义所有的服务为一个服务单位(unit),并将该unit归类到不同的服务类型(type)去.systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type),方便管理员的分类与记忆. 
    5.将多个daemons集合成为一个群组:如同systemV的init里头有个runlevel的特色,systemd亦将许多的功能集合成为一个所谓的target项目,这个项目主要在设计操作环境的建置,所以是集合了许多的daemons,也就是执行某个target就是执行好多个daemon的意思! 
    6.向下兼容旧有的init服务脚本:基本上,systemd是可以兼容于init的启动脚本的,因此,旧的init启动脚本也能够通过systemd来管理,只是更进阶的systemd功能就没有办法支援就是了. 
    7.systemd有些地方无法完全取代init!包括:在runlevel的对应上,大概仅有runlevel1,3,5有对应到systemd的某些target类型而已,没有全部对应; 
    8.全部的systemd都用systemctl这个管理程序管理,而systemctl支援的语法有限制,不像/etc/init.d/daemon就是纯脚本可以自订参数,systemctl不可自订参数.;

    CentOS7启动流程: 
    lsinitrd /boot/initramfs-3.10.0-514.el7.x86_64.img //查看虚根文件系统 
    在内核载入完毕、进行完硬件侦测与驱动程序载入后,内核会启动第一个进程systemd, systemd 最主要的功能就是准备软件执行的环境,包括系统的主机名称、网络设定、语言设置、文件系统及其他服务的启动。 而所有的动作都会通过 systemd 的预设启动服务集合/etc/systemd/system/default.target设定。 另外, systemd 已经舍弃沿用多年的 system V 的 runlevel! 
    常见的操作环境 target 与兼容于 runlevel 的等级可以作为预设的操作环境 (default.target) 的主要项目有: multi-user.target 以及 graphical.target 这两个。当然还有rescue.target, emergency.target, shutdown.target 等等,以及 initrd.target!但是过去的 systemV 使用的是一个称为 runlevel (执行等级) 的概念来启动系统的,systemd 为了兼容于旧式的 systemV 操作行为, 所以也将 runlevel 与操作环境做个结合!你可以使用底下的方式来查询两者间的对应关系

     
    1. # ll -d /usr/lib/systemd/system/runlevel*.target
    2. # yum -y install bash-completion //补齐参数或选项
    3. # systemctl list-dependencies graphical.target //查看启动依赖关系
    4. # systemctl list-dependencies mutli-user.target //查看字符界面启动依赖关系

    sysinit.target完成的功能: 
    1.特殊文件系统装置的挂载:包括 dev-hugepages.mount dev-mqueue.mount 等挂载服务,主要在挂载跟巨量存储器分页使用与讯息队列的功能。 挂载成功后,会在 /dev 底下建立 /dev/hugepages/, /dev/mqueue/ 等目录; 
    2.特殊文件系统的启用:包括磁碟阵列、网络磁碟 (iscsi)、LVM 档案系统、档案系统对照服务 (multipath) 等等,也会在这里被侦测与使用到! 
    3.开机过程的讯息传递与动画执行:使用 plymouthd 服务搭配 plymouth 指令来传递动画与讯息 
    4.日志式登录档的使用:就是 systemd-journald 这个服务的启用啊! 
    5.载入额外的核心模块:透过 /etc/modules-load.d/.conf 档案的设定,让核心额外载入管理员所需要的核心模块! 
    6.载入额外的核心参数设定:包括 /etc/sysctl.conf 以及 /etc/sysctl.d/
    .conf 内部设定! 

    7.启动系统的随机数产生器:随机数产生器可以帮助系统进行一些密码加密演算的功能 
    8.设定终端机 (console) 字形 
    9.启动动态装置管理员:就是udev

    basic.target完整的功能: 
    1.载入 alsa 音效驱动程序; 
    2.载入 firewalld 防火墙:CentOS 7.x 以后使用 firewalld 取代 iptables 的防火墙设定,虽然最终都是使用 iptables 的架构, 不过在设定上面差很多。 
    3.载入 CPU 的微指令功能; 
    4.启动与设定 SELinux 的安全上下文 
    5.将目前的开机过程所产生的开机信息写入到 /var/log/dmesg 当中 
    6.由 /etc/sysconfig/modules/*.modules 及 /etc/rc.modules 载入管理员指定的模块! 
    7.载入 systemd 的 timer 功能;

    systemd 启动 multi-user.target 下的服务:

     
    1. 启动服务设定的脚本目录:
    2. /usr/lib/systemd/system (系统预设的服务启动脚本设定)
    3. /etc/systemd/system (管理员自己开发与设定的脚本设定)
    4. 而使用者针对主机的本机服务与服务器网络服务的各项 unit 若要 enable 的话,就是将它放到 /etc/systemd/system/multi-user.target.wants/ 这个目录底下做个链接,这样就可以在开机的时候去启动他。

    与sys V兼容的rc.local操作:

     
      1. chmod +x /etc/rc.d/rc.local
      2. systemctl start rc-local
      3. systemctl enable rc-local
  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/xuanbjut/p/11941140.html
Copyright © 2011-2022 走看看