Linux 文件系统及 ext2 文件系统
linux 支持的文件系统类型
# cat /proc/cpuinfo
# cat /proc/sys/net/ipv4/ip_forward
# echo "" > /proc/sys/net/ipv4/ip_forward
# echo "" > /proc/sys/net/ipv4/ip_forward
$ mount
文件系统的几个基本概念
Inodes

Directories

Links
# ln /root/file1 /root/file2
ln -s /path/to/file1.txt /path/to/file2.txt

$ ln FileAFileB#创建一个硬链接
$ ls -il FileAFileB#具有相同的 inode 号
-rw-r--r-- bruno bruno 21May515:55FileA
-rw-r--r-- bruno bruno 21May515:55FileB
$ rm FileA
$ cat FileB#将看到FileA的内容
$ ln -s FileBFileC#创建软链接
$ ls -il FileBFileC#FileC文件类型是l-链接文件,且与 FileB 具有不同的 inode
-rw-r--r-- bruno bruno 21May515:55FileB
lrwxrwxrwx bruno bruno 5May516:22FileC->FileB
$ rm FileB
$ cat FileC#提示不存在该文件,皮之不存毛将焉附?
| 硬链接 | 软链接 |
| 硬链接不能在目录间创建 | 可以在不同目录间创建 |
| 不能跨越文件系统边界 | 可以跨文件系统边界 |
| 指向源头,即使源头被移动或者移除 | 不会更新 |
Device files
The Second Extended File system(EXT2)

| Block Offset | Length | Description |
|---|---|---|
| byte 0 | 512 bytes | boot record (if present) |
| byte 512 | 512 bytes | additional boot record data (if present) |
| -- block group 0, blocks 1 to 1439 -- | ||
| byte 1024 | 1024 bytes | superblock |
| block 2 | 1 block | block group descriptor table |
| block 3 | 1 block | block bitmap |
| block 4 | 1 block | inode bitmap |
| block 5 | 23 blocks | inode table |
| block 28 | 1412 blocks | data blocks |
| Block Offset | Length | Description |
|---|---|---|
| byte 0 | 512 bytes | boot record (if present) |
| byte 512 | 512 bytes | additional boot record data (if present) |
| -- block group 0, blocks 1 to 8192 -- | ||
| byte 1024 | 1024 bytes | superblock |
| block 2 | 1 block | block group descriptor table |
| block 3 | 1 block | block bitmap |
| block 4 | 1 block | inode bitmap |
| block 5 | 214 blocks | inode table |
| block 219 | 7974 blocks | data blocks |
| -- block group 1, blocks 8193 to 16384 -- | ||
| block 8193 | 1 block | superblock backup |
| block 8194 | 1 block | block group descriptor table backup |
| block 8195 | 1 block | block bitmap |
| block 8196 | 1 block | inode bitmap |
| block 8197 | 214 blocks | inode table |
| block 8408 | 7974 blocks | data blocks |
| -- block group 2, blocks 16385 to 24576 -- | ||
| block 16385 | 1 block | block bitmap |
| block 16386 | 1 block | inode bitmap |
| block 16387 | 214 blocks | inode table |
| block 16601 | 3879 blocks | data blocks |
ext2—Inode

| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| 0 | 2 | i_mode |
| 2 | 2 | i_uid |
| 4 | 4 | i_size |
| 8 | 4 | i_atime |
| 12 | 4 | i_ctime |
| 16 | 4 | i_mtime |
| 20 | 4 | i_dtime |
| 24 | 2 | i_gid |
| 26 | 2 | i_links_count |
| 28 | 4 | i_blocks |
| 32 | 4 | i_flags |
| 36 | 4 | i_osd1 |
| 40 | 15 x 4 | i_block |
| 100 | 4 | i_generation |
| 104 | 4 | i_file_acl |
| 108 | 4 | i_dir_acl |
| 112 | 4 | i_faddr |
| 116 | 12 |
i_osd2
|
| Constant | Value | Description |
|---|---|---|
| -- file format -- | ||
| EXT2_S_IFSOCK | 0xC000 | socket |
| EXT2_S_IFLNK | 0xA000 | symbolic link |
| EXT2_S_IFREG | 0x8000 | regular file |
| EXT2_S_IFBLK | 0x6000 | block device |
| EXT2_S_IFDIR | 0x4000 | directory |
| EXT2_S_IFCHR | 0x2000 | character device |
| EXT2_S_IFIFO | 0x1000 | fifo |
| -- process execution user/group override -- | ||
| EXT2_S_ISUID | 0x0800 | Set process User ID |
| EXT2_S_ISGID | 0x0400 | Set process Group ID |
| EXT2_S_ISVTX | 0x0200 | sticky bit |
| -- access rights -- | ||
| EXT2_S_IRUSR | 0x0100 | user read |
| EXT2_S_IWUSR | 0x0080 | user write |
| EXT2_S_IXUSR | 0x0040 | user execute |
| EXT2_S_IRGRP | 0x0020 | group read |
| EXT2_S_IWGRP | 0x0010 | group write |
| EXT2_S_IXGRP | 0x0008 | group execute |
| EXT2_S_IROTH | 0x0004 | others read |
| EXT2_S_IWOTH | 0x0002 | others write |
| EXT2_S_IXOTH | 0x0001 | others execute |
ext2—Block Groups,块组
ext2—Superblock,超级块
ext2—Block Group Descriptor,组描述符
| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| 0 | 4 | bg_block_bitmap |
| 4 | 4 | bg_inode_bitmap |
| 8 | 4 | bg_inode_table |
| 12 | 2 | bg_free_blocks_count |
| 14 | 2 | bg_free_inodes_count |
| 16 | 2 | bg_used_dirs_count |
| 18 | 2 | bg_pad |
| 20 | 12 | bg_reserved |
ext2—Block Group Descriptor Table,组描述符表
ext2—Block Bitmap
ext2—Inode Bitmap
ext2—Inode Table
| Constant Name | Value | Description |
|---|---|---|
| EXT2_BAD_INO | 1 | bad blocks inode |
| EXT2_ROOT_INO | 2 | root directory inode |
| EXT2_ACL_IDX_INO | 3 | ACL index inode (deprecated?) |
| EXT2_ACL_DATA_INO | 4 | ACL data inode (deprecated?) |
| EXT2_BOOT_LOADER_INO | 5 | boot loader inode |
| EXT2_UNDEL_DIR_INO | 6 | undelete directory inode |
ext2—Directories,目录
| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| 0 | 4 | inode |
| 4 | 2 | rec_len |
| 6 | 1 | name_len[a] |
| 7 | 1 | file_type[b] |
| 8 | 0-255 | name |

