Linux磁盘与文件系统管理
Linux磁盘与文件系统管理
Linux磁盘与文件管理系统 2017-06-12 09:41:28 64 0 0
一:磁盘与储存设备
image实际运行时,主轴马达让盘片转动,然后机械手臂可伸展让磁头在盘片上头进行读写的动作。
由于单一盘片的容量有限,因此有的磁盘内部会有两个以上的盘片
image每个小区块就是磁盘的最小物理储存单位,称为扇区(sector)
同一个同心圆的扇区组成的圆就是所谓的 磁道(track)
由于磁盘里可能有多个盘片,因此所有盘片上的同义磁道可以组成 柱面(cylinder)
因为外圈的扇区较多,数据的读写通常会由外圈开始往内写
扇区容量 512Byte -- 4kByte
SATA接口:
imageSAS接口:
早期工作站或者大型电脑,为了读写速度和稳定性,大多使用scsi这种高阶接口
发展值串行式SCSI(Serial Attached SCSI, SAS)
速度快于sata 而且连接的sas硬盘的盘片的转速与传输的速度也比sata好
imageUSB接口:
image固态硬盘(Solid State Disk):
传统硬盘需要驱动马达转动盘片-->造成严重的磁盘读取延迟(你需要知道数据在哪个扇区上,然后命令马达开始转,然后再让磁头读取正确的数据。如果数据放置的比较离散,读取的速度延迟会更明显)
于是又厂商用闪存制作大容量的设备,接口也是sata,sas。虽然已经不能成为是磁盘,都是内存。
二:各硬件设备在linux中的文件名
在Linux中所有设备都被当做文件来对待
image三:磁盘分区
正常的实体机器大多使用/dev/sd[a-p]
虚拟机环境下,为了加速,并不是正规的磁盘界面。可能会使用/dev/vd[a-p]
但是没有一定的顺序,与实际插槽代号关系不大,使用侦测到的顺序来决定设备文件名。
整颗磁盘的第一个扇区特别重要,因为记录了整颗磁盘的重要信息。
早期磁盘第一个扇区里面含有重要信息称为MBR(Master Boot Record)格式
后来由于磁盘容量不断增大,造成读写困难,后来又多了一种新的磁盘分区格式成为GPT(GUID partition table)
MBR 与 GPT 磁盘分区表
所有盘片的同一磁道被成为柱面,通常为文件系统的最小单位,也是分区的最小单位
但是近年来GPT 可以达到64bit记录功能的分区表,现在甚至可以适用扇区作为分区单位。
MBR格式分区格式与限制
早期的Linux为了相容与windows的磁盘,因此使用的是支持windows的MBR(主要开机记录区)的方式来处理
开机管理程序 与 分区表 通常放在磁盘的第一扇区
第一扇区包含:
- 主要开机记录表MBR,可以安装开机管理程序的地方有446Byte
- 分区表(partition table): 记录整颗硬盘分区的状态,有64Bytes
由于分区表所在的区块仅有 64 Byte 容量,因此最多仅能有四组记录区,每组记录了该区段的起始于结束柱面号码。
image上图的分区在linux的设备名为:
P1:/dev/sda1 字母后会再接一个数字,该数字与该分区的位置有关
P2: /dev/sda2
p3: /dev/sda3
...
- 所谓的“分区”只是针对64Bytes 的分区表进行设置
- 磁盘默认的分区表仅能写入四组分组信息
- 分为主要(Primary)或延伸(Extendted)分区
- 分区的最小单位通常为柱面
- 主要分区和延伸分区最多可以有四个
- 延伸分区最多只能有一个(操作系统的限制)
- 能够被格式化后作为储存分区的为主要分区和逻辑分区,延伸分区无法被格式化。
分区的作用:
- 数据的安全性
- 系统的性能,加入当数据需要读取自该分区时,磁盘只会搜索该分区范围内的柱面--即将数据集中,有助于读取 的速度和性能
用额外的扇区记录更多的分区信息
延伸分区并不是只占一个区块,而是分布在每个分区的最前面的几个扇区来记载分区信息
由延伸分区继续切出来的分区-- 逻辑分区,可使用的柱面范围为延伸分区所设置的范围
image逻辑分区一般从5开始
image上图蓝色部分可以整合为一个新的分区,因为同属延伸分区的逻辑分区,只要将两个分区删除,再重新建立一个新的分区,就能在不影响其他分区的情况下,将两个分区的容量整合为一个
下图不可以,因为两部分分别属于主分区与逻辑分区,除非将延伸分区破坏掉再重新分区,会影响到所有的逻辑分区。
-
第一扇区记录的分区记录的MBR非常重要,几乎只要读取硬盘都会先有这个分区读起。
-
P+P+P+E 将剩下的分给延伸分区,再以逻辑分区规划逻辑分区。同时,考虑到磁盘的连续性,一般建议将延伸分区的柱面号码分配在最后面的柱面内。
因为MBR分区每组分区表仅有16Bytes ,因此可记录的信息相当有限,所以出现问题:
- 操作系统无法抓取到2.2T 以上的磁盘容量
- MBR仅有一个区块,若被破坏后,经常无法或很难救援
- 开机区块仅446Bytes,无法容纳较多的程序码
GUID partition 磁盘分区表
目前已有4K的扇区,逻辑区块位址*(Logical Block Address,LBA)
GPT将所有磁盘区块以LBA(默认512Bytes) 来规划,而第一个LBA0
GPT用了34 个LBA 记录分区信息,而且磁盘最后的33个LBA也拿来作为备份。
image-
LBA0(MBR相容区块)
与MBR相似,也分为两个部分,储存了第一阶段的开机管理程序,而在元来的分区表分区内,相容模式,仅放入一个特殊标志的分区(表明GPT),没有gtp分区的磁盘管理分区不能修改此分区的信息
-
LB1(GPT表头记录)
这个部分记录了分区表本身的位置与大小,同时记录的备份用的GPT分区方位的位置,以及分区表的检验机制码(操作系统可以据此判断gpt是否争取,错误的话就读取备份)
-
LBA2-33(实际分区记录信息处),总共可以有432/4=128,GPT在每笔记录中分别提供了64bit记录开始结束的扇区号码,对于单一分区来说最大的容量限制为264512 = 233TB,没有所谓的主分区,逻辑分区
二 :
1 文件系统特性
磁盘分区后需要格式化,之后操作系统才能使用这个文件系统。
原因:因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区格式化,成为操作系统能够利用的“文件系统格式”
传统的磁盘与文件系统应用中,一个问去就是只能被格式化成为一个文件系统。所以我们可以说或一个file system就是一个partition 。
现在有LVM与软件磁盘阵列(sortware raid) 这些技术可以将一个分区格式化为多个文件系统。也能将多个分区合并为一个文件系统(LVM,RAID)!
通常可以称呼一个可被挂载的数据为一个文件系统而不是一个分区
文件系统通常会将这两部分的数据分别存放在不同的区块。
- superblock 记录此filesystem 的整体信息,包括inode与block的总量,使用量,剩余量。
- inode 记录文件的属性,一个文件记录一个inode,同时记录此文件的数据所在的block 号码
- 实际记录文件的内容,若文件太大,会占用多个。
- inode 和 block 都有编号,每个文件占用一个inode,有block号码,可以迅速找到数据读取
[图片上传失败...(image-2fbac8-1541773585460)]
所谓的索引式文件系统
作为对比 一般u盘为FAT没有inode
image如果一个文件写入的block分散的太过厉害是,磁头将需要多转几圈才能读到所有数据
- - 磁盘重组:因为文件写入的block太过离散,此时文件读取信能会变的很差,可以通过磁盘重组将文件重新汇聚在一起,FAT经常需要磁盘重组
2 Linux的EXT2文件系统(inode)
[图片上传失败...(image-5d56dc-1541773585460)]
ext2文件系统在格式化的时候基本上区分为多个区块群组(BLOCK GROUP),便于管理
最开始有一个开机扇区*boot sector),可以安装开机管理程序,能够将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整颗磁盘唯一的MBR,才能制作出多重开机的环境。
-
data block
[图片上传失败...(image-49ef96-1541773585460)]
基本限制:
-
原则上block的大小与数量在格式化完就不能再改变了,除非重新格式化;
-
每个block最多只能放置一个文件的数据,同一文件占用多个
-
若文件小于block,则block的剩余容量就不能再使用了(会浪费磁盘空间),小文件越多,越浪费
-
而block较小,大型文件会占用更多的block,而inode也要记录更多的拜咯参考号码,此时可能导致文件系统不良的读写性能
-
inode table
- 每个inode固定大小为128Bytes(新的ext4和xfs可设置到256)
- 每个文件占用一个inode,因此文件系统能穿件的文件数量与inode数量有关
- 系统在读取文件时先找到inode,然后确定使用者的权限是否符合,然后才开始读取数据
因为inode固定大小的限制,所以使用间接的方法:使用额外的block作为号码记录,如果文件太大
imagesuperblock
- block和inode的总量
- 未使用与已使用的inode和block量
- block和inode的大小
- filesystem 的挂载时间,最近一次写入时间,最近一次检验磁盘fsck的时间等文件系统相关信息
- 一个valid bit数值,若已经被挂载valid为0否则为1
- 可用dumpe2fs 指令调出来观察
- 一个文件系统应该仅有1个superblock 其他作为备份
**Filesystem Description **
- 每个block group 的开始于结束的block号码,以及说明 每个区段的superblock,bitmap,inode map, data block)
block bitmap
- 可以知道哪里有空的block ,可以在新增文件的时候用到
- 同时删除某些文件的时候,相对的block号码的标志要改为未使用
inode bitmap(inode 对照表)
- 与block bitmap 类似
4 与目录树的关系
当在Linux的文件系统创建一个目录时,文件系统会分配一个inode与至少一块block给该目录
inode记录该目录的相关权限和属性,以及分配到的block号码
而block这是记录在这个目录下的文件名,
image文件名记录在目录的block中
若文件太过离散,还是会发生读取效率低落的问题。可以将整个filesystem内的数据全部复制出来,将filesystem重新格式化,再将数据复制回去即可解决该问题。
此外若果filesystem真特别大,当一个文件分别记录在这个文件系统的最前面与最后面时,磁头移动幅度过大,也会造成读取性能的低落。
5 EXT2/EXT3/EXT4文件的存取与日志式文件系统的功能
在创建一个新目录时:
1 先确定使用者对于新增文件的目录是否具有wx的权限
2 根据inode bitmap 找到没有使用的inode号码,将新的文件权限/属性写入;
3根据block bitmap找到文件中没有使用的block号码,并将实际的数据写入block中,且更新inode的block指向数据;
4将刚刚写入的inode与block数据同步更新inode bitmap 与block bitmap 更新super block的内容
数据存放区:inode table data block
中介数据: super block block bitmap inode bitmap
数据的不一致状态( Inconsisten)状态
当新增动作被中断(突然断电,系统核心发生错误),写入的数据仅有 inode table 以及data block,最后一个同步更新中介数据的步骤没有做完,此时会发生metadata的内容与实际存放区不一致的情况。
在早期的ext2中,系统会在开机的时候 根据 super block 中巨鹿的 valid bit 以及 file system state( clean or not)
决定是否进行数据的一致性检查,e2fsck
这样的检查非常的费时,需要比对 整个 filesystem
日志文件系统的兴起 (Journaling filesystem)
为了避免上述情况,在filesystem 中规划处一个区块,该区块专门记录写入或者修订文件时的步骤
在记录过程中发生了问题,系统只需检查日志记录区块,就能找到发生问题的区块
ext3/ext4
6 Linux文件系统的运行
Linux的非同步处理:
当系统载入一个文件到内存后,如果该文件没有被修改,状态为(clean),如果被修改(dirty),系统会不定时的将内存中设置为dirty 的文件写入磁盘。
也可以用 sync 指令来手动强迫写入磁盘
- 系统会将常用的文件数据放到内存的缓冲区,以加速文件系统的读/写,因此linux的实体内存最后都会被用光
- 正常关机是,关机指令主动调用 sync 将内存的数据写回磁盘
- 若非正常关机,由于数据尚未写回磁盘内,因此开机后需要花很多时间检查磁盘,甚至可能导致文件系统(磁盘的损毁)
7 挂载点的意义 mount point
每个filesystem 都有独立的inode/block/superblock 等信息,这个文件系统要能连接到目录树才能被使用。
将文件系统与目录树结合的动作成为挂载
挂载点一定是目录,该目录为进入该文件系统的入口。
**8 **
查看你的linux 支持的文件系统有哪些,可以查看
ls -l /lib/modules/$(uname -r )/kernel/fs
cat /proc/filesystems 可以查看目前已载入内存中的文件系统
image9 XFS文件系统简介
centOS7 开始使用XFS
ext文件系统的缺陷:
- 支持度很广,但是格式化非常慢 :在格式化时,需要预先规划处所有的inode;block/meta data,没有动态配置的做法,由于现在硬盘容量激增,格式化时候预先分配inode block就需要花费巨大时间
二:文件系统的简单操作
image image- /proc 挂载点是linux 系统所需要载入的系统数据
- /dev/shm 利用内存虚拟出来的磁盘空间
2 实体链接与符号链接 :ln
- Hard Link (实体链接)
- 每个文件会占用一个inode 文件内容由indoe的记录来指向;想要读取该文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取
- 其实文件名只与目录有关,文件内容则与inode有关
- hard link 只是在某个目录的block新增一个关联文件名链接到某inode号码的关键记录,即不会增加inode也不会耗用block
- 不能跨 filesystem
- 不能link 目录
- Symbolic Link(符号链接)
- 就是创建一个独立文件,让数据的读取指向其link 的文件名
- 由symbolic 创建的文件为一个独立的新文件,会占用inode和block
- 可以链接目录,当进入链接目录时,其实进入的是链接的目录
要制作链接文件 使用ln
image三 磁盘的分区、格式化、检验与挂载
当系统里新增一块硬盘时
1 对磁盘进行分区,创建可用的partition
2 对该partition格式化,以创建系统可用的filesystem
3可以对刚创建好的filesystem检查
4在Linux系统上,需要创建挂载点,即目录,并将其挂载上来
1 观察磁盘分区状态
- **lsblk **
-
UUID> 全域单一识别码(universally unique identifer) 可以拿来作为挂载或者使用该设备/文件系统
-
**使用 blkid **
-
parted 观察分区表
2 磁盘分区 gdisk/fdisk
MBR -- fdisk
**GPT -- gdisk **
参考鸟哥
**3 make filesystem **
mkfs
image4 文件系统检验
image参考鸟哥 第七章
文件系统挂载与卸载