linux 磁盘和文件系统

引言

在介绍linux的磁盘和文件系统之前,我们先来聊聊计算机的开机流程吧。。

1. BIOS:开机主动执行的一个韧体(写到主板上),会识别第一个可开机的设备

2. MBR:第一个可开机设备的第一个扇区的主引导分区块,内含可引导的加载程序

3. 引导加载程序(Boot loader):一个可读取内核文件的可执行软件

4. 内核文件:开始操作系统的功能

MBR

硬盘的0磁头,0柱头,第一个扇区就是MBR(Master Boot Record ,主引导分区),它可以分为三个部分

1. 存放主引导代码,bootloader,446bytes

2. 分区表(partition table):记录整块硬盘的分区的状况,64bytes

3. 硬盘的标示(55AA)

我们知道每一个分区记录项,需要占用16bytes,所以一块硬盘最多可以被分为4个分区。通过下面一个图更加直观来看其结构

磁盘分区

数据写入的地址是盘片,盘片可以细分扇区和柱面,扇区的大小是512bytes。

分区的最小单位是柱面(cylinder),至于为什么要分区:
1. 保证数据的安全性:每一个分区的数据是分开的,比如当你要重装系统c盘,但是需要对某些数据进行保存的时候,可以将需要保存的数据移动到其他盘上,而不会丢失。
2. 系统性能:我们在做分区的时候,一般是连续的柱面作为一个分区,数据的集中性,保证了在读取数据的时候性能更高。
由于只有64bytes来记录分区表,但是如果我们要多于4个的分区时候怎么办,我们采取的策略是使用扩展分区,但是扩展分区只能有一个(操作系统限制),并且无法格式化。
在扩展分区里面分出来的分区叫:逻辑分区(logical partition),逻辑分区数量受到操作系统和硬盘限制。在linux系统中,IDE硬盘最多59个逻辑分区(5-63),SATA硬盘最多11个逻辑分区(5-15),由于1-4是被保留的分区号。

文件系统特性

当我们进行硬盘的分区之后(通过fdisk),还需要进行格式化操作(通过mkfs,make file system),之后操作系统才可以真正的使用这个分区。
然后有人会问,我们为什么需要进行格式化呢,因为各种操作系统设置的文件属性/权限不同,为了存放这些文件所需的数据,因此需要进行格式,以便成为操作系统可以利用的文件系统格式。我来列举几种文件系统:
        1)windows 98 使用的文件系统是FAT(or FAT16);
        2)windows 2000之后所有版本采用的是NTFS;
        3)linux的正规的文件系统是EXT2(linux second extended file system,Ext2fs)
在早期,一个分区是只能够被格式化成一个文件系统,所以我们可以认为一个系统即一个分区。但是由于新技术的利用,我们可以通过LVM与软磁盘阵列(software raid),可以将一个分区格式化成多个文件系统(比如LVM),也可以将多个分区合成一个文件系统(LVM,Raid)。

Ext2文件系统

一个文件系统可以分为3块
1. super block:记录的是inode/block的数量,使用情况,文件系统格式等等信息
2. inode:记录的是文件的属性,一个文件占用一个inode,同时记录文件的数据所在block号码(固定大小128bytes)
3. block:实际记录文件的内容,如果文件过大,会占用多个block
如果把所有的inode和block都放在一块,不容易管理,所以在Ext2文件系统在格式化的时候基本是区分为多个块组(block group),每一个块组都有独立的inode/blcok/superblock系统,如图:

文件系统最前面会有一个启动扇区(boot sector),这个扇区可以安装引导装载程序,这样一来,我们可以将不同的引导装载程序安装到个别的文件系统最前端,而不需要去覆盖块硬盘唯一的MBR,这样也能够制作多重引导。

与目录树的关系

我们已经知道文件的存储方式,那么目录是如何存储的呢,其实linux系统对每一个目录也是会分配一个inode和n个block,在inode里面记录的是目录的相关权限和属性,和指向的block号码,至于目录里面对应的文件列表,以及各个文件的block号都存储在目录的block里面,block里面的内容大致为inode -> 文件名 这样的对应关系。
可想而知,当我们读取某一个文件的时候,是从目录树的根目录开始读取,一层层往下递归,直到读取到指定文件的inode编号。
除了ext2,还有ext3,两者区别在于ext3加入了日志功能,在恢复文件系统时候,更加方便和快速。

VFS

其实一个linux系统里面,有多个不同的文件系统,那么是如何管理这些文件系统的呢?自然需要一个统一的对外接口,linux是通过一个虚拟文件系统(Virtual Filesystem Switch)的内核功能去读取文件系统,通过它来对整个文件系统进行管理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值