首页 > 代码库 > linux磁盘及文件系统管理初步(1)

linux磁盘及文件系统管理初步(1)

Linux系统管理

         磁盘分区及文件系统管理

         RAID

         LVM:能够实现磁盘边界的动态管理

         网络属性管理

         程序包管理:程序包的增删查改

         sed awk

         进程查看和管理

         内核管理:内核的组成部分,内核的编译安装

         系统启动流程

         Linux内核的定制,编译内核,busybox

         系统安装:kickstartdhcppxe

         shell脚本编程

        

 

 

 

Linux磁盘及文件系统管理:

 

         整个操作系统的组成部分:硬件和软件

         整个操作系统的组成层次:最底层为硬件设备(这也是我们计算机能够运行的基础),在硬件设备上冯诺依曼体系定义了计算机的五大部件:

CUP:运算器和控制器,他们被整合在一起,有一个硬件部件来提供;

存储器:这里是指主存,又叫做内存设备,我们称之为ram,它是一个可编址的存储单元

                   寻址总线:

                            在我们的计算机上多个硬件部件,他们之间为了能够彼此间通信,我们需要使用线缆将其连接起来,比如说在主板上,有cpu的插槽,这个插槽我们称之为“cpu  socket

然后我们还有内存设备,cpu需要跟内存进行通信,二者之间就需要有线缆将其连接起来,cpu和内存之间的线缆,我们称之为“前端总线”,这就是FSB的连接。

         计算机除了CPU和内存之外,还有很多的I/O设备,但是对于计算机来讲,他的核心部件其实也就是只有CPU和内存。其他的I/O设备都是为了完成给CPU和内存数据的输入输出的。

         在众多的I/O设备中,最典型的的,最根本的应该有四个

         非交互式环境下:的设备有两个

         交互式环境下:设备有四个

                   设备有:外存(用来实现持久存储的,因为内存叫PAM,他的每一次存储都做重新充电的,因为每一次对内存的读操作以后,他会把内存中的电荷带走了,也就意味着内存中的数据没法保存下来,我们需要进行不断的刷新和充电,因此一旦断电,内存中的数据将不复存在,为了我们的系统的数据能够永久存储,所以我们需要一个辅存,这个辅存主要是实现持久存储的。辅存断电以后他的数据依然存在,所以叫持久存储。) 

                   网卡:网卡也是在交互式环境下重要的I/O设备,对于服务器来讲,网卡就更加重要了,因为网卡是服务器向外提供服务的根本的服务口。

外存和网卡是服务器上最为常见的I/O这两个设备既能输入也能输出的I/O设备

除了外存和网卡以外,如果是一个交互式的平台,还应该有两个另外的硬件设备,分别是显示器和键盘

 

         上面提到的这些设备,计算机是怎样连接起来的?

                   这么多的I/O设备,我们需要一些被称为bus总线的东西,将这些设备连接起来,但是CPU需要跟每一个设备打交道,那么难道我们就给CPU与这些设备之间单独的挨个连一根线吗,那就太麻烦了,所以早期的时候,计算机是通过桥设备,像北桥,南桥这个设备进行连接,现在的服务器架构上,这些东西已经被抛弃了,像北桥,南桥这样经典的架构体系结构是比较理解的。多以对于CPU而言,他将自己的连接机制,一并连接到北桥上,任何其他的I/O设备,告诉I/O都可以直接连接在北桥上。通过北桥汇总以后,再跟CPU连接。这是因为CPU的宿舍非常快,而各种I/O设备的速度都比较慢,所以这些I/O设备通过北桥汇总以后,连接到CPU上,由CPU负责进行数据的处理。但是众多的I/O设备中,还有许许多多更慢的组件,像PCI总线,这个更慢的I/O设备通过慢速桥,也就是南桥进行汇总连接起来,然后在一起汇总到北桥上,然后再由北桥汇总连入CPU,北桥被称为高速桥,南桥被称为低速桥。

         如果有些总线希望能够高速访问的话,像PCI-E,或者想一些显卡设备,这些高速I/O是连接到北桥上的,像键盘鼠标这些慢设备是连接到南桥上的。

         我们要明白我们的CPU要想跟这些设备打交道,比如跟这里的显卡或者硬盘打交道,他们必须实现这样几种的操作机制,首先CPU需要实现向这个设备发一个控制指令,比如说CPU向硬盘发起读请求,发一个控制指令,有时候这个指令是由指令控制器来完成,并且CPU还需要将这个数据加载到内存中,那么这就需要传输数据的,另外CPU还需要向内存上定位内存上每一个可用的内存空间,所以从这个本质上来讲,CPU如果能跟这些设备打交道,有可能早期的时候,就连内存都有可能是连接到北桥上的。

         CPU为了能够跟这些众多的设备进行通信,那么CPU与北桥之间需要一个总线,这个总线需要有三种功能:

         第一个功能:CPU要完成在内存中的寻址,定位内存中的地址,这就是地址总线;

         第二个功能:CPU要发控制指令,那么这个又叫控制总线;

         第三个功能:CPU要完成数据的存储读取,这个线又叫数据总线;

