unix - 理解 inode 的概念

标签 unix filesystems inode

我指的是the link关于Inode的概念

我对部分感到困惑:

  1. 12 个直接 block 指针
  2. 1 个单个间接 block 指针
  3. 1 个双间接 block 指针
  4. 1 个三重间接 block 指针

现在该图显示每个指针都是 32/64 位。

  • [查询]:为什么以及如何推断这些值?我的意思是为什么专门只有 32 位或 64 位指针?

该图表示,每个指针 {4 字节/8 字节} 一个数据 block {8 KB}

  • [查询]:这实际上是如何实现的?即 8*1024 字节/8 字节 = 1024 字节? 8KB block 的 8 字节指针背后的逻辑是什么?

最佳答案

最大文件大小的计算示例

* Assume that there are 10 direct pointers to data blocks, 1 indirect pointer, 1 double indirect pointer, and 1 triple indirect pointer
* Assume that the size of the data blocks is 1024 bytes = 1Kb, i.e., BlockSize = 1Kb
* Assume that the block numbers are represented as 4 byte unsigned integers, i.e., BlockNumberSize = 4b
* Some data blocks are used as index blocks. They store 1024 bytes / 4 bytes/entry = 256 entries
* Maximum number of bytes addressed by 10 direct pointers is

    = Number of direct pointers * Blocksize 
    = 10 * 1Kb
    = 10Kb


* Maximum number of bytes addressed by single indirect pointer is

    = NumberOfEntries * BlockSize
    = (Blocksize / BlockNumberSize) * BlockSize
    = (1Kb / 4b) * 1Kb
    = 256 * 1Kb
    = 256Kb


* Maximum number of bytes addressed by double indirect pointer is

    = NumberOfEntries^2 * BlockSize
    = (Blocksize / BlockNumberSize)^2 * BlockSize
    = (1Kb / 4b)^2 * 1Kb
    = (2^10 / 2^2)^2 * (2^10b)
    = (2^8)^2 * (2^10)b
    = (2^16) * (2^10)b
    = 2^6 * 2^20 b
    = 64 Mb


* Maximum number of bytes addressed by triple indirect pointer is

    = NumberOfEntries^3 * BlockSize
    = (Blocksize / BlockNumberSize)^3 * BlockSize
    = (1Kb / 4b)^3 * 1Kb
    = (2^10 / 2^2)^3 * (2^10b)
    = (2^8)^3 * (2^10)b
    = (2^24) * (2^10)b
    = 2^4 * 2^30 b
    = 16 Gb


* Maximum file size is 16Gb + 64Mb + 266Kb 

关于unix - 理解 inode 的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755006/

相关文章:

linux - 当 rm 文件但硬链接(hard link)仍然存在时,inode 将被标记为 "unused"?

java - 在 RedHat 6 中将应用程序作为服务启动未使用预期的 Java 系统属性

java - 在没有软件更新程序的 Mac 上安装 Java SE 6

node.js - Node 从 %appdata% 读取文件

filesystems - 是否保证文件的开头与文件系统的页大小对齐?

linux - ext4 文件系统上 inode 的垃圾收集

linux - 无法构建 GNU automake - help2man 无法从 automake-1.16 获取 `--help' 信息

制作或制作。我需要两者吗?

windows - NTFS-Search(一个OSS项目)可以扫描NTFS卷上的任何文件吗?

Linux 内核 - "put"一个 inode 是什么意思?