LINUX学习—磁盘及文件系统管理

IO设备,外部设备,并不是计算机核心设备
机械式硬盘:
U盘,光盘,软盘,硬盘,磁带机
如果不划分分区,说明一个磁盘只能存储一个文件系统,划分后,一个分区就是一个文件系统,即逻辑边界;
固态硬盘

磁头悬浮在盘面上方,所以硬盘振荡很容易弄坏硬盘,

磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头,实现数据的存储;
磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。从外边缘的0开始编号,根据磁化方向来存储数据0和1;
柱面(cylinder):不同盘片的相同编号的磁道构成的圆柱面就被称之为柱面,磁盘的柱面数与一个盘面上的磁道数是相等的;
扇区(sector): 每个磁道都分别切分成很多扇形区域,每个磁道的扇区数量相同,每个扇区大小伟512字节(扇区用于存储扇区号、磁头号、碟片号以及磁道号,所以扇区不是所有都用来存储数据,还有一部分字节用来存储其他描述形数据)
平均寻道时间(可以理解为转速):它是了解硬盘性能至关重要的参数之一。它是指硬盘在接收到系统指令后,磁头从移动到数据所在的磁道所花费时间的平均值,它在一定程度上体现了硬盘读取数据的能力,是影响硬盘内部数据传输率的重要参数,单位为毫秒(ms).外面柱面速度比内部的快(角速度一样,在同样时间划过的距离更长,读写速率高),所以一般将一些频繁访问的内容放在靠近外部的柱面,如C盘;
硬盘的容量=柱面数x磁头数x扇形区域x512(字节数)
为什么计算机要划分分区:因为如果计算机不划分分区,那整个磁盘只能存储一个文件系统,分区即是每个磁盘的逻辑边界;

低级格式化:对磁盘进行划分磁道、扇区

硬盘逻辑机构及相关概念:
分区partition:创建独立的文件系统
MBR
Master Boot Record主引导记录(512byte):位于磁盘最前边的一段引导代码,它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
由三个部分组成(共占用512个字节):
446bytes:BootLoader,引导程序(一段代码)
64bytes:
每16字节标识一个分区,所以最多只有四个主分区,为了使用更多分区,可以将一个分区设置为扩展分区,相当于一个指针,指向硬盘上更大的空间,以存放额外的分区信息。(主+扩展<=4,扩展分区在一个系统上只能有一个)磁盘分区是按照柱面进行的。
2bytes:Magic number,标记MBR是否有效
硬盘逻辑结构及相关概念

操作系统的启动:BIOS (Basic input output system,基本输入输出操作系统)自检完成后,根据BIOS中设定的启动次序,依次启动设备中的MBR,如果没有,则查找下一个,直到找到并启动,如果有但已经损坏便不能查找下一个,直接启动失败;MBR正常启动后,先将BootLoader加载到内存中,此时BIOS退出,BootLoader程序首先读取分区表,根据配置,加载对应分区上操作系统的内核。如果BootLoader和分区表但凡一个有问题,都无法正常启动系统;BootLoader将内核读进内存,内存读入并解压缩后Bootloader将控制权交给内核,内核开始启动自身,根据文件配置找到文件系统在什么地方,找到所需要运行的程序的位置,最终完成启动操作系统。

文件系统:其实是个软件,存储于磁盘上某个位置,并不在该分区上,但文件系统中数据是在分区上,可将一个分区整体存储空间划分为两部分,一部分为元数据存储区,另外的数据存储区(存储单元)
磁盘块:
目录文件:1.文件名和文件类型都是在目录中存放,而文件的其他元数据信息则是在Inode中存放;
2.文件系统各分区之间物理视角上是并行的,逻辑视角上必须得有上下级关系,所有的文件都必须直接或间接从根开始;
SWAP分区:
Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

页框(PAGE FRAME):
内存管理的概念,CPU中添加了自动把虚拟内存(即逻辑地址)地址转化为物理内存地址的电路,为了简化这种电路,就把RAM划分为长度为4KB或8KB的块,这种块就叫页框。

超级块(SUPER BLOCK)
描述整个分区的系统信息,例如块大小、文件系统版本号,上次mount(挂载)的时间等等,超级块在每个块组的开头都有一份拷贝。

块组描述符表(GDT,GROUP DESCRIPTION TABLE)
由很多块组描述符组成,整个分区分成多少个块组就对应多少个块组描述符;每个块组描述符(Group Descriptor)存储一个块组的描述信息,例如在这个块组中从哪里开始是INODE表,从哪里开始是数据块,空闲的INODE和数据块还有多少个等等;和超级块类似,块组描述符表在每个块组的开头也都有一份拷贝,这些信息是非常重要的,一旦超级块意外损失会丢失整个分区的数据,一旦块组描述符意外损坏就会丢失整个块组的数据,因此它们都有多份拷贝。

