linux - 文件系统 "see"是否作为(非常大的)字节数组存储设备?

标签 linux windows operating-system filesystems

我想知道文件系统如何写入和读取存储设备。

我认为它是这样工作的:

文件系统不直接访问存储设备,而是将存储设备(由存储设备的设备驱动程序)作为(非常大的)字节数组呈现给文件系统。

例如,如果文件系统要访问硬盘,它只会访问代表硬盘的字节数组。

这样一个文件系统可以与任何类型的存储设备(传统硬盘、SSD、U盘等)一起工作,只需要改变存储设备的设备驱动程序。

这张图片显示了我刚才解释的内容:

enter image description here

我的理解正确吗?

最佳答案

如果把“字节数组”改成“ block 数组”,你的理解会更接近事实。

文件系统驱动程序和设备驱动程序都将底层设备“视为” block 数组。 1980~2010 年间制造的 HDD 的经典物理 block (=扇区)大小等于 512 字节。 2010 年出现 AF(=高级格式),物理扇区(= block )大小增加到 4096 字节,但仅适用于某些型号。

2002 年引入 LBA-48 位时,磁盘几何寻址(CHS=cylinder-head-sector)被宣布为过时。在 LBA48 的情况下,逻辑 block 寻址 (LBA) 是通过指定从 0 到 (2^48-1) 的序号来到达 block (=扇区)的简单方案。

例如,2002 年之前的计算机和存储是基于 LBA-28 位的,它给出了最大存储大小:
(512 * 2^28) = (2^9 * 2^28) = 2^37 = 2^7 Gb = 128 Gb。

扇区大小为 512 字节的 LBA48 存储的最大大小:
(512 * 2^48) = (2^9 * 2^28) = 2^57 = 2^17 Tb = 131072 Tb = 128 PB。

扇区大小为 4096 字节的 LBA48 存储的最大大小:
(4096 * 2^48) = (2^12 * 2^48) = 2^60 = 2^20 Tb = 1048576 Tb = 1024 PB。

关于linux - 文件系统 "see"是否作为(非常大的)字节数组存储设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44731167/

相关文章:

linux - 从特定文件的开头删除换行符

linux - 用字符串代替shell中的变量

linux - 如果我使用位于 PATH 中的二进制文件的名称命名 bash 脚本函数,会发生什么情况?

Windows 和 Linux 中二进制文件的 C 库校验和

windows - 安装后如何将 WinMerge 与 TortoiseSvn 集成?

node.js - 在 Node/Grunt 中执行特定于操作系统的脚本

Golang - 为什么在相似的机器上编译会导致二进制文件大小明显不同?

linux - 通过ssh从redhat linux客户端连接到windows server 2003

c - 如果我的系统调用引发错误,是否可以容忍?

C# 将 32bpp 图像转换为 8bpp