鸟哥的linux私房菜——第8章 Linux磁盘与文件管理系统

一、EXT2文件系统

1. 硬盘组成和分区复习

  • 扇区是最小的物理存储单元
  • 第一个扇区最重要,包含硬盘主引导记录MBR和分区表  //64 bytes的分区表仅能记录共四条主分区或扩展分区
  • 柱面是分区的最小单元
  • /dev/sd[a-p][1-15]:SCSI,SATA,USB,Flash等接口的的磁盘文件名
  • /dev/hd[a-d][1-63]:IDE接口的磁盘文件名
  • 磁盘分区:指定分区的起始与结束柱面
  • 主分区和扩展分区最多只有四个,其中扩展分区最多只有一个
  • 扩展分区可以进一步再分为逻辑分区,能被格式化的仅有主分区和逻辑分区  //扩展分区无法被格式化

2. 文件系统特性

(1)分区后需要被格式化,才能被操作系统使用  //不同操作系统的文件系统并不相同

(2)文件系统中的常用数据

  • super block超级块:记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
  • block:实际记录文件的数据内容,若文件太大时,会占用多个block

(3)文件系统分类

  • 索引式文件系统,如EXT2(一次性获取所有block索引)

  • FAT文件系统,如U盘(依次逐个block索引)  //当block过于分散时,需要进行“碎片整理”

3. Ext2文件系统  //文件系统一开始就将inode与block规划好了(除非重新格式化),Ext2一般划分多个块组(block group)

注:启动扇区可以安装引导装载程序,制作多重引导

(1)数据块(data block)  //存放具体的文件内容

  • block的大小和数量在格式化完就不能再改变
  • 每个block内最多只能够放置一个文件的数据  //当文件大于block的大小,一个文件会占用多个block;当文件小于block大小时,该block内剩余空间不能被其他文件使用(造成磁盘空间浪费

(2)inode表格  //inode的内容主要记录文件的属性和文件实际数据的block位置,每个inode大小固定为128bytes

  • 该文件的访问模式(rwx)
  • 该文件的所有者与组(owner、group)
  • 该文件的大小
  • 该文件创建或状态改变的时间(ctime)
  • 最近一次的读取时间(atime)
  • 最近修改的时间(mtime)
  • 定义文件特性的标志(flag),如SetUID等
  • 该文件真正内容的指向(pointer)  //block

(3)Superblock 超级块  //记录整个文件系统相关信息

  • block与inode的总量
  • 未使用与已使用的inode/block数量
  • block与inode的大小
  • 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
  • 一个validbit数值,文件系统已挂载为0,否则为1

注:文件系统仅在第一个block group中有一个superblock,后续block group中的superblock作为备份救援

(4)文件系统描述

  • 描述每一个块组block group的开始与结束的block号码
  • 描述每个区段(super block, bitmap, inodemape, data block)分别位于哪些block号码之间

(5)块对照表(bitmap):记录block的使用情况(使用和未使用),在使用过程中对“空/未使用”的block进行分配

(6)inode对照表(inodemap):记录inode的使用情况

(7)文件系统查询命令

  • dumpe2fs:输出文件系统每个区段的信息  //用法:dumpe2fs [-bh] 设备文件名
  • df:列出目前挂载的设备

(8)与目录树的关系

目录:对于每个目录,ext2会分配一个inode与至少一块block

  • inode记录目录的相关权限与属性,并记录分配的block号码  //可使用 ls -i 查看文件占用的inode号码
  • block记录目录下的文件名和inode对照表,当一个block无法容纳对照表时,会分配多个block

文件:对于每个文件,ext2会分配一个inode和相对于文件大小的block数量,注意inode的间接记录区也需要分配block

注:inode本身并不记录文件名,文件名与inode的对照表记录在目录的block中  //文件名只与目录有关,文件内容则与inode有关

目录树读取:由于文件名记录在目录的block中,所以访问文件需要先经过目录的inode和block,才能访问到文件

 (9)数据区段分类

  • inode table、data block:数据存放区域
  • super block、block bitmap、inode bitmap:中间数据(metadata)  //经常变动

