在 ext 文件系统中,
- 文件的内容总是连续存储的吗?或者可以将文件内容分为不同的部分,每个部分连续存储,所有部分不连续存储? (文件内容的存储由其 inode 指向)。
- 一个 inode 可以有多个直接和间接指针指向文件的内容。指针是否指向文件内容中的不同位置,以使文件内容以某种方式“随机”访问?
谢谢。
答案1
不会。文件并不总是连续存储的;不连续存储实际上有一个名字,“碎片”(因为文件的每个单独存储的部分都是一个“碎片”)。这是必需的,因为否则您将无法使文件大于最大的连续可用空间。并且附加到文件通常会失败(或者,需要重写整个文件才能移动它)。
inode 的字段表示“从块 10,000 开始的字节 0 到 1048575”、“从块 300 开始的字节 1048576 到 2097152”等。inode 的大小是固定的,因此可容纳的片段数量是有限的。存储在inode中。当需要更多碎片时,inode 存储指向不同块的指针;碎片存储在那里。
如果该片段由 inode 直接指向,则为直接指针。
如果片段存储在 inode 外部,则这是一个间接指针。
ASANS 上的数字取证文章有一张很好的图片解释。也是如此维基百科文章。请注意,ext4 的范围工作方式不同;再次SANS 上的一篇文章。
答案2
大多数 linux/unix 格式(ext2
/ ext3
/ext4
和HFS
/ HFS+
,btrfs
和ZFS
)都试图保持数据不碎片化,但总会有一些少量的碎片。通常,除了少量数据外,所有数据都是连续的。