当前位置: 首页 > 面试题库 >

Unix文件系统:文件名如何转换为磁盘扇区?

孙清野
2023-03-14
问题内容

一个非常基本的问题。通过提供文件的完全限定路径,尝试打开文件描述符时执行的步骤的确切顺序是什么?

我在寻找

  • 在Linux上如何运作
  • 给定文件名-如何将其转换为inode和磁盘扇区
  • linux文件系统(特别是ext3和ext4)是否维护某种文件名到inode的映射?

问题答案:

文件确实是inode。

通常,给定文件在某个目录中有一些条目指向其索引节点。目录将名称映射到索引节点,目录是一种文件。请参见stat(2)以了解inode包含的内容(并可通过应用程序代码查询),尤其是各种文件类型(普通文件,目录,字符或块设备,fifo,symlink等)。因此,目录通常是字典(以各种特定于文件系统的方式实现)将字符串映射到inode。因此,在该目录中/bin/,通常存在一个bash
bash shell(即/bin/bash)的ELF可执行文件的inode
关联的条目。使用readdir(3)
-依次调用getdents(2)
-读取目录中的条目。


某些名称可能无法再访问给定的inode。当进程打开(2)-创建文件,然后取消链接(2)-创建文件(同时保留打开的文件描述符)时,尤其会发生这种情况。这是制作临时文件的首选方法。(当不再有进程使用它们时,它们将由内核释放)。

给定的inode有 _多个_指向它的目录条目也可能发生。(即文件具有“多个名称”)这是通过link(2)syscall发生的。(symlink文件是使用symlink(2)创建的)。

还参见path_resolution(7)和UNIX文件系统&文件系统&EXT2&EXT3&EXT4&BTRFS&文件系统的比较
wikipages。另请阅读此旧文件系统描述(有些细节很烂,但是总体思路在这里,尤其是VFS的作用)



 类似资料:
  • 磁盘调度 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 磁盘调度的目的是减小延迟,其中前两项可以忽略,寻道时间是主要矛盾。 磁盘调度算法 FCFS:先进先出的调度策略,这个策略具有公平的优点,因为每个请求都会得到处理,并且是按照接收到的顺序进行处理。 SSTF(Shortest-seek-time First 最短寻道时间优先):选择使磁头从当前位置开始移动

  • 问题内容: 我有几个要从Dos转换为Unix的文件。是否有任何API或方法可以帮助我做到这一点? 问题答案: 有Linux工具可以做到这一点(例如)。 在Java中,可以使用。 DOS 用于线路终止,而UNIX使用单个。 因此,不存在,没有API。是的,这很容易做到。

  • 磁盘调度 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 磁盘调度的目的是减小延迟,其中前两项可以忽略,寻道时间是主要矛盾。 磁盘调度算法 FCFS 先进先出的调度策略,这个策略具有公平的优点,因为每个请求都会得到处理,并且是按照接收到的顺序进行处理。 SSTF(Shortest-seek-time First 最短寻道时间优先) 选择使磁头从当前位置开始移动

  • 最近更新日期:20// 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小, 太大会造成磁盘容量的浪费,太小则会产生文件无法储存的困扰。此外,我们在前面几章谈到的文件权限与属性中, 这些权限与属性分别记录在文件系统的哪个区块内?这就得要谈到 filesystem 中的 inode 与 block 了。同时,为了虚拟化与大容量磁盘, 现在的 CentOS 7 默认使用

  • 正如 Heroku Dyno 临时文件系统文档所解释的那样,当 dyno 停止或重新启动时,文件系统将被丢弃。这意味着它不能用作永久(磁盘)存储。 我的用例是我想使用Ehcache缓存一些参考数据。我在考虑使用一些(有限的)堆内存以获得最佳性能,如果它不足以回退到磁盘存储。使用Ehcache,这可以在每个缓存的基础上进行很好的配置,例如在堆内存中存储最多1000个条目,例如在磁盘上存储25MB。

  • 问题内容: 我需要创建一个Java util,它将通过Unix(和/或Linux)文件系统递归,并建立目录结构的对象模型,检索文件信息-大小,创建日期,上次访问日期等- 以及我需要在文件所在的物理存储设备上检索信息。理想情况下,该实用程序将是可移植的。我没有Java标准库的经验,只有Unix OS的经验有限。 是否有可以处理Unix文件系统的Java标准库?还是我必须通过某些API进行本机调用,然