上面的三类总线其实是通过一组线缆实现的,因此我们将这种情况,叫线缆的复用机制。在某一时刻这个线缆只能用于传输数据,在某一时刻这个总线只能用于发送控制指令,等等

         每一个I/O设备都因该连接到北桥或者南桥上,但是如果说当前主机上,将来可能用某个I/O设备。但是现在没有加怎么办?那么在主板上预留一个空间好将来进行扩展,这就叫扩展槽,所以我们在主板上预留一些PCI,或者叫PCI-E的槽。像现在的高速固态硬盘,性能非常好,他的就是PCI-E的。

上面谈了很多,其实主要的就是说,我们的硬盘接口,这些不同的I/O设备能够实现数据传输,那他们的方式一样吗?打个比方回答这个问题,就想我们的鼠标数据线缆传输数据的方式,和硬盘的数据传输方式会不会一样?肯定不一样。

 

         那么CPU是怎样实现与这些通信方式不一样的设备进行交互的?

我们的CPU要想与这些设备进行通信,所以每一种设备,在这里每一种I/O设备通过一个线缆与主板上的接口连接起来的,因为他们是可插拔的。比如说,内存有内存槽,硬盘有硬盘槽,然后通过不同结构的线缆,将插槽与各种I/O设备连接起来,(IDE线缆与SATA线缆的结构是不一样,)说到这里我们应该明白,对于我们的CPU或者内存来讲,他在整个数据总线上是由CPU实现,但是真正的转化成某个地方方言时,也就是真正的跟某个I/O设备打交道时,就需要这个槽来实现,我们可以将这个槽理解为一个重要的翻译官,我们一般将这个槽叫做控制器,我们叫他为SATA控制器,或者为IDE控制器,如果我们是通过PCI槽进行扩展的话,通常叫他为适配器,这个槽的主要作用就是,把CPU能够说明白的信息,通过这个槽或者线缆,转化为特定的I/O设备能够理解的信息,也就是在CPU控制总线上说的都是官话,然后到了特定的I/O设备时,就会将这些官话转化为特性的地方话。所以他们之间的传输,也是通过一种特定的机制来传输的。

 

 

计算机中的五大部件:

 

         CPU(包括了运算器和控制器)  MemoryRAM存储器)  I/O(输出设备和输入设备)

 

对于服务器来讲:

                   I/O:(磁盘)Disks, (网卡)Ehtercard

                   Disks:持久存储数据

 

                            硬盘接口类型:

                                     IDEata):并口,理论速率:133MB/s

                                     SCSI:并口,

                                     SATA:串口(是IDE接口的升级版,传输是有先有后的)理论速率:6gbps                                            要换成上面的大B,那么需要除以8

                                     SAS:串口,6gps

                                     USB:串口,480MB/s

 

                            并口:统一线缆可以接多块设备;

                                     IDE:两个,主,从

                                     SCSI

                                               宽带:可以接16-1个设备

                                               窄带:可以连接8-1个设备

                            串口:同一线缆只可以接一个设备;

 

                                     IOPSIo  per second   IO次数每秒

        

         为什么并行接口传输数据会慢呢?

                   解:需要并行传输数据的时候,我们需要在总线上产生数据控制,想要实现数据交换速度快的话,就需要频率要高,这就与电磁信号的传输有关了,如果频率高了后,彼此差生相互干扰的可能性是非常大的,那么数据一干扰,我们就需重新传输数据,那么我们就会限制数据交换的频率,那么数据交换的速度就会受到限制,所以说并行接口传输,速度一般是小于串行接口的。

                  

        

         硬盘:机械硬盘;固态硬盘;

 

                   固态硬盘:我们可以理解为内部是多个并行存取的U盘。固态硬盘有一种就扣是PCI-E接口,这种PCI-E接口的速度接近于内存的速度,

 

