JumpServer简介 #### 1. 部署 https://jumpserver.readthedocs.io/zh/docs/setup_by_fast.html jms_core部署在宿主机,需要在container之前启动 容器中 #### 2. 维护 自动部署脚本会下载py3的虚拟环境,启动jms_core的时候依赖该虚拟环境 安装目录:/opt/jumpserver ``` ~]# source /opt/py3/activate # 激活python虚拟环境 ~]# /opt/jumpserver/jms start -d # 启动jms_core服务 ~]# docker start jms_koko ~]# docker start jms_guacamole ``` ######断电等异常情况会导致jms_core启动失败,需要手动启动jms_core服务 随手笔记 2020-04-01 1 条评论 7357 次浏览
操作系统原理--Linux篇(摘录) 太多设计内核代码段,特别是数据结构相关,没有进行仔细阅读,仅挑了部分浅显易懂的部分记录,还需要加强学习。正在阅读《深入理解Linux内核》,不求能看懂多少,像看小说那样打发时间就挺好。 操作系统原理(Linux篇) LInux内核主要由5个子系统组成: 进程管理 存储管理 文件管理 网络管理 进程间通信 Linux进程组成: 正文段: 存放进程要执行的代码,只读。 用户数据段: 进程直接操作的所有数据,包括进程运行处理的数据段和进程使用的堆栈。 系统数据段: 存放一个反应进程状态和运行环境的所有数据,这些数据只能由内核访问和使用,在系统数据段中包括进程控制块PCB。(PCB是一个名为task_struct的结构体,成为任务结构体,task_struct大约1000B,成员和功能归纳为9个方面) 1. 进程状态标志state和flags 2. 进程的标识,标识进程标识的成员:pid、uid、gid等 3. 进程的族亲关系,p_opptr,p_pptr,p_vsptr,p_cptr,p_osptr 4. 进程间的链接信息:Next_test,Prev_task..... 5. 进程间调度信息 6. 进程间时间信息 7. 进程的虚拟信息 8. 进程的文件信息 9. 与进程通信有关的进程 进程的上下文: 进程的运行环境是动态变化的,在Linux中把进程的动态变化的环境总和成为进程上下文。 1. 当前进程 2. 进程切换 3. 上下文切换 4. 进程通过系统调用执行内核代码时,内核运行是为进程服务,所以此时内核运行在进程的上下文中。 系统上下文: 内核除了为进程服务,也需要为操作系统本身任务服务,如响应外部设备的中断,更新相关定时器,重新计算进程优先级等。故把系统在完成自身任务时的运行环境成为系统上下文。 Linux中的进程都是由当前进程使用系统调用fork()创建的,而实际上fork()中进一步调用内核函数do_fork()来完成。 Linux信号的作用和种类: 信号机制 采用信号机制在进程间通信时传送的只是一个成为信号的数据,他不能传递更多的其他信息。 1. 信号的主要作用是把系统中发生的某些事件通知给进程。 2. 信号的主要特征是它的异步性,即什么时候出现信号是不可预知的。 3. 信号的数量与机器平台等有关,它与硬件平台的字长对应,如80x86的字长为32位,则信号有32种。 4. 系统中的每个信号都是一个整数,称为信号值,Linux通过宏定义给每个信号量定义了一个符号常量,称为信号名,以SIG开头。 5. 进程可以同时处理多个信号。 6. 每种信号在signal中只有一位,故不能识别接收了一个还是多个信号。 7. 信号没有优先级,可以以任意顺序处理接收到的信号 进程接收到信号处理的两种方式: 1. 交给内核进行处理 2. 有进程自行处理 Linux管道的概念 管道是Linux进程间通信的手段,管道实际上就是一种共享文件,所以管道的机制是以文件系统为基础实现的,数据在管道中以先进先出的方式,并以字符流的形态传送。 管道有两种: 匿名管道:只能在父子进程间通信 匿名管道与一般的文件不同,它没有纳入文件系统的目录,不占用外存空间,仅适用内存作为数据传输的缓冲区。缓冲区的大小决定每次写入管道的字节数,该值由全局符号常量PIPEBUF确定,缺省值为一个物理页面。 命名管道:可以在任意进程间通信 对称FIFO管道,与匿名管道的区别是,命名管道有文件名,在文件系统中可见,可以实现任意进程间通信。 ~]# mkfifo myfifo #创建一个命名的管道文件 分页存储管理: 把进程的地址空间划分为大小相等的片段,成为页或页面,相应的内存空间也分为页面相同大小的若干块,成为物理块或帧。 内存页面大小必须适中,若页面太小,减少了内存碎片的总空间,有利于提高内存的利用率,但是会使每个进程要求较多的页面,从而引起页表过长,占用大量内存,此外还会降低页面换进换出的效率。若选择较大页面,虽然可以提高页面换进换出的效率,但是会使页面碎片增大,因此页面的大小选择适中,X86架构中默认是4K 页表: OS为每个进程建立一张页面与物理块号的对照表,以便实现地址映射。页表在内存中占有一块固定的存储区,页表的大小由进程或作业的长度决定。 用于控制和历内存的硬件机制成为存储器管理单元MMU(Memory manage Unit) 80x86具有两种存储管理模式 1. 实时地址模式 2. 受保护的虚拟地址模式 内存的最大容量由物理地址长度决定,80x86机器的地址总线为32bit,2^32约为4GB 文件与文件系统 文件:具有文件名的一组信息组合,包括两部分 文件体:文件本身的信息 文件说明:文件存储和管理信息;如文件名、文件内部标识、文件存储地址、访问权限、访问时间等 文件的种类: 1. 按用途分类: 系统文件 库文件 用户文件 2. 按保护级别分类(根据限定的使用文件的权限) 执行文件 只读文件 读写文件 3. 按信息流向分类(物理设备的特性决定了文件信息流向) 输入文件 输出文件 输入输出文件 4. 按文件的性质分类 普通文件 目录文件 块设备文件 5. 按文件的组织结构分类 由用户组织的文件称为逻辑文件:流式文件、记录文件 文件在存储介质上的组织方式称为文件的物理结构(物理文件)、顺序文件、链接文件、索引文件 文件系统的三个部分: 管理软件 被管理软件 相关的数据结构 文件的逻辑结构: 用户观察到的文件组织形式,是用户可以直接处理的数据结构,它独立于物理特性,又称为文件组织 分类: 1. 有结构记录式文件(数据库):包含若干顺序、排列的记录 变长记录:数据项、字段不同;数据项本身不同 定长记录:文件长度=记录总个数X记录长 2. 无结构字符流式文件:文件的信息不组成记录,文件的长度即为字符总个数(源程序、文本文件) 文件的物理结构: 物理结构:文件在外存上实际的组织形式 物理块:以物理块为基本单位分配和传输信息,物理块大小由存储设备和OS确定。 物理块的大小与逻辑记录大小之间不一定一致 文件物理结构的几种形式 1. 顺序结构(顺序文件或连续文件) 一个文件在逻辑上连续的信息被存储在磁盘上相邻的块上,逻辑记录与磁盘块的顺序相一致 #####优点 存取速度快,结构简单,支持顺序存取和随机存取。 #####存在的问题: 磁盘的存储空间利用率不高,容易产生磁盘碎片 对输出文件很难估计需要多少磁盘块 影响文件的扩展 2. 链接结构(链接文件或者串联文件) 基本思想:将文件存放在外存中若干个物理块中,这些块不必连续,每个块的最后一个单元用作指针指向下一个物理地址,最后块的指针使用特殊字符标识文件结束,从而将同一个文件的物理块链接起来。 优点:解决了顺序结构中的所有问题,监理文件不必考虑文件的长度,文件可以继续扩展,便于在文件的任何位置插入或删除一个记录。 缺点: 1. 采用随机存取的方式是低效的,文件只能按指针链接 2. 可靠性问题,如指针出错 3. 链接指针占用一定空间 4. 读一块信息时,应将其中的指针分离出来,保证用户信息的正确性。 3. 索引结构(索引文件) 基本思想:为每个文件建立一张索引表,每一表相记录文件所在的一个物理块。 优点:能方便的实现文件的扩展,记录的插入和删除。 缺点:必须增加索引表占用的空间和读写索引表的时间,索引表的查找策略对文件系统效率影响很大。 索引表的管理: 当索引表非常大的时候,需要多个磁盘块存放,个磁盘块之间可以使用指针串联起来,当随机存取某个记录时,可能要沿链接文件搜索才能找到该记录的存放地址,很费时间。 EXT2文件系统构造 一个文件系统一般使用块设备的一个独立逻辑分区。EXT2文件系统把它所用的磁盘逻辑分区划分为若干块组(Block Group),并从0开始编号,每个块组包含若干数据块,每个块组除了数据块之外,包括5种用于管理和控制的信息块:超级块、组描述符表、块位图、inode位图、inode表。这些信息位于块组的前部,后面是文件的数据块。 EXT2的超级块(Super Block)用来描述EXT2文件系统整体信息的数据结构,主要描述文件在逻辑分区中的静态分布情况,以及描述文件系统的各个组成结构的尺寸、数量等。所有块组中包含块的内容是需要把超级块的内容复制到内存缓冲区内。 EXT2超级块由两部分组成 1. 基本超级块:EXT2文件系统的整体静态信息 2. 扩充块:反应所在块组的某些动态特性 超级块本身占用一个物理块1024B 基本块占84B 扩充块占20B 剩余的920B定义为元素长度为4B的数组reserved[230],作为备用 组描述符 记录每个块组的描述信息(在文件分配磁盘空间时需要使用到这些信息),这些组描述符集中在一起就形成了组描述符表。组描述符表可能占用多个物理块,和超级块一样的是,每个快中组块中,块组描述符的信息是完全相同的,而且它的内容也要读入内存。 块位图:记录块组的数据块的使用情况,它占用一个物理块。 因此,一个块组中数据块的最大数量是一个物理块的8倍,对于1024的物理块而言,其块位图就有1024*8位,表示8K个数据块,也就是说,一个块组的数据区最大容量是8M,如果EXT2文件系统使用的逻辑分区为100M,则它可以划分为12个块组,系统运行后,块位图装载进一个高速缓冲中,但是由于高速缓存空间有限,故只能装入常用的8块(缺省值)位图。 inode表和inode位图 inode表:一个块组的所有文件的inode集合,他可能占据多个物理块,每个块组可以包含的inode数目由超级块成员项s_inoders_per_group给出。 inode位图:反应了inode表中各项的使用情况,它的每一位表示inode表的一项,1为使用,0为空闲,与块位图相似。inode位图也装入一个高速缓冲中。 EXT2文件系统的物理结构 EXT2文件系统系统默认的物理块尺寸为1K,EXT2的块地址长度4B,所以每个间接块的索引表可以包括1024/4=256个物理地址。 直接地址:允许文件不大于12K 一次间接地址:当文件大于12K时使用,允许文件长达256K+12K 二次间接地址:当文件大于256K+12K时使用,允许的文件长达256*256K+256K+12K 三次间接地址:当文件大于256*256*K+256K+12K时使用,允许文件长达256*256*256K+256*256K+256K+12K=16G+64M+256K+12K 实际上,32bit操作系统单个文件最大支持到4G EXT2文件系统按照文件的逻辑块号为索引值查找数据块,逻辑块依次从0开始编号。 虚拟文件系统VFS(虚拟文件转换技术) VFS屏蔽了各种文件系统的差异,为处理各种不同文件系统提供了统一的接口,在VFS的管理下,Linux能访问各种文件系统而且实现了各种文件系统间的互访。 VFS的工作原理 物理文件系统:Linux支持各种文件系统如minix、ext2、ISO、nfs等被称为物理文件系统。 虚拟转换机制(VFS) 不同的物理文件系统有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统需要把他们的特性进行抽象,把各种不同物理文件系统转换为一个具有统一共性的虚拟机文件系统,这种转换机制称为虚拟文件系统转换,即VFS。 VFS不是实际的文件系统,它提供了处理各种物理文件系统的公共接口,通过这个接口使得不同的文件系统看起来都是相同的。 VFS超级块和VFS inode结构 1. VFS超级块的作用是把在各种文件系统中的表示文件在逻辑分区中的静态分布情况转换成统一的格式。 2. VFS inode作用是吧不同文件系统的活动文件管理信息,如文件类型、文件尺寸等转成统一的格式。 3. 公共操作函数接口,当进程向系统发出文件操作请求时,该文件可能是某个物理文件系统中的一个文件,内核通过VFS公共操作函数接口转换到该文件系统的相应操作函数。 VFS超级块 VFS超级块是在文件系统安装时由系统在内存中建立的,对于每一种已安装的文件系统,在内存中都有与其对应的VFS超级块,各种文件系统的超级块都是一个super_block结构体。里面的数据是在安装时由读取超级块的例程read_super()把某种文件系统的管理信息写入它的VFS超级块中。 VFS超级块主要包含以下几种信息 1. 文件系统的组织信息,如文件系统所在的设备号、块大小、块位数、文件系统署名等。 2. 文件系统的注册和安装信息 3. VFS超级块的前面各个成员项表示的是各种文件系统的公共信息,不同文件系统的特有信息则由联合体u的各个成员表示。 4. 指向对超级块进行操作的函数指针。 I/O控制方式 CPU控制方式 1. 程序直接控制方式 CPU一直对控制干预 2. 中断控制方式 CPU以字节为单位对I/O控制干预 3. DMA方式(Direct Memory Access) CPU以一组数据块干预I/O控制 DMA方式又称为直接存取方式 其基本思想是在外围设备和内存之间开辟直接的数据交换通道,在DMA方式中,I/O控制器具有比中断方式和程序直接控制方式更强的功能,DMA控制器中还包括传送字节计数器,内存地址寄存器等。 通道控制方式 1. I/O通道:一种硬件机制,指专门用于I/O工作的处理机,它有自己的简单与I/O操作相关的指令系统,如数据传输、设备控制等,通道执行的程序为通道程序。 2. 通道方式的处理过程:CPU向通道发出一条I/O指令,通道接收到指令后,从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发出中断信号,可以提高CPU与I/O的并行处理能力。 3. 通道分类,按信息交换的方式分为三类: a. 字节多路通道(中低速)(分时):字节为单位 b. 数据选择通道(高速):以块为单位 c. 数组多路通道(中高速)(分时):以块为单位 4. 瓶颈问题(通道不足)措施 a. 提高I/O设备的独立性,减少通道占用的时间,通常的方法是在设备和控制器间增设缓冲。 b. 增加通路,增加设备到知己之间的通路是解决瓶颈问题的有效方法,即把一个设备连到多个控制器上,而一个控制器又被连接到多个通道上。 缓冲技术 缓冲技术的引进解决了以下问题 1. CPU与I/O设备间速度不匹配 2. 减少CPU的中断频率 防止每接收一次数据就中断一次,先将数据放入缓冲区内,待满时再中断CPU,从而减少了中断次数。 3. 提高CPU和I/O设备的并行性 例如将打印机工作时CPU继续进行计算工作 缓冲的种类 1. 硬件方式 一般采用硬件缓冲器,如I/O控制器中的数据缓冲寄存器,成本较高,除关键部件外一般不采用。 2. 软件方式 在内存中开辟出一个具有N个单元的专用缓冲区,以便存放输入输出数据。 操作系统为每一个缓冲区建立一个数据结构,成为缓存控制块BCB(buffer control block),操作系统通过BCB对没一个缓存实施具体的管理。 缓冲的使用方式 专用缓冲:为某设备/进程专门设置的。 公用缓冲:为所有设备/进程设置的,为所有的设备/进程所共享。 缓冲的组织形式 单缓冲 双缓冲 循环缓冲 缓冲尺 设备处理程序与I/O进程 设备处理程序包括驱动程序和I/O中断处理程序。I/O处理程序通常是由I/O进程完成的 设备处理程序 设备处理程序是负责直接控制设备完成实际的I/O操作程序,设备驱动程序直接和硬件打交道。设备驱动程序包括对硬件的各种操作,在操作系统的控制下,CPU通过执行驱动程序来实现对设备底层硬件的处理和操作。 I/O进程 为了能够在处理机上执行设备处理程序,当前许多操作系统都设置了专门完成I/O操作的进程,属于系统进程。在不同的操作系统中,处理I/O操作和配置I/O进程的方式不同,大体可以分为三种 1. 为每一类设备设置一个进程,它专门执行这类设备的I/O操作。 2. 在整个系统中设置一个功能进程,专门负责对系统中所有的各类设备的I/O操作,也可以设置一个输入进程和一个输出进程,分别处理系统中的所有的各类设备的输入或输出操作。 3. 系统为每台设备建立一个I/O进程,它们分别执行设备各自的处理程序,被大多数操作系统采用。 I/O进程一般在系统生成的时候被创建,平时处于睡眠等待状态。I/O进程在两种情况下呗唤醒。 1. 当用户进程发出设备请求(I/O请求) 2. 出现I/O中断 Linux设备分类 字符设备:以字符为单位,输入输出数据的设备,并且以字符为单位对设备中的信息进行组织和管理。如显示器或者键盘等。 块设备:以一定大小的数据盘为单位输入输出数据,并且设备中的数据也是以物理块为单位进行组织管理的,如硬盘等。 网络设备:通过网络与外部进程或远程计算机进行通信的设备,如网卡等。 Linux设备的管理特点:物理设备抽象化,把物理设备看成文件,采用文件系统的接口和系统调用来管理和控制设备,Linux设备就是一种特殊文件,成为设备文件。 设备驱动程序 1. 功能 对设备进行初始化 启动停止设备的运转 把设备上的数据传到内存 把数据从内存传入到设备 检测的状态 2. 驱动程序虽然是在设备生产厂家开发的,但是装入系统后统一由内核进行管理,处于内核态,成为内核的一部分。 3. Linux对设备的管理和控制是使用VFS提供的各种数据结构和操作系统函数实现的。 设备注册 当一种设备安装到系统时,必须向系统进行注册,注册之后才能够进行使用,设备的注册是将驱动程序加载到系统中。 设备驱动实在系统启动时装载到系统中的 对于即插即用的设备,驱动程序作为程序模块可以随时加载到系统中。 两个设备注册表 1. 字符设备注册表 2. 块设备注册表 每个注册表都有255个表项,每个表项表示一个设备,都是一个device_struct结构,成为设备描述符。 注:设备注册表的下标时某种设备的主设备号,使用主设备号作为索引就可以从设备注册表中得到这种设备的驱动程序, 两个注册表的第一个表项通常为null,因为系统中不存在主设备号为0的字符设备和块设备。 设备注册是通过系统调用注册函数实现的,当设备需要撤销时,可以使用注销函数从设备注册表中删除。 Linux的I/O控制方式 Linux对设备的输入、输出过程实际上是在CPU的控制下主机(内存)与外部设备之间传送数据的过程,因此Linux的I/O控制有三种 1. 查询等待方式(轮训方式) 驱动程序不断控制设备状态,当设备准备好传送数据时,CPU执行驱动完成一次I/O过程,若设备未准备好,则驱动程序反复检测该设备状态,直到设备准备好。 适用于不支持设备中断的系统,系统支持的中断数目有限时,例如并行接口(打印机接口)的驱动程序中默认的控制方式就是轮训方式。 2. 中断方式 当进程向设备提出I/O请求时并不等待设备完成I/O操作,而是把CPU让给其他进程使用,自己则进入睡眠状态。在设备完成I/O操作时发出中断信号,系统根据中断信号调用相应的中断服务唤醒等待的进程继续后面的操作。 在机器支持中断的情况下,涉笔驱动程序就可以使用中断方式控制设备的I/O操作。因此,设备中断程序中处理包含各种操作函数外,同时还要进行各种中断处理的中断服务例程。CPU接收到来自硬件的中断请求后,则通过中断请求就能够执行设备驱动程序例程。 3. DMA方式 DMA方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和回复现场的过程,通过硬件为RAM和I/O之间开辟一条直接传输数据的通路,减少CPU直接操作数据的时间。 随手笔记 2019-05-11 1 条评论 9273 次浏览
VLAN&VXLAN简介 Vlan: 在较大的局域网内,存在多台交换机,多个网段,交换机下的所有主机都处于广播域中,会造成广播风暴,浪费宝贵的带宽资源,通过vlan标签对逻辑子网隔离,划分从逻辑上广播域。 Vlan允许的子网数量为2^12=4096 VLAN环境下不同网段的主机通信必须要经过路由或三层交换来实现。 在云环境中,多租户的场景下VLAN的子网往往是不够使用的,而且VLAN能够解决二层网络中主机之间信道的争抢,但是不能解决三层IP地址的冲突。 因此,为了解决多租户网络重叠(IP地址冲突),产生了VXLAN技术。 VXLAN是一种基于IP网络且采用MAC地址封装在UDP报文中的VPN技术。 VXLAN技术可以通过建立VXLAN隧道,在现有网络架构上建立大量的虚拟可扩展局域网,不同的虚拟可扩展局域网使用VNI(VXLAN Network Identifiler,虚拟可扩展局域网网络标识符)进行标识。 VXLAN提供和VLAN相同的2层网络服务,但相比VLAN拥有更大的扩展性和灵活性,优点如下: 多租户的网络在整个数据中心更具灵活性:VXLAN提供了一个在可靠的共享网络设施上扩展二层网络的解决方案,从而租户的负载(tenant workload)可以在数据中心跨physical pods。 VXLAN提供更多的二层网段,VLAN使用12bit的VLAN_ID表示网段名,从而网段数被限制在4096个,而VXLAN使用24bit作为VXLAN标识符(VNID),使得VXLAN的个数扩展到2^24个。 更好的在基础设施中利用网络路径(Network path):VLAN使用STP(spanning Tree Protocol)协议防止路由环路,最终不使用网络中的网络连接半阻塞冗余路径。VXLAN数据包基于三层报头,可以完整的利用三层路由,ECMP路由以及链路聚合协议来使用所有可用的路径。 传统三层网络: 核心层:核心交换机负责骨干网络传输,对外提供业务。 汇聚层:降低核心交换机的压力,ACL、划分VLAN,控制等都是在汇聚层进行。 接入层:接入到底层的终端服务器。 在南北流量大的场景下,如果东西向流量增多(主机之间通过的层数多),会导致南北向流量拥堵。 VLAN是为解决以太网的广播问题和安全性而提出的一种协议,它在以太网帧的基础上增加了VLAN头,用VLAN ID把用户划分为更小的工作组,限制不同工作组间的用户互访,每个工作组就是一个虚拟局域网。虚拟局域网的好处是可以限制广播范围,并能够形成虚拟工作组,动态管理网络。 GRE VPN(Generic Routing Encapsulation)即通用路由封装协议,是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。 GRE是VPN(Virtual Private Network)的第三层隧道协议,即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。 随手笔记 2019-04-27 评论 2585 次浏览
GRUB原理 GNU GRUB(简称“GRUB”,GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动管理器,它允许用户可以在计算机内同时安装有多个操作系统,比如不同版本的Windows和Linux,并在计算机启动时选择希望运行的操作系统。Grub一直在发展,现在的发行版都用Grub 2了,但是基本的启动引导原理是差不多的,所以还是以传统的Grub为例(在CentOS 5.5上)。 GRUB只是工具,有自己的体系,比如有自己的命令 我们知道,引导扇区是每个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。主引导扇区由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节。第二部分是分区表,即DPT(Disk Partition Table),占64个字节。分区表含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节。这也就是为什么一个硬盘最多只能有4个主分区(包括一个扩展分区,(扩展分区可以再分为多个逻辑分区))的原因。第三部分是硬盘有效标志,占2个字节,固定为55AA,如果该标志错误系统就不能启动。 Grub的实质是一个mini os,它拥有shell,支持script,支持特定文件系统……grub由stage1,stage1-5,stage2以及/boot/grub目录下的诸多文件(包括Grub的配置文件与相关文件系统定义文件等)组成,其核心是stage2,主要功能在于完成操作系统的引导工作。Grub可以安装在MBR,也可以安装在一个Linux分区的引导扇区,这2种情况是略有不同的。 先介绍一下Grub的三个文件: 1) stage1的代码文件,是源码目录下stage1/stage1.S,汇编后便成了一个512字节的img,被写在硬盘的0面0道第1扇区,作为硬盘的主引导扇区。(这512字节还包括分区表DPT以及主引导扇区标志“55AA”) 2) stage1_5就是文件系统的解释代码,根据/boot分区(或/boot所在分区)的具体文件系统类型而异,如:ext3分区的话就是 e2fs_stage1_5。在stage1_5没有被加载以前,系统无法识别任何文件系统(但是可以通过BIOS中断方式INT 13h读取磁盘指定扇区的内容)。 3) stage2是grub最核心的部分。它运行后,会把系统切入保护模式,设置好c运行环境然后寻找menulist,如果没有的话就执行一个shell,等待我们输入命令,并在执行boot命令以后就会把控制权转交出去。 当系统固件自检没问题后,就会读取MBR的第一个位置Bootloader(主要是GRUB),注意GRUB只是启动系统的工具而已,并非系统本身,GRUB启动时,通常从/boot/grub/menu.lst读取引导配置,起始这个文件是一个软连接,实质上是读取grub.conf文件,由于所有设备在Linux中都是被看为文件的,所以磁盘在Linux和GRUB(为什么要说GRUB,后面会写到)中是怎么表示的。常见的磁盘有IDE ,SCSI,SATA接口的,IDE在Linux中用字符hd来表示,如果有一块那就是hda,有两块那就是hdb。以此类推,对与在GRUB中用hd0来表示第一块,hd1来表示第二块;对于SCSI,SATA磁盘用sd来表示,同样sda表示第一块,sdb表示第二块。在GRUB中同样用hd来表示,同样是hd0表示第一块,hd1表示第二块。《计算机组成原理》告诉你,磁盘在分区的时候有三大分区:主分区,扩展分区,逻辑分区,主分区+扩展分区个数<=4。这里主要说明主分区,在Linux上sda1,sda2,sda3,sda4(以SATA为例子)表示四个主分区,sda5,sda6。表示逻辑分区,这里的sda1(其他就不说了)表示第一块硬盘的第一个主分区,那么在GRUB中就表示为(hd0,0)hd0表示第一块硬盘,后面的0表示第一个分区。 随手笔记 2019-04-25 评论 3141 次浏览
sar命令 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。本文主要以CentOS 6.3 x64系统为例,介绍sar命令。 sar命令常用格式 sar [options] [-A] [-o file] t [n] 其中: t为采样间隔,n为采样次数,默认值是1; -o file表示将命令结果以二进制格式存放在文件中,file 是文件名。 options 为命令行选项,sar命令常用选项如下: -A:所有报告的总和 -u:输出CPU使用情况的统计信息 -v:输出inode、文件和其他内核表的统计信息 -d:输出每一个块设备的活动信息 -r:输出内存和交换空间的统计信息 -b:显示I/O和传送速率的统计信息 -a:文件读写情况 -c:输出进程统计信息,每秒创建的进程数 -R:输出内存页面的统计信息 -y:终端设备活动情况 -w:输出系统交换活动信息 1. CPU资源监控 例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,需键入如下命令: sar -u -o test 10 3 屏幕显示如下: 17:06:16 CPU %user %nice %system %iowait %steal %idle 17:06:26 all 0.00 0.00 0.20 0.00 0.00 99.80 17:06:36 all 0.00 0.00 0.20 0.00 0.00 99.80 17:06:46 all 0.00 0.00 0.10 0.00 0.00 99.90 Average: all 0.00 0.00 0.17 0.00 0.00 99.83 输出项说明: CPU:all 表示统计信息为所有 CPU 的平均值。 %user:显示在用户级别(application)运行使用 CPU 总时间的百分比。 %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。 %iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。 %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。 1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量 3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。 如果要查看二进制文件test中的内容,需键入如下sar命令: sar -u -f test 2. inode、文件和其他内核表监控 例如,每10秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令: sar -v 10 3 屏幕显示如下: 17:10:49 dentunusd file-nr inode-nr pty-nr 17:10:59 6301 5664 12037 4 17:11:09 6301 5664 12037 4 17:11:19 6301 5664 12037 4 Average: 6301 5664 12037 4 输出项说明: dentunusd:目录高速缓存中未被使用的条目数量 file-nr:文件句柄(file handle)的使用数量 inode-nr:索引节点句柄(inode handle)的使用数量 pty-nr:使用的pty数量 3. 内存和交换空间监控 例如,每10秒采样一次,连续采样3次,监控内存分页: sar -r 10 3 屏幕显示如下: 输出项说明: kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间. kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间. %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比. kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap). %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比. 4. 内存分页监控 例如,每10秒采样一次,连续采样3次,监控内存分页: sar -B 10 3 屏幕显示如下: 输出项说明: pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB) pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB) fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) majflt/s:每秒钟产生的主缺页数. pgfree/s:每秒被放入空闲队列中的页个数 pgscank/s:每秒被kswapd扫描的页个数 pgscand/s:每秒直接被扫描的页个数 pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数 %vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比 5. I/O和传送速率监控 例如,每10秒采样一次,连续采样3次,报告缓冲区的使用情况,需键入如下命令: sar -b 10 3 屏幕显示如下: 18:51:05 tps rtps wtps bread/s bwrtn/s 18:51:15 0.00 0.00 0.00 0.00 0.00 18:51:25 1.92 0.00 1.92 0.00 22.65 18:51:35 0.00 0.00 0.00 0.00 0.00 Average: 0.64 0.00 0.64 0.00 7.59 输出项说明: tps:每秒钟物理设备的 I/O 传输总量 rtps:每秒钟从物理设备读入的数据总量 wtps:每秒钟向物理设备写入的数据总量 bread/s:每秒钟从物理设备读入的数据量,单位为 块/s bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s 6. 进程队列长度和平均负载状态监控 例如,每10秒采样一次,连续采样3次,监控进程队列长度和平均负载状态: sar -q 10 3 屏幕显示如下: 19:25:50 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 19:26:00 0 259 0.00 0.00 0.00 19:26:10 0 259 0.00 0.00 0.00 19:26:20 0 259 0.00 0.00 0.00 Average: 0 259 0.00 0.00 0.00 输出项说明: runq-sz:运行队列的长度(等待运行的进程数) plist-sz:进程列表中进程(processes)和线程(threads)的数量 ldavg-1:最后1分钟的系统平均负载(System load average) ldavg-5:过去5分钟的系统平均负载 ldavg-15:过去15分钟的系统平均负载 7. 系统交换活动信息监控 例如,每10秒采样一次,连续采样3次,监控系统交换活动信息: sar - W 10 3 屏幕显示如下: 19:39:50 pswpin/s pswpout/s 19:40:00 0.00 0.00 19:40:10 0.00 0.00 19:40:20 0.00 0.00 Average: 0.00 0.00 输出项说明: pswpin/s:每秒系统换入的交换页面(swap page)数量 pswpout/s:每秒系统换出的交换页面(swap page)数量 8. 设备使用情况监控 例如,每10秒采样一次,连续采样3次,报告设备使用情况,需键入如下命令: # sar -d 10 3 –p 屏幕显示如下: 17:45:54 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 17:46:04 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:46:04 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:46:04 vg_livedvd-lv_root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:46:04 vg_livedvd-lv_swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 其中: 参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0 tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的. rd_sec/s:每秒读扇区的次数. wr_sec/s:每秒写扇区的次数. avgrq-sz:平均每次设备I/O操作的数据大小(扇区). avgqu-sz:磁盘请求队列的平均长度. await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒). svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间. %util:I/O请求占CPU的百分比,比率越大,说明越饱和. 1. avgqu-sz 的值较低时,设备的利用率较高。 2. 当%util的值接近 1% 时,表示设备带宽已经占满。 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看 随手笔记 2017-05-30 评论 2359 次浏览