块位图 (BLOCKBITMAP)
块位图就是用来描述整个块组中哪些块已用哪些空闲的,它本身占一个块,其中的每个bit代表块组中的一个块,这个bit为1表示该块已用,这个bit为0表示该块空闲可用;与此相联系的另一个问题是:在格式化一个分区时究竟划出多少个块组呢?主要的限制在于块位图本身必须只占一个块。

扫描二维码关注公众号,回复: 4142973 查看本文章

INODE位图(INODEBITMAP)
和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。

INODE表(INODETABLE)
一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是数据块中每个文件都有一个inode,一个块组中的所有inode组成了inode表;inode表占多少块在格式化时就要决定并写入块组描述符中;mke2fs格式化工具的默认策略是一个块组有多少个8KB就分配多少个inode.

数据块(DATABLOCK)
1.对于常规文件,文件的数据存储在数据块中
2.对于目录,该目录下的所有文件名和目录名存储在数据块中,文件名保存在她所在目录的数据块中
除文件名之外,ls -l命令看到的其它信息都保存在该文件的inode中
目录也是一种文件,是一种特殊类型的文件

对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地查找,如果目标路径名较长则分配一个数据块来保存
设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中

* 读取、创建、删除、复制、剪切过程*

读取文件
首先根是自引用的,也就是根的inode号是已知的,再根据INODE table 可以知道根的inode号对应的block号,然后通过block号找到对应的block,block中有个目录项即Dentry,每个目录项纪录了根呷所有直接子目录的inode与文件名的对应关系(也包括文件类型等),例如var对应的inode号为2883585,etc对应的inode号为1507329等等,此时找到etc下对应的inode号,再通过查找inode table 可以得知etc文件对应的block,再通过block里面的dentry可以得知http对应的inode,再查找inode table可以查找到http对应的block,再在block下查找目录项可以得知httpd.conf文件对应的Inode号,再次查询Inode Table可以找到对应的Block,于是数据就可以读取了。

创建文件
想要创建一个文件,首先得先给这个文件分配Inode和Block。首先扫描Inode Bitmap查找空闲Inode,再去Inode Table中写入想要创建文件的元数据,例如权限、属主属组、大小、时间戳、以及这个Inode对应所占据的Block。然后再找到根的Inode,找到根对应的Block,里面Dentry记录了etc及其对应的Inode,再通过Inode Table找到etc文件对应的Block,于是在Dentry里面添加一条记录,testfile.txt与其对应的Inode号,文件类型等信息。到此一个文件便创建了。

删除文件
删除文件直接上级目录(etc)里面的那条Dentry记录,Inode Bitmap里面把文件(fstab)原先对应的Inode号标记为未使用,Block Bitmap中把文件(fstab)原先对应的Block标记为未使用。删除文件本身并没有删除文件所对应的Block和Inode,也就是说Block上的数据并没有被抹除,除非后面向其Block中覆盖数据。

复制文件
复制文件本质就是新建一个文件,并填充源文件数据的过程,详细可参考上面的创建和读取文件过程。

剪切文件
在同一个分区下,剪切速度非常快,这是因为其本质也只是将Dentry记录换一个目录而已,所以根本就不涉及什么耗时的操作。而跨分区剪切文件的过程其实就是在另外一个分区上创建一个新文件,并复制,复制完成之后再删除原先分区上数据的一个过程

硬链接,符号链接(软连接)
硬链接:
两个路径指向同一个inode, 这两个路径彼此间被称为硬链接;硬链接文件只有次数小于1时才会被删除,否则只是删除了链接中的一个路径,而文件并没有删除;
只能对文件创建,不能应用与目录;
不能跨文件系统;
创建硬链接会增加文件被硬链接的次数

软链接:
一个路径指向的inode,存储的是另一个路径(文件大小是字符个数);
可应用与目录;
可跨文件系统;
不会增加被链接文件的链接次数;

ln [-s -v] SRC DEST
-s或–symbolic:对源文件建立符号链接,而非硬链接;
-v或–verbose:显示指令执行过程;
不带任何选项表示创建的为硬链接;

du:显示目录下每个文件占用磁盘的大小
-s:显示目录占用磁盘大小
-h以人类可读性单位显示

df:显示整个磁盘分区使用情况
-i或–inodes:显示inode的信息
-P或–portability:使用POSIX的输出格式,即一行的内容放在同一行显示,不换行;
-h或–human-readable以K,M,G为单位,提高信息的可读性。

mknod:创建块或字符设备

dd命令:用于复制文件并对原文件的内容进行转换和格式化处理。
if=代表输入文件。如果不指定if,默认就会从stdin中读取输入。
of=代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
bs=1代表字节为单位的块大小
count=2代表被复制的块数
备份MBR文件 /dev/sda
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
恢复
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1

猜你喜欢

转载自blog.csdn.net/ihblxh/article/details/81980443