无论是机械硬盘还是固态硬盘他们的接口都是一样,无非就是IDE接口,SATA接口,或者是PCI-E接口,我们衡量一个硬盘的性能时,我们除了看他的传输速率外,我们还看另外一个指标来描述,IOPSIO次数每秒)每一个I/O就是一个存取操作,对于IDE来讲,每秒的IO次数大约在100个左右,而SCSI接口每秒大约为150个到200个之间I/O,对于很多存取很频繁的数据服务器来讲100个左右的IO有点差,对于早期时候,人们为了扩展ipos,就是将多个硬盘连起来并行使用,比如将硬盘做成rai0,它能够拓展I/O能力,但是这种能力比固态硬盘的扩展能力就差很多了,比方说,市面上的固态硬盘IPOS400个左右,这就是我们的主机换了固态硬盘后,开机仅用几秒,固态硬盘是电器设备,而机械硬盘是机械设备。

固态硬盘是根据电子运转来实现存取,机械硬盘是根据机械盘的旋转来实现存取的,到目前为止机械硬盘的封装技术仍然是上个世界六七十年代的技术。我们桌面的固态硬盘一般都是SATA接口的。

 

 

 

机械硬盘的概念个工作原理:

 

         (机械式的硬盘就是由马达带动的,同轴旋转的,内部是真空封装的,多个盘片,这些盘片上有一种磁性材料,盘片上面可以按照固定的轨道,实现数据存取,)

         我们的盘片上画了很多的同心圆的轨道,我们称之为磁道:(track,我们知道每一个盘片上的磁道都是同心圆,他们的周长是不一样,所以说这样圆仅是同轴的旋转的,是同心圆,但是由内而外的周长不同,也就是意味着,他每一圈存储的数据量不一样,但是由于是同轴旋转,也就是单位时间内划过的长度是不一样的,但是他们的角速度是一样,所以我们称之为固定角速度的设备,那么这样的硬盘怎样实现数据的存取呢?

         简单来讲,我们知道磁盘中有盘片,也有磁头,这些磁头会在盘面上上悬浮着,这些磁头可能距离盘面仅有几个微米的间距,他通过这种磁场信息的交换,使得磁头能够从盘面上的磁场信息来读取存储的信息,也能够发送高能信号,将数据保存在磁性材料中,为了使得磁盘上上存储更多的数据,我们的磁盘双面都有磁性材料,也就是意味着双面都要读写,所以说对于每一个盘片来讲,每一个盘片的每一面都有一个磁头,但是每一个盘面上的磁头都被固定在同一个机械臂上,所以说磁头的滑动也是同步的,所以说每一次的数据读取,都是由两步完成的,第一步先机械臂滑动磁头定位磁道,第二步磁盘转动,然后磁盘转动使得磁头读取数据。

         所以我们在读取数据的时候有一个“平均寻道时间”

         平均寻道时间,是衡量一个硬盘性能的重要指标。平均寻道时间:越短越好,有两种方法提高寻道的速度:(1)是机械臂滑动时间缩短,(2)使磁盘的转速提高

         市面上有:5400rpmrpm:表示多少转每分钟),7200rpm10000rpmSCSI接口的寻道时间有15000rpm

         因为磁盘每分钟转这么多次,必然会发出大量的热,所以硬盘是真空封装的,里面不能有任何的杂质,在这里面哪怕有一粒微小的灰尘,也会像巨石一样。我们也知道磁盘中的磁头与盘面之间有几微米的间距,所以磁盘在工作的时候,磁盘是不能被震动的,因为一旦震动,两者之间就可能接触了,接触就很可能磁头将盘面给划坏了,这也是硬盘很容易损害的原因。所以现在的笔记本里面的硬盘都有特殊的保护机制。

         由磁盘中的磁道是由内而外,所以每个磁道是不一样的,所以我们不能安照一个磁道为一个单位进行存储,这样的话我们很难实现数据的有效管理,更何况一个磁道也很难将一个文件存完,那么我们就将一个磁道换成一个扇区,我们将每一个磁道划分成固定大小的扇区,

         sector:扇区,每一个扇区是大小固定的,每一个扇区大小为512字节,字节:bytes

一般而言外道的扇区数和内道的扇区数是不一样的,为了便于管理和理解,现在硬盘通常对外接口上都把每一个磁道上的扇区数固定了,是通过虚拟曾固定的,看上去每一个磁道平均拥有多少个扇区,那事实上并不是这么做的。

         那么我们的分区是怎么分的?

         在说分区之前,我们先说一下柱面:cylinder