(10)日志文件系统:当遇到突发停电等不明原因导致的系统中断,可能会产生meta data与实际数据不一致的情况,可以通过查找日志记录进行一致性检查,进行系统的快速修复

常用的日志记录步骤包括

  • 预备
  • 实际写入
  • 结束

注:Linux使用异步处理的方式进行文件修改,即先写入内存,再写回磁盘,提高写入效率

(11)挂载点:挂载点一定是目录,该目录为进入相应文件系统的入口  //文件系统最顶层的目录的inode一般为2号

(12)查看文件系统

  • Linux支持的文件系统:ls -l /lib/modules/$(uname -r)/kernel/fs
  • 已加载的文件系统:cat /proc/filesystems

(13)虚拟文件系统VFS:管理所有的文件系统,避免用户自行设置如何读取不同的文件系统  // /proc为加载的系统数据,挂载在内存中

二、文件系统的简单操作

1. 磁盘与目录的容量

(1)df:列出文件系统的整体磁盘用量

(2)du:评估文件系统的磁盘用量(常用于目录

2. 连接文件:ln命令

(1)hard link:硬连接或实际连接,在某个目录的block下新建一条“新文件名到已分配的某inode号码”的关联记录,仅产生新文件名,不产生新文件,无需分配新的文件inode

优势:删除任何一个文件名后,仍能访问到文件的inode和block内容,仅会改变文件连接数

缺点:不能连接到目录;不能跨文件系统

(2)symbolic link:符号连接,即快捷方式,创建一个独立的文件,该文件将数据的读取指向它连接的文件的文件名(指向作用),需要分配文件inode和block

缺点:源文件名删除后,该连接将无法打开

注:针对目录的连接数量,新建目录时,默认的连接数为2(如/tmp和/tmp/.),上层目录连接数增加1(如/tmp/..)

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

1. 磁盘分区:fdisk [-l] 设备名称  //可以先用 df 查询挂载的磁盘文件名

注:当需要重启以读取新的分区表时,可以使用 partprobe 命令强制让内核重新读取新的分区表

2. 磁盘格式化:mkfs [-t 文件系统格式] 设备文件名  //make file system

3. 磁盘检验:fsck [-t 文件系统] [-ACayt] 设备名称  //file system check

注:执行fsck时,被检查的分区不可挂载到系统上,务必处于卸载的状态

4. 磁盘挂载与卸载

注意事项

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  • 单一目录不应该重复挂载多个文件系统
  • 作为挂载点的目录理论上应该为空目录  //若不是空目录,则挂载文件系统后,原目录下的东西会被暂时隐藏直至分区被卸载

磁盘挂载:mount 设备文件名 挂载点  //常用,更多参考man mount

  • mount -o remount,rw,auto /  将根目录 / 重新挂载,并加入参数rw与auto
  • umount [-fn] 设备文件名或挂载点  卸载设备文件

四、设置开机挂载

1. /etc/fstab:配置文件,包含开机自动挂载有的挂载参数,file system table

系统挂载的限制

  • 根目录/必须第一个挂载
  • 所有挂载点在同一时间之内,只能挂载一次
  • 所有分区在同一时间之内,只能挂载一次  //利用 df 查看是否已挂载
  • 卸载前,工作目录必须位于挂载点之外

注:实际文件系统的挂载时记录到/etc/mtab和/proc/mounts文件中的

2. 特殊设备loop挂载(镜像文件不刻录就挂载使用

mount -o loop 镜像文件 挂载点目录

五、内存交换空间swap的构建  //swap:应付物理内存不足

1. 分区:fdisk + 修改system ID:82 —— Linux swap + partprobe

2. 格式化: mkswap 设备文件名

3. 使用:swapon 设备文件名

4. 查看:free命令查看内存使用情况

 

posted @ 2019-01-28 20:47  从头再来,不要慌  阅读(513)  评论(0编辑  收藏  举报