文件系统之EXT文件系统

1 文件系统

  • 定义:分区上文件的组织方法和数据结构
  • 常见文件系统:
    • Windows:NTFS、FAT32
    • Linux:ext2/3/4、XFS

2 EXT文件系统

20180828100516531.png

  • super block:超级区块,记录整个文件系统相关信息的地方,可以使用dumpe2fs /dev/sda查看,记录的主要信息有:

    • 数据区块和inode的总量
    • 未使用与已使用的inode与数据区块数量
    • 数据区块与inode的大小(block为1、2、4K,inode为128B或256B)
    • 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
    • 一个有效位数值:若此文件系统已被挂载,则有效位为0,否则为1
  • Group Descriptor Table:GDP,块组描述符表,描述每个区块组群的开始与结束区块,以及说明在这个块组中哪里开始是inode Table,哪里开始是data blocks等等

  • block bitmap:区块对照表,用来描述整个块组中哪些块已用哪些块空闲,本身占一个块,每一个bit代表本块组的一个block,1为已用,0表示空闲

  • inode bitmap:inode对照表,与区块对照表类似,记录已使用和未使用的inode号码

  • inode table:inode表,由一个块组中的所有inode组成,每个inode记录的数据(元数据)可以通过stat FILENAME查看:

    • 该文件的读写属性(read、write、excute)
    • 该文件的拥有者和拥有组(owner、group)
    • 该文件的类型
      • d:目录
      • -:普通文件
      • c:字符设备
      • b:块设备
      • s:套接字文件
      • l:软连接
      • p:pipe管道文件
    • 该文件的大小
    • 该文件的时间戳(atime、ctime、mtime)
    • 定义文件特性的标志(flag),如SetUID等
    • 该文件真正内容的指针(pointer)

    inode的数量与大小也是在格式化时就固定了

    • 每个inode大小固定为128B(ext4 与 xfs 可设置到256B)
    • 每个文件都仅会占用一个inode
    • 读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,符合才能执行操作
    • 文件系统能够建立的文件数量与inode的数量有关
  • data block:数据区块,真正用来存放文件数据的地方,支持的区块大小由1、2、4K三种,在格式化时区块大小就被固定了,且每个区块都有编号,以方便inode记录。以下是ext2文件系统的限制:

    block大小1KB2KB4KB
    最大单一文件限制16GB256GB2TB
    最大文件系统总容量2TB8TB16TB
    • 原则上区块大小与数量在格式化完成后就不能修改
    • 每个区块内最多只能放置一个文件的数据
    • 如果文件大于区块大小,则一个文件会占用多个区块
    • 如果文件小于区块大小,则该区块剩余容量就不能够再被使用,磁盘空间会浪费

3 inode结构

在这里插入图片描述

以1K区块来说明,每条区块号码的记录会使用4B,因此1K的大小能够记录256条记录:

  • 12个直接指向:12×1K=12K
  • 1个间接指向:256×1K=256K
  • 1个双间接指向:256×256×1K= 25 6 2 256^2 2562K
  • 1个三间接指向:256×256×256×1K= 25 6 3 256^3 2563K
  • 总额=12+256+256×256+256×256×256=16GB

4 链接

作用:文件复用的一种形式

4.1 硬链接

用法:ln FILE1 FILE2

  • 硬链接文件与源文件共用同一个inode,可以通过ls -i查看
  • 硬连接数跟inode被引用的次数相同,可以通过ll查看
  • 硬链接不能对目录做:简单的说做目录的硬链接涉及到一个递归链接的问题,会很复杂
  • 硬链接不能跨文件系统:不同系统可能会导致inode相同
[root@localhost ~]# cp /etc/services ./link
[root@localhost ~]# ln link link_hard
[root@localhost ~]# ll -i link*
155520 -rw-r--r--. 2 root root 670293 3月  17 04:46 link
155520 -rw-r--r--. 2 root root 670293 3月  17 04:46 link_hard
# 可以看出link和link_hard两个文件的inode是相同的,而硬连接数也变成了2
[root@localhost ~]# ll -di .
130306 dr-xr-x---. 18 root root 4096 3月  17 04:46 .

实际上文件内容是与inode相关的,文件名只是目录中的数据,硬链接的实际示意图如下:

image-20200317165453711.png

