一、基础知识
冯诺依曼计算机的五大体系结构为计算器、控制器、存储器和输入设备、输出设备。其五大部件的物理体现为由计算器和控制器统称为中央处理器CPU,存储器即为内存,以及物理的输入输出设备。
计算机的存储器有两类,一类是内部存储器,一断电就会把记住的东西丢失,一类是外部存储器,断了电也能存住。
内部存储器即为内存:存储信息速度快,断电后存储内容全部丢失。
外部存储器主要是磁盘:它所存储的信息不受断电的影响,但是它的速度相对于内存就慢得多了。
磁盘又分为两类,一类是硬盘,一类是软盘。
硬盘的容量比较大,也就是说它能记录的信息比较多,而且一般都装在机箱里面。软盘的容量就相对比较小了,一般放在机箱外面。
计算机运行时,运算器的操作和操作种类由控制器决定。运算器处理的数据来自存储器;处理后的结果数据通常送回存储器,或暂时寄存在运算器中。
由于计算机要处理很多数据,所以各部件之间通过南北桥芯片连接,北桥芯片主要控制 CPU内存等高速设备,南桥芯片负责I/O总线之间的通信。
南桥芯片通过I/O端口来识别众多I/O设备从而和内存进行不同的交互。
I/O端口:就是一种地址,用于标识对应的I/O设备,端口范围0---65535。
设备类型:
字符设备:以字符为单位,进行顺序访问的设备,如键盘。
块设备:以块为单位,能够进行随机访问的设备,如磁盘。
基于Linux中一切皆文件的思想,所以设备都一文件的形式在linux中体现,称为设备文件,一般设备文件存储在/dev目录下。
设备文件:关联至一个驱动程序,进而能够跟与之对应的硬件设备进行交互。因此可以说设备文件是硬件设备的前端体现。
设备文件只是用来关联驱动程序的文件,并不存储驱动程序的相关数据,所以设备文件无大小,只有元数据,没有数据。文件类型主要是块设备文件和字符设备文件。
为了区分不同类型的设备,我们使用设备号来给设备进行区分,但是还要区分同一类型中的不同设备,所以我们把设备号分为主设备号和次设备号来进行区分。
主设备号:设备类型
次设备号 :同一类设备中不同设备的标识
例:查看/dev下的详细信息
以上是块设备文件的详细信息,图中第五列以及第六类分别为主设备号和次设备号,图中显示的是同类型设备的不同设备。
二、磁盘
1、磁盘的物理组成
其工作过程是通过转轴马达高速转动磁盘盘片,使得机械磁臂的读写磁头读写盘片上的数据。
(1)图中的圆片即为磁盘,磁盘是主要记录数据的部分,可分为:
磁道:如图中的磁道t,当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。
柱面:如图中的柱面c,在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)。
扇区:如图中的扇区s磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。扇区是磁盘最小的物理存储单位,每个扇区为512字节。
(2)机械臂杆,如图,主要是通过磁臂上的读写触头读写盘片上的数据。
读写磁头通过磁臂的旋转从一个磁道到另一个磁道,此过程花费需要的时间就是寻道时间。
寻道时间:触头寻找磁道所花的时间。
平均寻道时间:即触头寻找各磁道所花的平均时间,它是了解硬盘性能至关重要的参数之一,购买磁盘时主要参考此参数。
2、磁盘的分区
柱面是分区的最小单位。磁头读写磁盘一定有一个起始点,我们把这个起始点定为磁盘的0柱面,0磁道,0扇区称为MBR即为磁盘的第一个分区。
MBR:master boot record 主引导记录(寻找操作系统在哪个分区)是传统的分区机制。
MBR结构:占用硬盘最开头的512字节,MBR只支持不超过2TB的硬盘。
MBR存储格式:
前446字节为:引导加载器(Boot loader)引导不同的操作系统
接下来64字节:每16个字节标记一个分区,分别对应4个主分区表信息(Partition table)
最后2个字节:为启动标示(Boot Signature),永远都是55和AA;55和AA是个永久性的标示,代表这个硬盘是可启动的。
MBR分区机制下的 磁盘分区:
磁盘分区分为:主分区、扩展分区、逻辑分区
主分区:一块硬盘最多只能创建4个主分区(因为在MBR分区表结构中最多可以创建4个主分区表信息,也就是4个16字节的空间,如上图)。
扩展分区:一个扩展分区会占用一个主分区的位置,一般是在主分区后。扩展分区指向多个逻辑分区,逻辑分区属于扩展分区。
逻辑分区:
1)是基于扩展分区创建出来的,先有扩展分区,然后在扩展分区的基础 上再创建逻辑分区;也就是说我们要使用逻辑分区,必须先要创建扩展分区;
2)扩展分区的空间是不能被直接使用的,我们必须在扩展分区的基础上去建立逻辑分区,才能够被使用;
3)Linux最多支持63个IDE分区和15个SCSI分区
GPT:
GPT(GUID Partition Table):是一个较新的分区机制,解决了MBR的很多缺点。
1)支持超过2TB的磁盘:GPT有64bit寻址空间;而MBR对硬盘空间地址寻址最多只支持32bit,2的32次方,硬盘空间是以地址方式来被识别的,所以MBR只支持容量为2TB以内的磁盘
2)向后兼容MBR
3)但是底层硬件必须支持UEFI(Intel提出的取代BIOS的新一代的引导系统)才能使用,也就是底层硬件必须使用UEFI
4)必须使用64位操作系统
5)Mac、LInux系统都能支持GPT分区格式
6)Windows 7 64bit、Windows Server2008 64bit支持GPT
三、磁盘接口
对于Linux系统而言,每个分区都是一个可以独立访问的设备
Linux所有设备都被抽象为一个文件,保存在/dev/目录下。
1、Linux磁盘设备文件的访问标识
/dev/[s|h]d[a-z][1-∞] 例:/dev/sda /dev/sda1
磁盘设备接口类型:s或h
磁盘编号:a-z
分区编号:1-∞
1-4:主分区或扩展分区编号(建议不要把磁盘的编号1作为扩展分区)
5+:逻辑分区编号
2、磁盘接口类型:
IDE:并口,传输速率为133MB/s ,存储文件 /dev/hd
SCSI:并口,小型计算机系统接口,传输速率640MB/s,存储文件 /dev/sd
USB:串口,传输速率480MB/s,存储文件 /dev/sd
SAS:串口,传输速率 6Gbps,存储文件/dev/sd
通常一个接口控制器只能管理一个设备叫做串口,而一个控制器可以管理多个设备的就称为是串口。
3、fdisk:磁盘管理工具
(1)fdisk -l 显示系统上的所有磁盘设备信息
fdisk -l 显示系统上的所有磁盘设备信息,其中我们可了解到系统的磁盘大小是128.8G,63个扇区/磁道,15665个柱面,有sda1,sda2两个分区等。
接下来我们查看下/dev/sda1分区(设备)的信息
(2)fdisk是交互式命令,fdisk 设备名 ,进入交互界面有很多子命令,子命令用于磁盘分区的管理,所有编辑操作都是在内存中完成的,没有直接同步到磁盘。
n:创建一个新分区
d:删除一个分区
w:保存分区信息并退出
q:不保存退出
t:修改分区的system id (十六进制的数字)
l:列出已知的所有分区类型
p:列出现有的分区信息
快捷键 Ctrl+Backspace删除
根据以上fdisk的子命令,我们来做下面这道练习题。
练习:给一个 10G的磁盘, 分3个主分区,大小都为 512M,然后 分4个逻辑分区 ,大小都为 1G。
首先先给系统添加一个10G大小的硬盘。
fdisk –l 查看是否有一个约10G大小未分区的硬盘。
硬盘创建成功,设备名称是/dev/sdb。
现在给该设备分区,操作如下:
光标所在处输入相关子命令,光标前提示输入m可获得相关的帮助信息。
创建一个新分区,输入n
提示输入e还是p,e代表扩展分区,p指主分区,注:先分主分区,余下的空间留给扩展分区。
输入p后,提示输入主分区编号,一般按顺序,输入1;然后提示从哪个柱面开始,为了避免空间浪费,直接回车默认即可;接下来是输入分区大小,提示信息中标明输入的格式,根据要求,输入+512M;完成一个主分区的创建,查看该分区是否创建成功,输入p,如下图:
显示该分区创建完成,按以上操作再创建2个主分区
接下来创建逻辑分区,逻辑分区是基于扩展分区创建出来的,所以先创建一个扩展分区
注:输入分区类型时,输入e代表扩展分区,然后系统会把最后的一个主分区编号4直接给扩展分区,同样,为了避免空间浪费,我们把余下的空间全都分给扩展分区,输入p,查看分区是否成功
扩展分区创建成功,接下来创建逻辑分区
由于4个主分区都已被创建,再创建分区,系统直接默认创建逻辑分区,所以操作较简单。继续创建其他3个逻辑分区
输入w保存退出,创建完成,输入p查看创建是否成功。注:由于使用的是虚拟系统创建,故文件大小有一定偏差
以上查看创建文件情况,只是从内存中查看,若想查看受否被内核读取,可查看/proc/partitions文件的分区表
注:若在内核分区表中没有查看到之前的操作信息,通过 “partx –a”设备名 来让内存重新读取分区表。例: partx –a /dev/sdb
有时fdisk中的d命令不能删除分区,是因为内核中该分区已被占用,所以若想删除已被占用的分区,可到内核中删除该分区。用命令 kpartx –f 设备名。
四、文件系统
1、文件系统格式
底层数据存取机制:
inode:inode是操作系统中的一种数据结构,记录文件的属性、及该文件放置在哪一个 块之内的信息,一个文件只对应一个inode,而一个文件会占用多个块。
引导块:用来存储磁盘分区信息和启动信息。
超级块:描述整个分区的文件系统信息,例如块大小、文件系统版本号、等等。超级块在分区中相当重要,块组0中必须有一个超级块,其他某块组可能有超级块的备份。
GDT(块组描述符):存储当前块组的描述信息。
块位图:块位图就是用来描述整个块组中哪些块已用哪些块空闲的,它本身占一个块,其中的每个bit 代表本块组中的一个块,这个bit为1表示该块已用,这个bit为0表示该块空闲可用。
inode位图:和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。
inode表:存储被占用的inode条目。
数据块:存储数据。
例:向磁盘存储一个文件即创建一个文件,首先找到超级块查询到组0现在有空闲,然后找到GDT对于组0的描述信息,再然后到块位图查询到组0中空闲的块,接着到inode位图中找到空闲的inode给要存储的文件加上一些属性信息等标记为该inode已占用,并体现到inode表中的inode条目,再到数据区中找到空闲的块存储文件,最后将这些块的地址写到那个标有文件属性等信息的inode条目中去。
读取该文件就直接搜索inode表中该文件对应的inode条目,读取文件存放的地址进而到存放文件的块将数据取出。
删除该文件,先查找到该文件对应的inode条目,进而找到存放文件数据的块,将这些块标记为空闲即可被其他数据覆盖,并在块位图中标注这些块已经空闲,然后再到inode位图中找到该文件对应的inode标记为空闲,该文件则被删除。
若两个文件都指向一个inode,删除一个文件则对另一个文件无影响。
上层若要查找/tmp/aa文件该如何查找呢?
应该通过文件路径逐级查找,首先内核具有可自找的特性,根在内核中,通过内核自找,找到其对应的inode,通过inode找到数据块中存储tmp的inode号,然后再去inode表中找到tmp的inode,进而找到对应的数据块中存储aa的inode号,最后找到aa的inode,通过aa的inode找到存储aa的数据块,对数据进行读取。
综上所述,文件系统是管理存储空间中,存储大量文件时,实现按名存取的一种机制。
2、linux文件系统类型
xfs ext4 ext3 ext2
Centos 7系列,其默认的文件系统为xfs。
Centos6系列,为linux操作系统的主流,其默认的文件系统为ext4。
Centos 5系列,其默认的文件系统为ext3。
Centos 4系列,其默认的文件系统为ext2。
swap :交换分区
光盘:iso9660
网络文件系统:nfs
集群文件系统:gfs2 (红帽研发)
分布式文件系统 mogilefs hdfs
3、文件系统管理
文件系统管理分两部分组成:
文件系统内核模块和文件系统管理工具,由文件系统管理工具来调用文件系统内核进行对文件系统的管理。
(1)文件系统内核模块
文件系统属于内核的一部分,那么如何查找文件系统内核呢?
/lib/modules 目录下存储的是内核的版本信息文件,列出该目录文件的内容。
找到kernel内核文件,查看其信息
kernel文件中的fs文件就是存放文件系统内核的文件。
系统在调用不同的文件系统时,区分不同文件所用的接口不同,为了方便调用,系统在各文件系统的接口上都使用虚拟文件系统进行封装,使得系统调用时都使用同一种调用方式来调用该虚拟文件的接口,这种用于抹平各种文件系统的差异的虚拟文件系统,我们称为VFS 虚拟文件系统。
(2)文件系统管理工具
格式化文件系统即创建文件系统工具:
我们之前给磁盘分区时并没有给设备创建文件系统类型
mkfs -t 文件系统类型 分区名 创建文件系统为指定类型
创建/dev/sdb1的文件系统类型为ext4类型,创建成功,显示一些相关信息。
注:mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t" 参数中指定ext4,则mkfs会调用mke2fs来建立文件系统.使用时如省略指定块数参数,mkfs会自动设置适当的块数.
mke2fs 是专门用来格式化ext系列文件系统的
使用格式:mke2fs [选项] 分区名
常用选项: -t ext{2,3,4} 指定文件系统类型
-b {1024|2048|4096} 指定块大小单位字节必须为2次方
-L 卷标名 设定卷标名
-i # 为数据空间中的每#个字节创建一个inode
N # 指定元数据区有#个inode
-m # 指定为管理员预留空间占总空间的百分#(一般为管理员预留6%的空间使用。)
创建/dev/sdb2文件系统指定其块大小为1024字节,卷标名为vcd,有500个inode,给管理员预留6%的空间,文件系统类型为ext4。
e2label 分区名 查看分区卷标名
查看刚刚创建的sdb2的卷标名,同时说明刚刚的创建成功。
块设备信息显示工具:
blkid 列出当前系统所有的块设备信息
blkid -L 卷标名 显示占用该卷标名的设备
blkid -U UUID 显示该UUID的设备
dumpe2fs 文件系统的超级块信息查看工具
使用格式:dumpe2fs 分区名
上图中只是超级块中的部分信息,其中列出了关于设备的各种信息,以及其中的各块组的信息。
链接文件
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。
硬链接:指向同一个inode的多个不同的文件路径,它们指向同一组磁盘块。
符号链接(软链接):有自己的inode,但此inode没有指向数据块,而是指向原文件的访问路径(字符串)。
那么我们如何创建链接文件呢?
我们使用ln命令在文件间建立连接
使用格式:ln [选项] 源文件 目标文件(不加选项默认创建的是硬链接文件)
常用选项: -s 创建符号链接文件(软链接文件)
-v 显示详细信息
注:创建链接时需要注意的是目标文件在链接之前是不存在的,是给源文件创建一个链接文件。
创建一个硬链接首先要注意以下特性
硬链接特性:1、硬链接不能跨文件系统
2、不能对目录进行硬链接
3、创建硬链接,会增加文件的硬链接数
成功创建硬链接后,两文件的硬链接数增加一个,并且相同,若删除其中任一文件,则另一文件的硬连接数也会减少,但对文件无影响,如下图:
同样,创建软连接时应注意以下特性
软连接特性:1、符号链接可以跨文件系统
2、可以对目录进行软连接
3、不会增加硬连接数
4、删除源文件,会损坏符号链接文件
未创建软链接前,tmp下的各文件信息如上图所示
现创建目录文件bb创建一个软链接,如下:
文件bb的软链接创建成功,删除文件aa对文件bb无影响,但删除bb就会损坏aa文件。
文件系统中的参数如何修改呢?
tune2fs 重新设定etx系列文件系统中的可调参数
tune2fs [选项] 分区名
-l 查看指定文件系统(分区)的超级块信息
-L 卷标名 重新指定卷标名
-m # 调整管理员预留空间的百分比
-u UUID 指定文件系统的UUID
查看文件系统的超级块信息,与之前的dumpe2fs命令效果相同。
mkswap 格式化交换分区
使用格式:mkswap [选项] 分区名
-L 卷标名
-U UUID
free:查看内存的使用情况
常用选项: -m 按M为单位
-g 以G为单位
4、挂载
对于磁盘的使用,我们分为三个步骤:
分区---> 格式化 ---> 挂载
接下来我们学习挂载的相关知识
挂载:将额外的文件系统与根文件系统建立关联关系,使得其作为此额外文件系统的访问入口的过程。
挂载相关的配置文件
/etc/fstab (主要用于系统启动时,挂载设备)
/etc/mtab (存储了已挂载的条目)
/proc/mounts (内核中识别的所有挂载条目)
挂载工具:mount
使用格式:mount [选项] 设备 挂载点
常用选项: -t 指定文件系统类型
-r 只读挂载
-w 读写挂载
-a /etc/fstab 挂载/etc/fstab下的所有条目
-n 挂载时不更新/etc/mtab文件
-B或--bind 关联目录
-o 选项参数即挂载属性
其中-o选项后可加如下选项参数来实现相关挂载操作:
async 使用异步模式;数据的修改先于内存中完成,然后根据某种策略定期同步至磁盘,实现持久存储
sync 同步
auto 支持mount -a实现自动挂载
noauto 不支持mount -a实现自动挂载
noexec 不允许此设备上的二进制程序执行
exec 允许挂载
user 允许普通用户挂载设备
nouser 不允许挂载
例如:挂载文件系统类型为ext4的/dev/sdb设备到/mnt这个挂载点但不允许其上面的二进制程序运行,就是
mount -o noexec -t etx4 /dev/sdb /mnt
卸载工具umount
umount [设备|挂载点] 相当于mount -o nouser
fuser 查看哪些进程正在使用挂载点
fuser -v 挂载点
-km 强行中止正在使用此挂载点的进程
查看/etc/fstab配置文件,会显示六列信息,举例如下:
proc /proc proc defaults 0 0
设备 挂载点 文件系统类型 挂载选项 转储频率 自检次序
第一列为设备名,也可能用逻辑券或UUID表示,第二列为设备的挂载点,第三列是设备的文件系统类型
du 查看某目录树占用空间的情况
使用格式:du [选项] 目录
-s 只列出目录占空间的总大小,不列出详细信息
-h 转换为人可识别的单位
df 查看文件系统空间(分区)占用情况
使用格式:df [选项] [分区名]
-h 转换为人可识别的单位
-i 显示分区inode的使用率,而不是分区空间的使用率
fsck 文件系统的修复工具
使用格式:fsck [选项] 文件系统(分区)
-t 文件系统类型
-a 自动修复错误
-r 交互式修复错误
e2fsck 专用于ext系列文件系统的修复工具
使用格式:e2fsck [选项] 文件系统(分区)
-y 对问题自动回答为yes
-f 强制进行检测
练习题
1、创建一个文件系统5G,卷标为DATA,开机自动挂载只/mydata目录,块大小2048,预留空间比3% 文件系统为ext4
2、写一个脚本,(1)列出当前所有的磁盘设备
(2)显示最后一个设备的空间使用信息
3、创建一个2G的swap分区,要求开机自动挂载启用。
原文地址:http://littlehorse.blog.51cto.com/10066209/1638115