硬盘是计算机必备组成部分,现在的硬盘分固态硬盘和传统机械硬盘,这里要介绍的是传统机械硬盘。
一.硬盘最基本结构
1.硬盘是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。每个磁道被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面,如下图所示:
2.MBR
MBR:Master Boot Record,即硬盘的主引导记录,位于0磁道0扇区,大小512bytes。
boot loader:引导加载器存放在MBR的前446bytes,用于引导操作系统。
分区表:存放在boot loader之后的64bytes,用于存放分区信息。
2bytes: 55AA(分区有效标识)
二.磁盘的分区管理
1. 由于分区表只有64bytes,一个分区占用大小16bytes,所以只能创建4个分区,通常使用 3主分区+1扩展(N个逻辑分区) 的分区模式。使用fdisk命令工具进行分区。
fdisk -l [device…] 查看设备分区情况
fdisk device 进入对设备磁盘进行操作
常用的操作指令如下:
d delete a partition 这是删除一个分区的动作;
l list known partition types 是列出分区类型,以供我们设置相应分区的类型;
m print this menu 是列出帮助信息;
n add a new partition 添加一个分区;
p print the partition table 列出分区表;
q quit without saving changes 不保存退出;
t change a partition's system id 改变分区类型;
w write table to disk and exit 把分区表写入硬盘并退出;
2.创建分区步骤:
1).先输入n创建分区
2).选择分区 e扩展分区 p主分区
3).确认创建的分区号
4).确认起始和终止柱面
5).调整分区类型,L查看分区类型
6).最后w把分区表写入硬盘并退出
3.把分区信息同步到内核
partx -a /dev/DEVICE
上述错误是正常现象用cat /proc/partitions 查看内核中是否已存在该分区信息
三.文件系统
在告知系统我的 partition 所在的起始与结束磁柱之后,之后则需要将 partition 格式化为我的操作系统认识的文件系统,常用的文件系统如下:
Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap
swap: 交换分区
光盘:iso9660
Windows:fat32, ntfs
Unix: FFS, UFS, JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2
分布式文件系统:ceph, moosefs, mogilefs, GlusterFS, Lustre
linux默认都支持ext文件系统,当一个 ext2 的 filesystem 被建立时, 他拥有 superblock / group description / block bitmap / inode bitmap / inode table / data blocks 等等区域。要注意的是,每个ext2 filesystem 在被建立的时候,会依据 partition 的大小, 给予数个 block group ,而每个 block group 就有上述的这些部分。整个 filesystem 的架构可以下图展现:
为了简化,假设一个文件系统仅有1个blockgroup。
block:用来储存数据的最小单元,Block 的大小为 扇区 的 2 的次方倍数。
inode:每个文件都对应着一个inode,inode存储着文件的元数据
SuperBlock:记录整个 filesystem 相关信息,block和inode的总量和使用情况等等。
Group Description:记录 blockgroup 由何处开始记录。
Block bitmap:记录哪个 block 有没有被使用。
Inode bitmap:此处记录那个 inode 有没有被使用。
Inode table:记录每个inode number对应文件所对应的metadata(元数据)。
Data Blocks: block 数据存放区。
可以通过dumpe2fs 分区 查看上述描述的信息。
当我们新增一个文件或目录时:
1. 根据 inode bitmap / block bitmap 的信息,找到尚未被使用的 inode 与 block , 进而将档案的属性与数据分别记载进 inode 与 block ;
2. 将刚刚被利用的 inode 与 block 的号码 (number) 告知 superblock、inode bitmap、block bitmap 等,让这些 metadata 更新信息。
原创文章,作者:zxhy,如若转载,请注明出处:http://www.178linux.com/18340