Linux磁盘与文件系统管理

认识ext2文件系统

索引式文件系统

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

data block(资料区块)

data block是用来放置档案内容数据的地方

  • 原则上,block的大小与数量载格式化完就不能再改变
  • 每个block内最多只能放置一个档案的数据
  • 若档案大于block,则一个档案会占用多个block
  • 若档案小于block,则该block的剩余容量就不能再被使用

inode table(inode表格)

inode的内容至少有

  • 该档案的存取模式(read/write/excute)
  • 该档案的拥有者与群组(owner、group)
  • 该档案的容量
  • 该档案建立或状态改变的时间(ctime)
  • 最近读取时间(atime)
  • 最近修改时间(mtime)
  • 定义档案特性的flag,如SetUID
  • 该档案真正内容的指向

inode的特点

  • 每个inode的大小均固定为128bytes
  • 每个档案都仅会占用一个inode
  • 文件系统能够建立的档案数量与inode的数量有关
  • 系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能开始实际读取block的内容`

superblock(超级区块)

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

Filesystem Description(文件系统描述说明)

这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间

block bitmap(区块对照表)

记录了所有block的使用信息

inode bitmap(inode对照表)

记录了所有inode的使用信息

dumpe2fs [-bh] 装置文件名

-b:列出保留为坏轨的部分
-h:仅列出superblock的数据,不会列出其他区段内容

日志式文件系统

  • 预备:当系统要写入一个档案时,会先在日志记录某个档案准备要写入的信息
  • 实际写入:开始写入档案的权限与数据,开始更新metadata的数据
  • 结束:完成数据与metadata的更新后,在日志记录区块当中完成该档案的记录
  • metadata(中介资料):super block、block bitmap、inode bitmap等
  • 数据存放区域:inode block、data block

Linux文件系统的运作

  • 系统会将常用的档案数据放置到主存储器的缓冲区,以加速文件的读写
  • 因此Linux的物理内存最后都会被用光
  • 可以手动使用sync来强迫内存中设定为Dirty的档案回写当磁盘中
  • 正常关机时,关机指令会主动呼叫sync来将内存的数据回写入磁盘内
  • 不正常关机,由于数据尚未回写到磁盘内,因此重新启动后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁

Linux VFS(Virtual Filesystem Switch)

文件系统的简单操作

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

df [-ahikHTm] [目录或文件名]

-a:列出所有文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以易阅读的GBytes、MBytes、KBytes等格式自行显示
-H:以M=1000K取代M=1024K的进位方式
-T:连同该partition的filesystem名称也列出
-i:不用硬盘容量,而以inode数量来表示

常用:hi

du:评估文件系统的磁盘使用量

du [-ahskm] 档案或目录名称

-a:列出所有档案与目录容量,因为默认仅统计目录底下的档案量而已
-h:以易读的方式显示
-s:列出总量,而不列出每个目录占用容量
-S:不包括子目录下的总计
-k:以KBytes列出
-m:以MBytes列出

实体链接与符号链接:ln

  • Hard Link:实体链接,直接链接inode,不使用block,不能跨filesystem,不能link目录
  • Symbolic Link:符号链接,创建新档案资源读取指向原档,占用inode与block
ln [-sf] 来源文件 目录文件

-s:默认hard link,加上后symbolic link
-f:如果目标文件存在时,就主动将目标文件直接移除后再建立

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

磁盘分区:fdisk

fdisk [-l] 装置名称

-l:输出后面接的装置所有的partition内容。若仅有fdisk -l时,则系统将会把整个系统内能够搜索到的装置的partition均列出来

无法处理大于2TB的磁盘分区槽

磁盘格式化:mkfs

mkfs [-t 文件系统格式] 装置文件名

-t:可以接文件系统格式,例如ext3、ext2、vfat等(系统支持才有效)

磁盘检验:fsck、badblocks

fsck

fsck [-t 文件系统] [-ACay] 装置名称

-t:后接文件系统,通常会自动分辨
-A:依据/etc/fstab的内容,将需要的装置扫描一遍
-a:自动修复检查到的有问题的
-y:与-a类似,但是某些filesystem仅支持-y这个参数
-C:可以再检验的过程中,使用一个直方图来显示目前的进度

badblocks

badblocks -[svw] 装置名称

-s:在屏幕上列出进度
-v:在屏幕上列出进度
-w:使用写入的方式来测试

磁盘挂载与卸除

  • 单一文件系统不应该被重复挂载在不同的挂载点中
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录
mount -a
mount [-l]
mount [-t 文件系统] [-L label名] [-o 额外选项] [-n] 装置文件名 挂载点

-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-l:单纯的输入mount会显示当前挂载的信息,加上-l可增加Label名称
-t:后接文件系统类型
-n:默认情况下,系统会将实际挂载的情况实时写入/etc/mtab中,加上后不会写入
-L:系统除了利用装置文件名之外,还可以利用文件系统的Label来进行挂载
-o:后面可以接一些挂载时额外加上的参数
umount [-fn] 装置文件名或挂载点

-f:强制执行
-n:不更新/etc/mtab情况下卸除

磁盘参数修订

mknod

mknod 装置文件名 [bcp] [Major] [Minor]

装置种类:
  b:设定装置名称成为一个周边存储设备档案
  c:设定装置名称成为一个周边输入设备档案
  p:设定装置名称成为一个FIFO档案
Major:主要装置代码
Minor:次要装置代码

hdparm

hdparm [-icdmXTt] 装置名称

-i:将核心侦测到的硬盘参数显示出来
-c:设定32-bit存取模式
-d:设定是否启用dma模式
-m:设定同步读取多个sector模式
-X:设定UtraDMA模式
-T:测试暂存区的存取性能
-t:测试硬盘的实际存取性能

设定开机挂载

开机挂载/etc/fstab及/etc/mtab

系统挂载的限制

  • 根目录/是必须挂载的,而且一定要先于其它mount point被挂载进来
  • 其它mount point必须为已建立的目录。可以任意指定,但一定要遵守必须的系统目录架构原则
  • 所有mount point再同一时间之内,只能挂载一次
  • 所有partition在同一时间之内,只能挂载一次
  • 若进行卸除,必须先将工作目录移到mount point及其子目录之外

文件系统的特殊观察与操作

boot sector与superblock的关系

  • superblock大小为1024bytes
  • superblock前面需要保留1024bytes下来,以让开机管理程序可以安装
  • block为1024bytes时,boot sector与superblock在不同的block内
  • block大于1024bytes时,boot sector与superblock在同一block内

利用GNU的parted进行分割行为

parted [装置] [指令 [参数]]

新增分割:mkpart [分割槽类型] [文件系统] 开始 结束
分割表:print
删除分割:rm [partition]

results matching ""

    No results matching ""