Linux学习笔记(五):文件系统与目录树
发布日期:2021-05-15 07:34:21 浏览次数:17 分类:精选文章

本文共 2452 字,大约阅读时间需要 8 分钟。

Linux学习笔记:文件系统与目录树

Linux文件系统

在使用磁盘之前,必须对其进行格式化(format),因为不同的操作系统使用不同的文件系统格式。例如,Windows 98之前使用的是FAT文件系统,而Windows 2000及以后版本使用的是NTFS文件系统。Linux系统通常使用Ext2文件系统(ext2fs),其特点是支持扩展文件系统结构。

Ext2文件系统

Ext2文件系统的核心组成包括inodeblocksuperblock

  • inode:记录文件的权限、属性、所属者、创建时间、最近访问时间、最近修改时间等信息。每个文件占用一个inode,且inode大小固定为128字节(某些版本可能为256字节)。
  • block:存储文件的实际内容,文件过大时会占用多个block。
  • superblock:存储文件系统的整体信息,包括inode和block的总量、使用量、剩余量、文件系统格式等。

Block Group

为了便于管理,Ext2文件系统将磁盘划分为多个区块群组(block group),每个群组包含独立的inode table、data block和superblock。整个文件系统的前面有一个启动扇区(boot sector),用于存储系统启动所需的管理程序。

Block大小与限制

  • Block大小在格式化时固定,影响文件系统的最大单文件容量和总容量。
  • 最大单一文件容量:1KB文件系统支持16GB,2KB支持256GB,4KB支持2TB。
  • 最大文件系统总容量:1KB支持2TB,2KB支持8TB,4KB支持16TB。
  • Block的其他限制包括:只能通过格式化修改,文件数据只能占用单个block,文件过大时占用多个block。

Inode记录

inode记录block编号的区域划分为12个直接记录区、1个间接记录区、1个双间接记录区和1个三间接记录区。假设block大小为1KB:

  • 12个直接记录区可记录12个block编号,容量为12KB。
  • 1个间接记录区可记录256个block编号,容量为256KB。
  • 1个双间接记录区可记录256×256=65536个block编号,容量为256×256×1KB=256²KB。
  • 1个三间接记录区可记录256³=16777216个block编号,容量为256³×1KB=256³KB。

Block Group中的其他内容

每个区块群组中还包括:

  • 文件系统描述(filesystem description):记录区块群组的开始和结束block编号。
  • 区块对照表(block bitmap):记录可用或已释放的block编号。
  • inode对照表(inode bitmap):记录未被使用或已被使用的inode编号。

Dumpe2fs

dumpe2fs命令可以查看Ext文件系统的superblock详细信息。


文件系统与目录树

目录

在Linux系统中,建立目录时,文件系统会为其分配一个inode和至少一个block。目录的block记录目录下文件名及其对应的inode号码。使用ls -i命令可以查看目录下文件的inode信息。

目录树读取

目录树从根目录开始读取,系统通过挂载信息获取挂载点的inode,从而得到根目录的block内容和对应的文件inode。

挂载点

每个文件系统都有独立的inode/block/superblock信息,并且需要链接到目录树才能被用户访问。挂载点是一个目录,作为进入文件系统的入口。

同一个文件系统的inode只对应一个文件内容

因此,可以通过inode号判断不同文件名是否为同一文件。


元数据与日志式文件系统

文件存取

在Ext2/Ext3/Ext4文件系统中,新增文件时:

  • 检查用户对目录的w和x权限。
  • 根据inode bitmap找到未使用的inode号码,写入文件权限和属性。
  • 根据block bitmap找到未使用的block号码,写入文件数据,并更新inode中的block指向。
  • 更新inode bitmap、block bitmap和superblock内容。
  • 日志式文件系统

    日志式文件系统(journaling filesystem)解决元数据与实际存储数据不一致的问题。EXT3和EXT4文件系统专门划出日志记录区,记录文件写入或修改的步骤。一旦系统中断,日志记录区可以帮助快速修复文件系统。


    文件系统异步处理

    由于磁盘写入速度远慢于内存,Linux使用异步处理解决大文件编辑效率问题:

    • 内存中的文件数据若未被修改,视为干净数据(clean)。
    • 若修改后,视为脏数据(dirty),系统定时将脏数据写回磁盘。
    • 可使用sync命令手动强迫写入。

    其他Linux文件系统

    Linux支持的文件系统包括:

    • 传统文件系统:ext2, minix, MS-DOS, FAT (vfat), iso9660。
    • 日志式文件系统:ext3, ext4, ReiserFS, NTFS, JFS, XFS, ZFS。
    • 网络文件系统:NFS, SMBFS。

    可以通过以下命令查看支持的文件系统:

    ls -l /lib/modules/$(uname -r)/kernel/fs
    cat /proc/filesystems

    文件系统操作

    目录磁盘使用量

    • df指令:查看文件系统磁盘使用量,格式为df [-ahikHTm] [目录或文件名]
    • du指令:查看目录或文件的磁盘容量,格式为du [-ahskm] [目录或文件名]

    实体链接与符号链接

    • 硬链接:文件名与inode直接相关,删除源文件不会删除链接。
    • 符号链接:文件名指向另一个文件,删除源文件会删除链接。

    创建链接文件:

    • 使用ln命令,默认创建硬链接。
    • 使用-s参数创建符号链接。

    符号链接与目录链接

    默认创建目录时,子目录下会生成两个链接文件:

    • /tmp/test/(指向自身)。
    • /tmp/test/..(指向上层目录)。
    上一篇:Linux学习笔记(六):磁盘分区、格式化与挂载
    下一篇:Linux学习笔记(四):默认权限、特殊权限与文件搜索

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月23日 19时45分45秒