磁盘与文件系统管理1

  1. 物理机磁盘文件名/dev/sd[a-p]
  2. 虚拟机/dev/vd[a-p](加速作用)
  3. 磁盘第一个扇区(512字节)包括:

    MBR(master boot record):主引导记录 446字节
    分区表:记录硬盘分区状态,64字节
    磁盘有效标志2字节

分区最小单位: 同一磁道
划分信息称为:primary主要分区extended扩展分区

  • 扩展分区最多只能有一个
  • 扩展分区不能格式化
  • 扩展分区目的是使用额外信息来记录分区,继续划分的分区称为逻辑分区
  • 但是逻辑分区的设备名称从5开始/dev/sda5,前4个留给主要分区,主要分区和逻辑分区不能整合在一起

GPT(GUID partition table) 磁盘分区表

解决了操作系统使用磁盘的容量问题

  • BIOS(basic input output system):是一个写入到主板上的固件.是操作系统启动后的第一个程序
  • 固件:嵌入在硬件设备中的软件
  • 根据用户配置去读取硬盘MBR位置的启动引导程序(boot loader)
  • 启动引导程序的目的是加载(load)内核文件
  • 通过内核文件启动操作系统
  1. boot loaderBIOS上的一个软件(主要任务):
  • 提供不同的启动选项(多重引导)
  • 加载内核文件
  • 转交给其他启动引导程序

  • 转交给其他启动引导程序:硬盘不止一个MBR,它还可以安装在每个分区的启动扇区(boot sector),这是多重引导功能的原因

BIOS总结

  1. 每个分区都拥有自己的启动扇区(boot sector)
  2. 实际可启动的内核文件是放在各分区中
  3. 启动引导程序只认识自己分区的内核文件
  4. 启动引导程序可以将工作交个下一个分区的启动引导程序

Linux下所有数据都是以文件的形式来展现

  • Linux系统使用:directory tree目录树架构,但文件数据放在磁盘分区.
  • 挂载就是结合了目录树的架构与磁盘内的数据
  • 挂载:将目录作为磁盘分区的进入点,也就是:进入该目录就能访问到磁盘数据 进入点目录称为挂载点
  • 目录根据自己需求挂载到不同的分区,重要数据单独挂载到别的分区
  • 个人理解:挂载是目录依托在磁盘上
  • 交换分区:用硬盘来模拟内存,加快速度

简单分区:

  1. / + swap + 预留磁盘空间
  2. centos容量大且读写频繁的目录:
    1
    2
    3
    4
    5
    /boot
    /
    /home
    /var
    swap

  • 分区后进行格式化,这样操作系统才能使用文件系统

    高级格式化:由用户文件系统在磁盘的特定区域写入特定数据,已达到初始化磁盘或磁盘分区的

  1. window:FAT文件系统
  2. Linux:ext2 (Linux second extended file system)
  • 文件系统将数据存放到不同的区块中
  • inode:记录文件属性,一个文件一个inode,以及记录文件数据所在区块号码
  • 数据区块:文件实际内容
  • super block:记录文件系统整体信息,inode与数据区块的总量及消耗

dumpe2fs -h /dev/sda1 //查看ext文件系统superbolck信息

blkid//显示被格式化的设备


  • inode存放所有数据区块的号码能让系统一次性读取出来
  • FAT文件系统,每个区块号码都在上一个区块,相当于链式读取数据,导致文件读取速度慢,且数据碎片多
  • 碎片整理:区块过于离散,**整理碎片:**将同一个文件的所属区块都集合在一起

ext2文件系统(inode)

ekCIDx.png

  1. Boot sector:每个分区的引导程序,剩下的就是文件系统
  2. ext2格式化的时候区分为多个区块群组(block group)
  • 每个区块只能放一个文件的数据
  • 一个文件一个inode,一个Inode可以指向多个block

    inode Table记录了:

  1. rwx
  2. owner group
  3. 修改时间,特性标识
  4. 所指向的block
  • 当文件太大时,一个inode记录不下所有的block的号码,就会间接的将所指block来存储其他block的号码.间接指向所有block
  • inode bitmapblock bitmap,记录已经使用的inode号码/block的号码,以及未使用的

ls -l /lib/modules/$(uname -r)/kernel/fs 查看linux支持的文件系统

cat /proc/filesystems 查看系统目前加载到内存中支持的文件系统

df:列出文件系统的整体磁盘使用量

  • df读取的是super block中信息,速度快
    1
    2
    -a 列出所有文件系统
    -h 自动调整格式
  • /proc: Linux系统加载系统需要的系统数据挂载在内存中,所以磁盘占用为0
  • /dev/shm:利用内存虚拟出来的磁盘空间,占物理内存的一半,访问速度快

du:到文件系统查所有的文件数据.列出所有文件的容量,但是只显示目录的容量,

1
2
3
-a 文件和目录都显示
-s 仅列出所有容量
-h 自动调整格式

文件访问顺序: ls -l /etc/passwd

  1. 先访问/inode后,通过权限了在访问其block
  2. 得到/etcinode,通过权限后再 访问其block
  3. 得到passwdinode,根据权限判断是否能访问

日志式文件系统的功能

  • block inode表称为数据存储区,超级区块\inode对照表\区块对照表称为元数据
    新增文件步骤:
  1. 判断目录权限,然后创建文件.
  2. 根据inode对照表找到没使用的inode号码,并来写入文件权限
  3. 根据区块对照表找到未使用的区块号码,写入实际数据到区块中,更新inode指向的区块

  1. 专门记录写入或修改文件时的步骤
  2. 当断电时,系统检查日志来修复文件系统,而不是对整个文件系统进行检查

文件系统运行

  • 数据都要加载到内存经由CPU处理,由于磁盘与内存速度差距.不能同时处理
  1. linux中异步处理方式:
  • 内存区段中文件未修改设置为clean,被修改设置为dirty,系统定时将内存中设置为dirty的数据写回到磁盘中.(此时所有操作还在内存中)

VFS(virtual filesystem switch) 虚拟文件系统交换

  • 每个目录都可能作为文件系统(磁盘分区)的挂载点,所以系统上运行着多种文件系统,
  • 每个文件系统都有独立的inode,区块,超级区块,要挂载到目录上才能使用
  • Linux 内核通过VFS管理这些文件系统
  • 当我们切换到不同目录下,可能属于不同的文件系统,此时由VFS帮助我们调用不同文件系统模块

XFS文件系统(日志文件系统)

  • centos 7将此日志文件系统作为默认文件系统,被用于高容量磁盘的文件系统
  • ext4缺点:格式化慢,ext4 一开始就将inode与数据区块 给 固定好了
  • XFS:格式化块,inode和数据区块都是动态分配

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!