目录的data block中记录了文件名和对应的inode,访问文件的过程为:通过目录的inode找到目录的data ==> 从data中得知该文件名指向的文件inode ==> 通过文件inode访问文件

4.2 符号连接

也叫软连接

用法:ln -s FILE1 FILE2

  • 本质为快捷方式
  • 使用新的inode和block
  • 符号链接可以对文件或目录做
  • 符号链接能跨文件系统
[root@localhost ~]# ll -ih link*
155520 -rw-r--r--. 2 root root 655K 3月  17 04:46 link
155520 -rw-r--r--. 2 root root 655K 3月  17 04:46 link_hard
155530 lrwxrwxrwx. 1 root root    4 3月  17 04:58 link_soft -> link
# 可以看到软连接的inode和大小都与源文件不同

image-20200317170510501.png

5 相关问题

  1. block的大小越大越好还是越小越好

block大小太小,大型文件会占用数量更多的区块,而inode也要记录更多的区块号码,可能造成文件系统读写性能不佳

block太大,可能会产生较严重的磁盘浪费

假设你的Ext2文件系统使用 4K block ,而该文件系统中有 10000 个小文件,每个文件大小均为 50bytes,由于 Ext2 文件系统中一个 block 仅能容纳一个文件,因此每个 block 会浪费『 4096 - 50 = 4046 (byte)』, 系统中总共有一万个小文件,所有文件容量为:50 (bytes) x 10000 = 488.3Kbytes,但此时浪费的容量为:『 4046 (bytes) x 10000 = 38.6MBytes 』

  1. 磁盘空间不足,原因可能是什么
    • block不够用
    • inode不够用
    • block被进程占用没被释放
  2. 文件管理命令对inode、block的操作是怎样的?
    • 创建
      • 向当前文件系统申请空闲inode
      • 按需申请空闲block,存放实际数据
      • 在上一级目录的block中添加目录项(entry)
    • 复制
      • 向目标目录所在文件系统申请空闲inode和block
      • 把源文件的block中的数据复制到目标block中
      • 元数据放在inode中,并在目录的block里添加目录项
    • 移动
      • 同文件系统:只是移动了目录项
      • 不同文件系统:复制+删除
    • 删除
      • 硬连接数=1
        • 把block和inode置空
        • 移出目录项
      • 硬连接数>1
        • 移出目录项
        • 硬连接数-1
可以读写Ext2,以Ext2方式挂载Ext3文件系统(不支持Ext3日志),不支持中文! It provides Windows NT4.0/2000/XP/2003/Vista/2008 with full access to Linux Ext2 volumes (read access andwrite access). This may be useful if you have installed both Windows and Linux as a dual boot environment on your computer. What features are supported? Complete reading and writing access to files and directories of volumes with theExt2 orExt3 file system. Supports features which are specific to the I/O-system of Windows: Byte Range Locks, Directory Notfication (so the Explorer updates the view of a directory on changes within that directory), Oplocks (so SMB clients are able to cache the content of files). Allows Windows to run with paging files on Ext2 volumes. UTF-8 encoded file names are supported. The driver treats files with file names that start with a dot "." character ashidden. Supports GPT disks if the Windows version used also does. Supports use of the Windows mountvol utility to create or delete drive letters for Ext2 volumes (except on Windows NT 4.0). See also section"Can drive letters also be configured from scripts?". What features are *not* supported? Inodes that are larger than 128 bytes are not supported. Access rights are not maintained. All users can access all the directories and files of an Ext2 volume. If a new file or directory is created, it inherits all the permissions, the GID and the UID from the directory where it has been created. There is one exception to this rule: a file (but not a directory) the driver has created always has cleared "x" permissions, it inherits the "r" and the "w" permissions only. See also section"What limitations arise from not maintaining access rights?". The driver does not allow accessing special files at Ext2 volumes, the access will be always denied. (Special files are sockets, soft links, block devices, character devices and pipes.) Alternate 8.3-DOS names are not supported (just because there is no place to store them in an Ext2 file system). This can prevent legacy DOS applications, executed by the NTVDM of Windows, from accessing some files or directories. Currently the driver does not implement defragging support. So defragmentation applications will neither show fragmentation information nor defragment any Ext2 volume. This software does not achieve booting a Windows operating system from an Ext2 volume. LVM volumes are not supported, so it is not possible to access them.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值