Ext系列文件系统(一)
1.理解硬件
磁盘,服务器,机柜,机房
机器磁盘是计算机中的唯一机械设备
磁盘--外设,速度慢,容量大,价格便宜
磁盘是由一颗一颗极小磁铁组成,磁铁有正负极就可以用正负极来表示0于1,则一个磁盘就可以存储很多个0与1,以前的光盘能放电影就是上面的0与1构成信息。
2.磁盘的物理结构
3.磁盘的存储结构
扇区:磁盘存储数据的基本单位,512字节,块设备
定位一个扇区方法:可以先定位磁头(Header),接着是要访问哪一个柱面/磁道(Cylinder)
最后定位一个扇区(Sector)
4.CHS地址定位
文件=内容+属性 都是数据,会占用几个扇区,能定位一个扇区,也能定位多个扇区。
扇区是从磁盘读出读出和写入信息最小单位,通常大小为512字节。
磁头数:每一个磁盘一般都有上下面,分别对应1个磁头,一共有俩个磁头
磁道数:磁道是从盘片外圈往内圈编号0磁道,1磁道依次递增,靠近主轴的同心圆用于停靠磁头,不存储数据。
柱面数:磁道构成柱面,数量等同于磁道个数
扇区数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同
圆盘数:盘片的数量
磁盘容量=磁头数*磁道数*每道扇区数*每扇区字节数
补充:传动臂上的磁头是共进退的
柱面,磁头,扇区三个已知就可以定位数据了,这就是数据定位方法之一,CHS寻址方式。
关于CHS寻址:对早期的磁盘非常有效,知道用哪个磁头,读取那个柱面上的第几个扇区就可以读取到数据了。但是CHS模式支持的硬盘容量有限,因为系统用8bit来存储磁头地址,用10bit来存储柱面地址,用6bit来存储扇区地址,而一个扇区共有512Byte,就可以计算出寻址一块硬盘最大容量为2^8*2^10*2^6*512B=10485760MB(1MB=1048576B,大概是10GB)
5.磁盘的逻辑结构
磁带上面可以存储数据结构,但是逻辑上可以把磁带拉直,变成一个线性结构,那么磁带的逻辑存储结构也可以类似于:
那么磁盘的本质虽然是硬质的,但是逻辑上可以把磁盘想象成卷在一起的磁带,那么磁盘的逻辑存储结构可以类似于一数组形式,每一个扇区可以用下标访问,这种地址也叫LBA
柱面是一个逻辑上的概念,每一面上半径相同的磁道在逻辑上构成柱面。
所以,磁盘物理上分了很多面,但是可以看成:磁盘整体由柱面卷起来的。
6.磁盘的真实情况
磁道:某一盘面某一个盘面展开:
柱面:
整个磁盘所有盘面的同一个磁道,即柱面展开:
整盘:
由此要寻址一个扇区:先找到那一个柱面,在确定柱面内哪一个磁道,在确定扇区。每一个扇区都有一个下标,叫做LBA(Logical Block Adress)地址,其实就是线性地址。
7.CHS&&LBA地址
CHS转成LBA:
磁头数*每磁道扇区数=单个柱面的扇区总数
LBA=柱面号C*单个柱面的扇区总数+磁头号H*每磁道扇区数+扇区号S-1
扇区号通常是从1开始的,而在LBA中,地址是从0开始的
柱面和磁道都是从0开始编号的
总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机时会获取到这些参数。
LBA转成CHS:
柱面号C=LBA//(磁头数*每道扇区数)
磁头号H=(LBA%(磁头数*每道扇区数))//每道扇区数
扇区号S=(LBA%每道扇区数)+1
//表示除取整数
所以对于磁盘使用者来说,根本不关心CHS地址,而是直接使用LBA地址,磁盘内部会自己转换。
从现在开始,磁盘就是一个元素是扇区的一位数组,数组的下标就是每一个扇区的LBA地址。OS使用磁盘可以用一个数字访问磁盘扇区。
8.引入文件系统
引入块概念
硬盘是典型的块设备,操作系统读取硬盘数据的时候,其实是不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block)。
硬盘的每个分区是被划分为一个一个的块,一个块的大小是由格式化的时候确定的,并且不可以更改,最常见的是4KB,即连续八个扇区组成一个块。块是文件存取的最小单位。
磁盘可以看成一个三维数组,三维数组再看出一个一维数组,数组下标就是LBA,每个元素都是扇区
每个扇区都有LBA,那么8个扇区一个块,每一个块的地址也可以计算出来。
已知LBA:块号=LBA/8
已知块号:LBA=块号*8+n(n是第几块扇区)
引入分区的概念
磁盘可以被分成多个分区,以windows观点来看,可能会有一块磁盘并且将它分成CDE盘,则C,D,E就是分区,分区实质上说就是对硬盘的一种格式化。但是Linux的设备都是以文件形式存在,则如何分区呢?
柱面是分区的最小单位,可以利用参考柱面号码的方式来进行分区,本质就是设置每个区的起始柱面和结束柱面的号码。此时可以将硬盘上的柱面进行平铺,想象成一个大平面,