我们之前说过,每一个磁头都固定在同一个机械臂上,那么我们就可以认为,这些磁头也是同步进退的,因此在某一时刻,这个头固定在某一个磁道上,那么第二个磁头就固定在第二个柱面上的相同磁道上,第三个刺头就在第三个柱面上的相同磁道上.......不同盘面上的相同编号的磁道就叫一个柱面,就像一个薄薄的铁通一样,那么我们分区是怎样分的?

         如果我们不分区的话,整块磁盘就被当做一个文件系统进行管理,当做一个存储空间,但是早些时候,硬盘只有几个G,那我们为什么要分区呢?

         因为现在的硬盘都很大,为了使得每一个硬盘中,我们可以独立的组织为多个可管理的文件系统,每一个被划分出的独立的文件系统,就叫块设备,可以独立使用,彼此间不会相互干扰,但是我们的分区应该怎样分?

         真正的文件存储,是按照磁道进行的。

         我们的分区划分是按照柱面进行的,

         那么这样的话,越靠近外面的分区性能越好,这是因为单位时间内划过的距离较长,完成的数据存取量较大。

         (这也是为什么电脑装系统,一般装在C盘,因为C盘是最外层的柱面所组成的分区,)

 

 

Linux的哲学思想:一切皆文件;

 

         设备类型:

                   块(block):随机访问,数据交换单位是“块”;

                   字符(character):线性访问,数据交换单位是“字符”;

 

         设备文件:FHS,被放在/dev/目录下,

         /dev

                   设备文件作用:关联至设备的驱动程序;

                   设备号:

                            major:主设备号,区分设备类型;用于标明设备所需要的驱动程序;

                            minor:次设备号,区分同种类型下的不同的设备,是特定设备的访问入口;

 

 

         手动创建设备文件:

                            每一个设备文件叫做一个节点;

                   mknod命令:

 

                   功能:用来创建块设备或者字符设备文件的命令

                  

                   格式:

                                mknod  [OPTION]... NAME  TYPE  [MAJOR MINOR]

 

                   选项:

                            -m,--mode=MODE:创建文件时,直接指明文件的访问权限

 

 

 

 

 

设备文件名,不能随便定义,是由ICANN组织定义的。

 

磁盘:

         IDE  /dev/hd[a-z]  

                   例如:/dev/hda   /dev/hdb    

         SCSI,SATA,USB,SAS  /dev/sd[a-z]

 

         分区:

                   /dev/sda#

                            /dev/sda1,................

 

注意:CentOS67统统将硬盘设备文件标识为/dev/sd[a-z]#

 

         引用设备的方式:

                   设备文件名

                   卷标

                   UUID

 

 

磁盘分区类型:

 

                   有两种:MBR,GPT

         MBR0sector0号扇区):0磁道0扇区

                   大小为:512字节

                   全称:Master  Boot Record :主引导记录

                   分为三部分:

                            446bytes存放操作系统的加载程序:称为:bootloader,是一个程序,

                                      bootloader是引导启动操作系统的程序;

                            64bytes:分区表,每16个字节标识一个分区,一共只能有4个分区;

                                     4个主分区

                                     31扩展

                                               在扩展分区中在划分n个逻辑分区

                            2bytesMBR区域的有效性标识,55AA为有效,否则为无效;

 

         (上面的64bytes定义了我们的操作系统只能有4个分区,但是现在我们的硬盘好像不止只有4个分区,那我们是怎样实现的呢?

         我们把这四个分区中的一个分区拿出来,使得这个分区不再标识分区,而是用来指向另外一个存储空间,把另一个存储空间,当做新的分区表的存储位置,)

         主分区和扩展分区的表示:1-4

         逻辑分区:只能从5开始,包括5

                           

 

[root@centos6 ~]# ls -l /dev  //查看/dev/目录先的设备文件

total 0

crw-rw----. 1 root video    10, 175 Nov 7 09:41 agpgart

crw-rw----. 1 root root     10, 54 Nov  7 09:41 autofs

drwxr-xr-x. 2 root root         660 Nov  7 09:41 block

drwxr-xr-x. 2 root root          80 Nov  7  2016bsg

crw-------. 1 root root     10, 234 Nov  7  2016btrfs-control

[root@centos6 ~]# mknod /dev/testdev b 111 1  //创建了一个快设备类型的主设备号为111                                                                                        次设备号为1,名称为testdev的设备文件

[root@centos6 ~]# ls -l /dev/testdev

brw-r--r--. 1 root root 111, 1 Nov  7 15:40 /dev/testdev

[root@centos6 ~]# 

 

fdisk命令:

(这个命令非常危险,请勿在服务器上试用,请勿在生产环境中试用)

 

[root@centos6 ~]# man fdisk   //查看fdisk命令的帮助

 

功能:

         管理磁盘分区表

