linux文件系统(一)

目录

理解硬件

CHS与LBA的互相转换

CHS转LBA

LBA转CHS

引入文件系统

引入“块”概念

引入“分区”概念 

引入 "inode" 概念


理解硬件

要理解文件系统,绕不开磁盘的物理结构,下图是磁盘的结构图

磁盘由一个个盘面组成,每个盘面上的一个个圆环就是磁道(cylinder),再将磁道分为一个个的扇区(sector),扇区就是磁盘存储数据的最小单位,大小通常为512字节,磁头(header)就是用来读写数据的

同一半径处的所有磁道,逻辑上构成了一个柱面

通过确定柱面(cylinder),磁头(header),扇区(sector)就可以确定磁盘上的某个空间位置,这就是CHS寻址方式

逻辑上我们可以把每个一个磁道展开成线性结构

展开了磁道就可以展开柱面,柱面由一系列半径相同的磁道组成

 

柱面展开,接下来就可以把整块磁盘展开了

 

可以看到上图其实就是三维数组,而三维数组是连续存储的

 

所以,每⼀个扇区都有⼀个下标,我们叫做 LBA(Logical Block Address) 地址,其实就是线性
地址。

操作系统使用LBA地址,而要访问磁盘必须使用CHS地址,于是必须要完成两者的转换,这个工作通常由硬件电路来完成

CHS与LBA的互相转换

CHS转LBA

磁头数 * 单磁道扇区数 = 每柱面扇区数

LBA = 柱面号C * 每柱面扇区数 + 磁头号H * 单磁道扇区数 + 扇区号S - 1

扇区号通常从1开始,LBA地址是从0开始

柱面和磁道都是从0编号

总柱⾯,磁道个数,扇区总数等信息,在磁盘内部会⾃动维护,上层开机的时候,会获取到这些参
数。

LBA转CHS

把//记作向下取整除法

C = LBA // 每柱面扇区数 (由CHS转LBA公式看出,两边同除以每柱面扇区数可以让后面的数都变为0)

B = (LBA % 每柱面扇区数) // 单磁道扇区数(取模可以让   柱面号C * 每柱面扇区数   这一项变为0)

S = (LBA % 单磁道扇区数) + 1 (取模可以让前两项都变为0)

从此往后,在磁盘使⽤者看来,根本就不关⼼CHS地址,⽽是直接使⽤LBA地址,磁盘内部⾃⼰
转换。所以:从现在开始,磁盘就是⼀个 元素为扇区 的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了。

引入文件系统

引入“块”概念

其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样
效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可
以更改,最常⻅的是4KB,即连续8个扇区组成⼀个 ”块”。”块”是⽂件存取的最⼩单位。也就是操作系统访问的最小单位

于是我们又将之前抽象出的三维数组按块来分,也就是8个扇区组成一个块,那么块号和LBA也可以互相转换

块号 = LBA / 8;

LBA = 块号 * 8 + n; (n表示块内第几个扇区)

引入“分区”概念 

磁盘还会被分区以便于管理,比如Windows分出的C盘、D盘等,Linux下如何分区呢?

柱面是分区的最小单位,柱⾯⼤⼩⼀致,扇区个位⼀致,那么其实只要知道每个分区的起始和结束柱⾯号,知道每⼀个柱⾯多少个扇区,那么该分区多⼤就知道了

引入 "inode" 概念

ls -l命令可以看到文件的属性

 从左到右依次是权限,硬连接数或者理解为文件的引用计数,文件拥有者,所属组,大小,最后修改时间,文件名

stat命令能看到更详细的信息

可以发现,文件除了他具体的数据,还需要存储这种属性,显然这些属性也必须存储在块中,存储这种属性的区域叫做inode

每个文件都有inode,Linux下⽂件的存储是属性和内容分离存储的
Linux下,保存⽂件属性的集合叫做inode,⼀个⽂件,⼀个inode,inode内有⼀个唯⼀的标识符,叫做inode号 

struct ext2_inode {
    __le16 i_mode;
    /* File mode */
    __le16 i_uid;
    /* Low 16 bits of Owner Uid */
    __le32 i_size;
    /* Size in bytes */
    __le32 i_atime;
    /* Access time */
    __le32 i_ctime;
    /* Creation time */
    __le32 i_mtime;
    /* Modification time */
    __le32 i_dtime;
    /* Deletion Time */
    __le16 i_gid;
    /* Low 16 bits of Group Id */
    __le16 i_links_count; /* Links count */
    __le32 i_blocks;
    /* Blocks count */
    __le32 i_flags;
    /* File flags */
    ...
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值