Appearance
题目
某文件系统采用索引节点方式。用户在目录中新建文件 F 时,文件系统不会做的是( )。
错因
A
把"新建文件不需要 inode"误当成事实。inode 是文件的身份本体——文件大小、类型、权限、时间戳、数据块指针都存在这里。没有 inode,文件就不存在。新建文件第一步必然是从空闲 inode 池中分配一个并初始化它。
B
混淆了"目录项内容"。索引节点方式的目录项格式是:<文件名, inode 号> 这一对最简洁的映射。新建文件 F 时必须把"F → inode_xxx"这条记录写进目录文件,否则下次按文件名查不到 F。这一步是必做的。
D
"目录项"只是 B 的另一种说法。"在目录文件中增加一条目录项" = "在目录中写入文件名+inode 号这一对"——和 B 描述的是同一动作的不同侧面。不可能 B 做了 D 不做,二者要么都做要么都不做,本题里都做。
总解析
核心知识点:inode 方式下的"职责划分"。
把文件的全部信息拆成两半存:
| 信息 | 存哪 | 为何这么放 |
|---|---|---|
| 文件名 | 目录项 | 目录就是"名字 → inode 号"的查找表 |
| inode 号 | 目录项 | 顺着 inode 号找到 inode |
| 文件大小、类型、权限、属主、时间戳、数据块指针 | inode | 所有元数据集中存放,方便管理 |
| 文件实际数据 | 数据块 | 由 inode 中的指针指向 |
这种拆分带来的关键性质:
- 同一文件可被硬链接到多个目录项(多个目录项共享同一 inode 号)
- 重命名/移动文件,只需修改目录项,不动 inode
- 修改文件权限/属主,只动 inode,不动目录项
新建文件 F 时实际发生什么:
- 从空闲 inode 池分配一个 inode,编号设为
inode_F - 初始化
inode_F:写入文件类型、权限位、属主 UID/GID、创建时间、初始大小 0、数据块指针清零 - 在目标目录的目录文件里追加一条目录项:
("F", inode_F)
逐项判定:
| 选项 | 描述 | 是否会做 |
|---|---|---|
| A | 初始化 F 的 inode | ✓(步骤 2) |
| B | 在目录中写 F 的 inode 号 | ✓(步骤 3 的一部分) |
| C | 在目录中写 F 的访问权限信息 | ✗——权限存在 inode 里,不在目录项里 |
| D | 在目录中增加 F 的目录项 | ✓(步骤 3) |
为什么 C 错? 访问权限(rwx)属于文件元数据,存放位置是 inode——目录项里只有"文件名 + inode 号"两项,没有权限字段。否则改文件权限就要修改所有指向它的目录项(含硬链接),违反"一处存储、多处引用"的设计。
对照看 FAT 系(无 inode):FAT 文件系统的目录项里确实直接存属性(只读、隐藏、归档等)和起始簇号——这是 FAT 与 inode 系两大派系的分水岭,也是这道题考察的关键差异。
题目问"不会做的",反向措辞要看清。最终答案是 C。