格式:

 

         1)查看分区情况:

         fdisk[-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device

 

      fdisk  -l  [-u]  [device...]    //列出指定磁盘设备上的分区情况;

 

 

 

centos6演示:

[root@centos6 ~]# fdisk -l

 

Disk /dev/sda: 214.7 GB, 214748364800 bytes    //磁盘大小为214.7GB,换算成字节位....

255 heads, 63 sectors/track, 26108cylinders

Units = cylinders of 16065 * 512 = 8225280bytes  //扇区大小为512字节

Sector size (logical/physical): 512 bytes /512 bytes //扇区大小,逻辑大小,物理大小都是512                                                                                                            字节

I/O size (minimum/optimal): 512 bytes / 512bytes   //I/O大小为512字节

Disk identifier: 0x000066a0    //磁盘的标识符,是以以为16进制的数字进行标识

 

  Device Boot      Start         End      Blocks  Id  System

/dev/sda1  *           1          26      204800  83  Linux  //*”表示是引导                                                                                                            分区,标识操作系统在这个分区上装着呢。

Partition 1 does not end on cylinderboundary.

/dev/sda2              26        6400   51200000   83  Linux

/dev/sda3            6400        8950   20480000   83  Linux

/dev/sda4            8950       26109  137829376    5  Extended

/dev/sda5            8950        9460    4096000   82  Linux swap / Solaris

[root@centos6 ~]#

 

上面的“Id”表示类型,这个类型是指我们的分区所在的场景类型,linux的分区正常都用83来表示,而扩展分区使用5来表示,交换分区使用82表示;

         83”:是一个16进制的两位数。

system:表示前面的Id对应的意义是什么。

 

centos7演示:

[root@centos7 ~]# fdisk -l

 

Disk /dev/sda: 214.7 GB, 214748364800bytes, 419430400 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk label type: dos

Disk identifier: 0x0003325d

 

  Device Boot      Start         End      Blocks  Id  System

/dev/sda1  *        2048      411647      204800  83  Linux

/dev/sda2          411648   102811647   51200000   83  Linux

/dev/sda3       102811648   143771647   20480000   83  Linux

/dev/sda4       143771648   419430399  137829376    5  Extended

/dev/sda5       143773696   151965695    4096000   82  Linux swap / Solaris

[root@centos7 ~]#

 

总结:上面的显示中,centos6centos7的不同是:start

                   centos6表示从哪个柱面开始

                   centos7表示从哪个扇区开始

 

如果我们想看某一个指定的磁盘分区情况,则我们后面写上指定的磁盘设备文件即可

 

         [root@centos7~]# fdisk  -l  /dev/sda

 

2)如果想管理分区:

                   fdisk  devicedevice表示磁盘文件名),执行这个命令能够打开fdisk的命令行接口,fdisk提供了一个交互式接口来管理分区,他有许多子命令,分别用于不同的管理功能,所有的操作均在内存中完成。这就意味着所有的操作不会保存在磁盘上,这就不会损害磁盘。直到使用“w”命令保存到磁盘上才会生效,

 

         常用的命令:

                   n:创建新分区;

                   d:删除已有的分区;

                   t:修改分区类型;

                   l:查看所有已知ID

                   w:保存并退出;

                   q:不保存并退出;

                   m:查看帮助信息;

                   p:显示现有分区信息;(相当于在命令行中执行:  fdisk  -l

 

 

         我们直接fdisk 后面跟上磁盘的设备文件名即可

         例如:      [root@centos7 ~]# fdisk  /dev/sda

 

 

演示例二

[root@centos6 ~]# fdisk /dev/sda

 

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): m    //使用m选项,查看fdisk的子命令。

Command action

  a   toggle a bootable flag

  b   edit bsd disklabel

  c   toggle the dos compatibilityflag

  d   delete a partition    //表示删除分区

  l   list known partition types   //列出已知的分区类型(82  Linux swap / 85  Linux                                                                                  extended86  NTFS volume set87  NTFS volume set                                                                          88  Linux plaintextlinux纯文本);8e  Linux LVMfd                                                                           Linuxraid auto;)

  m   print this menu

  n   add a new partition    //表示添加新分区

  o   create a new empty DOSpartition table

  p   print the partition table

  q   quit without saving changes

  s   create a new empty Sundisklabel

  t   change a partition‘s system id           //表示更改一个分区的system  ID,即更改分区类型

  u   change display/entry units

  v   verify the partition table

  w   write table to disk and exit   //表示 保存退出

  x   extra functionality (expertsonly)

 

Command (m for help):

 

 

 

 

      fdisk -s partition...

 

      fdisk -v

 

      fdisk -h

 

 

 

课外作业:GPT


本文出自 “11847750” 博客,请务必保留此出处http://11857750.blog.51cto.com/11847750/1875111

linux磁盘及文件系统管理初步(1)