首页 > 代码库 > linux磁盘及文件系统管理初步(1)
linux磁盘及文件系统管理初步(1)
Linux系统管理
磁盘分区及文件系统管理
RAID
LVM:能够实现磁盘边界的动态管理
网络属性管理
程序包管理:程序包的增删查改
sed 和awk
进程查看和管理
内核管理:内核的组成部分,内核的编译安装
系统启动流程
Linux内核的定制,编译内核,busybox
系统安装:kickstart,dhcp,pxe
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(包括了运算器和控制器) Memory(RAM存储器) I/O(输出设备和输入设备)
对于服务器来讲:
I/O:(磁盘)Disks, (网卡)Ehtercard
Disks:持久存储数据
硬盘接口类型:
IDE(ata):并口,理论速率:133MB/s
SCSI:并口,
SATA:串口(是IDE接口的升级版,传输是有先有后的)理论速率:6gbps 要换成上面的大B,那么需要除以8
SAS:串口,6gps
USB:串口,480MB/s
并口:统一线缆可以接多块设备;
IDE:两个,主,从
SCSI:
宽带:可以接16-1个设备
窄带:可以连接8-1个设备
串口:同一线缆只可以接一个设备;
IOPS:Io per second :IO次数每秒
为什么并行接口传输数据会慢呢?
解:需要并行传输数据的时候,我们需要在总线上产生数据控制,想要实现数据交换速度快的话,就需要频率要高,这就与电磁信号的传输有关了,如果频率高了后,彼此差生相互干扰的可能性是非常大的,那么数据一干扰,我们就需重新传输数据,那么我们就会限制数据交换的频率,那么数据交换的速度就会受到限制,所以说并行接口传输,速度一般是小于串行接口的。
硬盘:机械硬盘;固态硬盘;
固态硬盘:我们可以理解为内部是多个并行存取的U盘。固态硬盘有一种就扣是PCI-E接口,这种PCI-E接口的速度接近于内存的速度,
无论是机械硬盘还是固态硬盘他们的接口都是一样,无非就是IDE接口,SATA接口,或者是PCI-E接口,我们衡量一个硬盘的性能时,我们除了看他的传输速率外,我们还看另外一个指标来描述,IOPS(IO次数每秒)每一个I/O就是一个存取操作,对于IDE来讲,每秒的IO次数大约在100个左右,而SCSI接口每秒大约为150个到200个之间I/O,对于很多存取很频繁的数据服务器来讲100个左右的IO有点差,对于早期时候,人们为了扩展ipos,就是将多个硬盘连起来并行使用,比如将硬盘做成rai0,它能够拓展I/O能力,但是这种能力比固态硬盘的扩展能力就差很多了,比方说,市面上的固态硬盘IPOS在400个左右,这就是我们的主机换了固态硬盘后,开机仅用几秒,固态硬盘是电器设备,而机械硬盘是机械设备。
固态硬盘是根据电子运转来实现存取,机械硬盘是根据机械盘的旋转来实现存取的,到目前为止机械硬盘的封装技术仍然是上个世界六七十年代的技术。我们桌面的固态硬盘一般都是SATA接口的。
机械硬盘的概念个工作原理:
(机械式的硬盘就是由马达带动的,同轴旋转的,内部是真空封装的,多个盘片,这些盘片上有一种磁性材料,盘片上面可以按照固定的轨道,实现数据存取,)
我们的盘片上画了很多的同心圆的轨道,我们称之为磁道:(track),我们知道每一个盘片上的磁道都是同心圆,他们的周长是不一样,所以说这样圆仅是同轴的旋转的,是同心圆,但是由内而外的周长不同,也就是意味着,他每一圈存储的数据量不一样,但是由于是同轴旋转,也就是单位时间内划过的长度是不一样的,但是他们的角速度是一样,所以我们称之为固定角速度的设备,那么这样的硬盘怎样实现数据的存取呢?
简单来讲,我们知道磁盘中有盘片,也有磁头,这些磁头会在盘面上上悬浮着,这些磁头可能距离盘面仅有几个微米的间距,他通过这种磁场信息的交换,使得磁头能够从盘面上的磁场信息来读取存储的信息,也能够发送高能信号,将数据保存在磁性材料中,为了使得磁盘上上存储更多的数据,我们的磁盘双面都有磁性材料,也就是意味着双面都要读写,所以说对于每一个盘片来讲,每一个盘片的每一面都有一个磁头,但是每一个盘面上的磁头都被固定在同一个机械臂上,所以说磁头的滑动也是同步的,所以说每一次的数据读取,都是由两步完成的,第一步先机械臂滑动磁头定位磁道,第二步磁盘转动,然后磁盘转动使得磁头读取数据。
所以我们在读取数据的时候有一个“平均寻道时间”
平均寻道时间,是衡量一个硬盘性能的重要指标。平均寻道时间:越短越好,有两种方法提高寻道的速度:(1)是机械臂滑动时间缩短,(2)使磁盘的转速提高
市面上有:5400rpm(rpm:表示多少转每分钟),7200rpm,10000rpm,SCSI接口的寻道时间有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,................
注意:CentOS6和7统统将硬盘设备文件标识为/dev/sd[a-z]#
引用设备的方式:
设备文件名
卷标
UUID
磁盘分区类型:
有两种:MBR,GPT
MBR:0sector(0号扇区):0磁道0扇区
大小为:512字节
全称:Master Boot Record :主引导记录
分为三部分:
前446bytes存放操作系统的加载程序:称为:bootloader,是一个程序,
bootloader是引导启动操作系统的程序;
64bytes:分区表,每16个字节标识一个分区,一共只能有4个分区;
4个主分区
3主1扩展
在扩展分区中在划分n个逻辑分区
2bytes:MBR区域的有效性标识,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 ~]#
总结:上面的显示中,centos6与centos7的不同是:“start”
centos6表示从哪个柱面开始
centos7表示从哪个扇区开始
如果我们想看某一个指定的磁盘分区情况,则我们后面写上指定的磁盘设备文件即可
[root@centos7~]# fdisk -l /dev/sda
(2)如果想管理分区:
fdisk device(device表示磁盘文件名),执行这个命令能够打开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 extended;86 NTFS volume set;87 NTFS volume set; 88 Linux plaintext(linux纯文本);8e Linux LVM;fd 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)