Linux文件系统
- /dev/sd[a-p][1-128]:为实体磁盘的磁盘文件名
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名
文件系统特性
Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)
- 一个可被挂载的数据为一个文件系统而不是一个分区槽
- 索引式文件系统(indexed allocation)
- FAT文件系统碎片整理
Linux的EXT2文件系统(CETOS6.x为EXT4)
block: 1, 2, 4K (XFS: 可配置512bytes~64K,支持最大4K) inode: 128bytes 或256bytes (XFS: 256bytes 到2M ,256bytes够用) inode 记录一个block 号码要花掉4byte
- data block
现在的磁盘容量都太大了!所以,大概大家都只会选择4K 的block 大小
- inode table
inode 记录block 号码的区域定义为12 个直接,一个间接,一个双间接与一个三间接记录区
1K block 总额:将直接、间接、双间接、三间接加总,得到12 + 256 + 256256 + 256256*256 (K) = 16GB
- Superblock (超级区块)
除第一个外后续的block group 不一定含有superblock(有也是作为备份)
- Filesystem Description (文件系统描述说明)
- block bitmap (区块对照表)
- inode bitmap (inode 对照表)
- dumpe2fs:查询Ext 家族superblock 信息的指令
文件系统与目录树的关系
目录
建立一个目录时,文件系统会分配一个inode 与至少一块block 给该目录
文件
ext2 建立一个一般文件时,ext2 会分配一个inode 与相对于该文件大小的block 数量给该文件
目录树读取
inode 本身并不记录文件名,文件名的记录是在目录的block 当中
目录树读取.xmind
EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能
为克服metadata (中介数据superblock, inode bitmap 及block bitmap )的内容与实际数据存放区产生不一致,
建立日志式文件系统(Journaling filesystem)
日志式文件系统(Journaling filesystem ext3/ext4)
- 预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
2. 实际写入:开始写入文件的权限与数据;开始更新metadata 的数据;
3. 结束:完成数据与metadata 的更新后,在日志记录区块当中完成该文件的纪录。Linux 文件系统的运作
异步处理
当系统加载一个文件到内存后,如果该文件没有被更动过,则在内存区段的文件数据会被设定为干净 (clean)的。但如果内存中的文件数据被更改过了(例如你用nano 去编辑过这个文件),此时该内存中 的数据会被设定为脏的(Dirty)。此时所有的动作都还在内存中执行,并没有写入到磁盘中!系统会 不定时的将内存中设定为『Dirty』的数据写回磁盘,以保持磁盘与内存数据的一致性。你也可以利 用第四章谈到的sync 指令来手动强迫写入磁盘。
常用的文件放置到内存
常用的文件数据放置到主存储器的缓冲区,因此Linux 的物理内存最后都会被用光
手动sync或关机自动sync写回磁盘
挂载点的意义(mount point)
其他Linux 支持的文件系统与VFS
- 传统文件系统:ext2 / minix / MS-DOS / FAT (用vfat 模块) / iso9660 (光盘)等等;
- 日志式文件系统:ext3 /ext4 / ReiserFS / Windows’ NTFS / IBM’s JFS / SGI’s XFS / ZFS
- 网络文件系统:NFS / SMBFS
透过VFS(Virtual Filesystem Switch ) 的功能来管理所有的filesystem,省去在不同的partion需要自行设定用什么文件系统的模块来读取文件。