| Constant Name | Value | Description |
|---|---|---|
| EXT2_FT_UNKNOWN | 0 | Unknown File Type |
| EXT2_FT_REG_FILE | 1 | Regular File |
| EXT2_FT_DIR | 2 | Directory File |
| EXT2_FT_CHRDEV | 3 | Character Device |
| EXT2_FT_BLKDEV | 4 | Block Device |
| EXT2_FT_FIFO | 5 | Buffer File |
| EXT2_FT_SOCK | 6 | Socket File |
| EXT2_FT_SYMLINK | 7 | Symbolic Link |

Table . Sample Linked Directory Data Layout, 4KiB blocks
| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| Directory Entry 0 | ||
| 0 | 4 | inode number: 783362 |
| 4 | 2 | record length: 12 |
| 6 | 1 | name length: 1 |
| 7 | 1 | file type: EXT2_FT_DIR=2 |
| 8 | 1 | name: . |
| 9 | 3 | padding |
| Directory Entry 1 | ||
| 12 | 4 | inode number: 1109761 |
| 16 | 2 | record length: 12 |
| 18 | 1 | name length: 2 |
| 19 | 1 | file type: EXT2_FT_DIR=2 |
| 20 | 2 | name: .. |
| 22 | 2 | padding |
| Directory Entry 2 | ||
| 24 | 4 | inode number: 783364 |
| 28 | 2 | record length: 24 |
| 30 | 1 | name length: 13 |
| 31 | 1 | file type: EXT2_FT_REG_FILE |
| 32 | 13 | name: .bash_profile |
| 45 | 3 | padding |
| Directory Entry 3 | ||
| 48 | 4 | inode number: 783363 |
| 52 | 2 | record length: 16 |
| 54 | 1 | name length: 7 |
| 55 | 1 | file type: EXT2_FT_REG_FILE |
| 56 | 7 | name: .bashrc |
| 63 | 1 | padding |
| Directory Entry 4 | ||
| 64 | 4 | inode number: 783377 |
| 68 | 2 | record length: 12 |
| 70 | 1 | name length: 4 |
| 71 | 1 | file type: EXT2_FT_REG_FILE |
| 72 | 4 | name: mbox |
| Directory Entry 5 | ||
| 76 | 4 | inode number: 783545 |
| 80 | 2 | record length: 20 |
| 82 | 1 | name length: 11 |
| 83 | 1 | file type: EXT2_FT_DIR=2 |
| 84 | 11 | name: public_html |
| 95 | 1 | padding |
| Directory Entry 6 | ||
| 96 | 4 | inode number: 669354 |
| 100 | 2 | record length: 12 |
| 102 | 1 | name length: 3 |
| 103 | 1 | file type: EXT2_FT_DIR=2 |
| 104 | 3 | name: tmp |
| 107 | 1 | padding |
| Directory Entry 7 | ||
| 108 | 4 | inode number: 0 |
| 112 | 2 | record length: 3988 |
| 114 | 1 | name length: 0 |
| 115 | 1 | file type: EXT2_FT_UNKNOWN |
| 116 | 0 | name: |
| 116 | 3980 | padding |
| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| -- Linked Directory Entry: . -- | ||
| 0 | 4 | inode: this directory |
| 4 | 2 | rec_len: 12 |
| 6 | 1 | name_len: 1 |
| 7 | 1 | file_type: EXT2_FT_DIR=2 |
| 8 | 1 | name: . |
| 9 | 3 | padding |
| -- Linked Directory Entry: .. -- | ||
| 12 | 4 | inode: parent directory |
| 16 | 2 | rec_len: (blocksize - this entry's length(12)) |
| 18 | 1 | name_len: 2 |
| 19 | 1 | file_type: EXT2_FT_DIR=2 |
| 20 | 2 | name: .. |
| 22 | 2 | padding |
| -- Indexed Directory Root Information Structure -- | ||
| 24 | 4 | reserved, zero |
| 28 | 1 | hash_version |
| 29 | 1 | info_length |
| 30 | 1 | indirect_levels |
| 31 | 1 | reserved - unused flags |
Table 4-6. Indexed Directory Entry Structure (dx_entry)
| Offset (bytes) | Size (bytes) | Description |
|---|---|---|
| 0 | 4 | hash |
| 4 | 4 | block |
目录的查找算法
目录的插入算法
参考资料:
Linux 文件系统及 ext2 文件系统的更多相关文章
- Linux磁盘管理——Ext2文件系统
前言 通常而言,对于一块新磁盘我们不是直接使用,而是先分区,分区完毕后格式化,格式化后OS才能使用这个文件系统.分区可能会涉及到MBR和GPT问题.至于格式化和文件系统又有什么关系? 这里的格式化指的 ...
- 认识 EXT2 文件系统
认识ext文件系统 硬盘组成与分割 文件系统特性 Linux 的 EXT2 文件系统(inode) 与目录树的关系 EXT2/EXT3 文件的存取与日志式文件系统的功能 Linux 文件系统的运行 挂 ...
- EXT2 文件系统
转自:http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2651641.html#ext2_filesystem 认识ext文件系统 硬盘组成与分 ...
- Linux磁盘管理——日志文件系统与数据一致性
参考:Linux磁盘管理——Ext2文件系统 数据不一致 上图是Ext2结构图,其他FS结构类似. 一般来说,我们将 inode table 与 data block 称为数据区:至于其他例如 sup ...
- linux的分区和文件系统
一.分区类型 主分区 总共最多能分四个 扩展分区 只能有一个,也算做主分区的一种,也就是说主分区加扩展分区最多有4个. 但是扩展分区不能存储数据和格式化,必须在划分成逻辑分区才能使用. 逻辑分区 逻辑 ...
- Linux分区类型EXT2、EXT3、EXT4详解
一.EXT2与EXT3 Linux之前缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定.但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺 ...
- Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里
这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...
- linux ext2 文件系统学习
Linux ext2文件系统理解 硬盘组成: 硬盘由多个圆形硬盘片组成.按照硬盘片能够容纳的数据量分为单盘和多盘.硬盘的数据读取主要靠机械手臂上的磁头,在机械手臂上有多个磁头.机械手臂不动硬盘旋转一 ...
- Linux ext2文件系统
Linux最传统的磁盘文件系统(filesystem)使用的是ext2 1.ext2文件系统结构ext2文件系统划分为多个块组,每个块组拥有独立的inode/block,一个文件系统只有一个Super ...
随机推荐
- CDN是什么鬼
CDN,内容分发网络,是大多数互联网业务里必不可少的部分,但大多数互联网从业人员不是特别清楚CDN究竟是什么,以及它可以为我们做哪些事情. 我们还是从之前介绍的<不同的人看到的直播为什么不一样? ...
- Qt foreach关键字用法
Qt提供一个关键字 foreach (实际是 <QtGlobal> 里定义的一个宏)用于方便地访问容器里所有数据项. foreach 关键字用于遍历容路中所有的项,使用 foreach 的 ...
- jQuery中的bind(), live(), on(), delegate()
当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...
- Token最主要的作用.个人观点
Token除了登陆验证以外,我个人觉得最主要的作用就是可反解,通过token可以在服务器端查找出Token相关信息.这样可以省去一些不必要的参数. 关于token是否可以代替session来使用看个人 ...
- Proxmox如何进入单人维护模式(重置root密码)
官网连接:https://pve.proxmox.com/wiki/Root_Password_Reset Root Password Reset Contents [hide] 1Reset ...
- pytorch的visdom启动不了、蓝屏
pytorch的visdom启动不了.蓝屏 问题描述:我是在ubuntu16.04上用python3.5安装的visdom.可是启动是蓝屏:在网上找了很久的解决方案:有三篇博文: https://bl ...
- react router为什么推荐使用browserHistory而不推荐hashHistory?
首先 browserHistory 其实使用的是 HTML5 的 History API,浏览器提供相应的接口来修改浏览器的历史记录:而 hashHistory 是通过改变地址后面的 hash 来改变 ...
- Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- c++中的函数重载、函数重写、函数重定义
目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...
- 关于Newtonsoft.Json引用报错
自己运行的vs版本是2012,然后同事用了2017的,我把代码发给他后运行发现报以下错误: {未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0, Cul ...