
本文共 2452 字,大约阅读时间需要 8 分钟。
Linux学习笔记:文件系统与目录树
Linux文件系统
在使用磁盘之前,必须对其进行格式化(format),因为不同的操作系统使用不同的文件系统格式。例如,Windows 98之前使用的是FAT文件系统,而Windows 2000及以后版本使用的是NTFS文件系统。Linux系统通常使用Ext2文件系统(ext2fs),其特点是支持扩展文件系统结构。
Ext2文件系统
Ext2文件系统的核心组成包括inode、block和superblock:
- 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文件系统中,新增文件时:
日志式文件系统
日志式文件系统(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/fscat /proc/filesystems
文件系统操作
目录磁盘使用量
- df指令:查看文件系统磁盘使用量,格式为
df [-ahikHTm] [目录或文件名]
。 - du指令:查看目录或文件的磁盘容量,格式为
du [-ahskm] [目录或文件名]
。
实体链接与符号链接
- 硬链接:文件名与inode直接相关,删除源文件不会删除链接。
- 符号链接:文件名指向另一个文件,删除源文件会删除链接。
创建链接文件:
- 使用
ln
命令,默认创建硬链接。 - 使用
-s
参数创建符号链接。
符号链接与目录链接
默认创建目录时,子目录下会生成两个链接文件:
/tmp/test/
(指向自身)。/tmp/test/..
(指向上层目录)。
发表评论
最新留言
关于作者
