美文网首页Linux
Linux磁盘与文件系统管理

Linux磁盘与文件系统管理

作者: wangchuang2017 | 来源:发表于2018-11-09 22:30 被阅读4次

Linux磁盘与文件系统管理

Linux磁盘与文件管理系统 2017-06-12 09:41:28 64 0 0

一:磁盘与储存设备

image

实际运行时,主轴马达让盘片转动,然后机械手臂可伸展让磁头在盘片上头进行读写的动作。

由于单一盘片的容量有限,因此有的磁盘内部会有两个以上的盘片

image

每个小区块就是磁盘的最小物理储存单位,称为扇区(sector)

同一个同心圆的扇区组成的圆就是所谓的 磁道(track)

由于磁盘里可能有多个盘片,因此所有盘片上的同义磁道可以组成 柱面(cylinder)

因为外圈的扇区较多,数据的读写通常会由外圈开始往内写

扇区容量 512Byte -- 4kByte

SATA接口:

image

SAS接口:

早期工作站或者大型电脑,为了读写速度和稳定性,大多使用scsi这种高阶接口

发展值串行式SCSI(Serial Attached SCSI, SAS)

速度快于sata 而且连接的sas硬盘的盘片的转速与传输的速度也比sata好

image

USB接口:

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

用额外的扇区记录更多的分区信息

延伸分区并不是只占一个区块,而是分布在每个分区的最前面的几个扇区来记载分区信息

由延伸分区继续切出来的分区-- 逻辑分区,可使用的柱面范围为延伸分区所设置的范围

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

image
  • 每个inode固定大小为128Bytes(新的ext4和xfs可设置到256)
  • 每个文件占用一个inode,因此文件系统能穿件的文件数量与inode数量有关
  • 系统在读取文件时先找到inode,然后确定使用者的权限是否符合,然后才开始读取数据
image.png

因为inode固定大小的限制,所以使用间接的方法:使用额外的block作为号码记录,如果文件太大

image

superblock

  • 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 类似
image

4 与目录树的关系

当在Linux的文件系统创建一个目录时,文件系统会分配一个inode与至少一块block给该目录

inode记录该目录的相关权限和属性,以及分配到的block号码

而block这是记录在这个目录下的文件名,

image

文件名记录在目录的block中

具体的读取过程看书355

若文件太过离散,还是会发生读取效率低落的问题。可以将整个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 可以查看目前已载入内存中的文件系统

image

9 XFS文件系统简介

centOS7 开始使用XFS

ext文件系统的缺陷:

  • 支持度很广,但是格式化非常慢 :在格式化时,需要预先规划处所有的inode;block/meta data,没有动态配置的做法,由于现在硬盘容量激增,格式化时候预先分配inode block就需要花费巨大时间

二:文件系统的简单操作

image image
  • /proc 挂载点是linux 系统所需要载入的系统数据
  • /dev/shm 利用内存虚拟出来的磁盘空间
du image

2 实体链接与符号链接 :ln

  • Hard Link (实体链接)
  • 每个文件会占用一个inode 文件内容由indoe的记录来指向;想要读取该文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取
  • 其实文件名只与目录有关,文件内容则与inode有关
  • hard link 只是在某个目录的block新增一个关联文件名链接到某inode号码的关键记录,即不会增加inode也不会耗用block
  • 不能跨 filesystem
  • 不能link 目录
image
  • Symbolic Link(符号链接)
  • 就是创建一个独立文件,让数据的读取指向其link 的文件名
  • 由symbolic 创建的文件为一个独立的新文件,会占用inode和block
  • 可以链接目录,当进入链接目录时,其实进入的是链接的目录
image

要制作链接文件 使用ln

image

三 磁盘的分区、格式化、检验与挂载

当系统里新增一块硬盘时

1 对磁盘进行分区,创建可用的partition

2 对该partition格式化,以创建系统可用的filesystem

3可以对刚创建好的filesystem检查

4在Linux系统上,需要创建挂载点,即目录,并将其挂载上来

1 观察磁盘分区状态

  • **lsblk **
image
  • UUID> 全域单一识别码(universally unique identifer) 可以拿来作为挂载或者使用该设备/文件系统

  • **使用 blkid **

  • parted 观察分区表

2 磁盘分区 gdisk/fdisk

MBR -- fdisk

**GPT -- gdisk **

参考鸟哥

**3 make filesystem **

mkfs

image

4 文件系统检验

image

参考鸟哥 第七章

文件系统挂载与卸载

相关文章

网友评论

    本文标题:Linux磁盘与文件系统管理

    本文链接:https://www.haomeiwen.com/subject/pfsaxqtx.html