我有一个闪存驱动器,我想了解它的属性,如 输出的fdisk
。我将其插入并检查dmesg
,我可以看到它被安装为 ,/dev/sdb1
所以我运行fdisk
以查看报告的内容/dev/sdb
mike@mike-Qosmio-X770:~$ sudo fdisk -l
[sudo] password for mike:
Disk /dev/sdb: 127 MB, 127926272 bytes
16 heads, 32 sectors/track, 488 cylinders, total 249856 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b3ee723
Device Boot Start End Blocks Id System
/dev/sdb1 * 32 249854 124911+ b W95 FAT32
据我所知,该驱动器是一个 128MB FAT32 格式的闪存驱动器,上面只有一个分区。它从“32”开始(可能 0-31 用于某些 FTL)。
报告称一个“扇区”大小为 512 字节,共有 249,856 个扇区(总共 122MB)。
现在我对磁柱、磁头和扇区/磁道数感到困惑。我知道磁柱/磁头与磁盘存储类型有关。对于闪存设备来说,这些有什么意义吗?或者这只是“剩余”信息,对fdisk
非磁性存储介质来说真的没有任何意义?如果是后者,为什么要给出值呢?
第二个问题,区块的“大小”是多少?:
Blocks
124911+
+
那么块计数后面的含义是什么?
答案1
块的大小
三维磁道(所有磁盘上的磁道相同)称为柱面。每个磁道分为 63 个扇区。每个扇区包含 512 字节数据。因此分区表中的块大小为 64 个磁头 * 63 个扇区 * 512 字节呃...除以 1024... :-)
Linux 每次提到块大小时,几乎都是 1024 字节- Linux 使用 1024 字节块作为缓冲区缓存和所有东西的原始单位。唯一不这样做的情况是在文件系统特定的驱动程序中,因为某些文件系统使用其他粒度(例如,在正常大小的 ext3 文件系统上,文件系统块大小通常为 4096 字节)。但是,您几乎永远看不到文件系统块大小;几乎唯一真正看到它的方法就是成为内核黑客或运行 dumpe2fs 之类的程序。
问题在于,你必须记住四个不同的单位。更糟糕的是,其中两个单位同名。以下是不同的单位:
- 硬件块大小,“扇区大小”
- 文件系统块大小,“块大小”
- 内核缓冲区缓存块大小,“块大小”
- 分区表块大小,“柱面大小”
为了区分文件系统块大小和缓冲区缓存块大小,我将遵循 FAT 术语并使用“簇大小”作为文件系统块大小。
扇区大小是硬件处理的单位。不同硬件类型有不同的扇区大小,但大多数 PC 硬件(软盘、IDE 磁盘等)都使用 512 字节扇区。
簇大小是文件系统使用的分配单元,也是造成碎片的原因 - 我相信您知道这一点。在中等大小的 ext3 文件系统上,簇大小通常为 4096 字节,但您可以使用 进行检查
dumpe2fs
。请记住,这些通常也称为“块“,我只是称他们为簇这里。簇大小是在统计缓冲区中返回的st_blksize
,以便程序能够计算文件的实际磁盘使用情况。块大小是内核在缓存从存储设备读取的扇区时内部使用的缓冲区的大小(因此称为“块设备”)。由于这是内核中最原始的存储形式,因此所有文件系统簇大小都必须是块大小的倍数。用户空间程序也几乎总是引用此块大小。例如,当您
du
不使用 -h 或 -H 选项运行时,它将返回文件占用了多少个这样的块。df
还会报告这些块的大小,输出中的“块”列fdisk -l
属于此类型,依此类推。这就是最常被称为“块”的东西。每个块可容纳两个磁盘扇区。磁柱大小只在分区表和 BIOS 中使用(Linux 不使用 BIOS)。
0-31 区
回答有关前 32 个扇区的问题,由于闪存驱动器是 FAT 格式的设备,因此查看 FAT 文件系统定义,可以看到 FAT 文件系统由四个不同的部分组成:
a) 保留扇区;
b) 文件分配表 (FAT) 区域;
c) 根目录区域;
d) 数据区域。
保留部门,位于最开始处,(在本例中)是扇区 0-31:
第一个保留扇区(逻辑扇区 0)是引导扇区(又名 卷引导记录 (VBR))其中包括一个称为BIOS 参数块(包含一些基本的文件系统信息,特别是其类型,以及指向其他部分位置的指针)并且通常包含操作系统的引导加载程序代码。
引导扇区中的重要信息可以通过操作系统结构访问,该结构称为驱动参数块 (DPB)在 DOS 和 OS/2 中。
保留扇区的总数由引导扇区内的字段指示,在 FAT32 文件系统上通常为 32。
对于 FAT32 文件系统,保留扇区包括文件系统信息区在逻辑扇区 1 和备份引导扇区位于逻辑扇区 6。
虽然许多其他供应商继续采用单扇区设置(仅逻辑扇区 0)作为引导加载程序,但自引入 FAT32 以来,Microsoft 的引导扇区代码已扩展到逻辑扇区 0 和 2,其中逻辑扇区 0 依赖于逻辑扇区 2 中的子例程。备份引导扇区区域也由三个逻辑扇区 6、7 和 8 组成。在某些情况下,Microsoft 还使用保留扇区区域的扇区 12 作为扩展引导加载程序。
只是补充信息,与 OP 问题无关
FAT 区域,位于第 32 区:
为了进行冗余检查,这通常包含文件分配表的两个副本(可能有所不同),尽管很少使用,即使是磁盘修复实用程序也是如此。
这些是数据区域的映射,指示文件和目录使用哪些簇。在 FAT12 和 FAT16 中,它们紧跟在保留扇区之后。
通常,额外的副本在写入时保持紧密同步,而在读取时,它们仅在第一个 FAT 中发生错误时使用。在 FAT32 中,可以从默认行为切换,并从可用的 FAT 中选择一个 FAT 用于诊断目的。
图中的前两个簇(簇 0 和 1)包含特殊值。
根目录区域:
这是一个目录表,用于存储有关位于根目录中的文件和目录的信息。它仅用于 FAT12 和 FAT16,并为根目录规定一个固定的最大大小,该大小在创建此卷时预先分配。FAT32 将根目录与文件和其他目录一起存储在数据区域中,允许其增长而不受此类限制。因此,对于 FAT32,数据区域从这里开始。
数据区域:
这是实际文件和目录数据存储的位置,占据了分区的大部分空间。传统上,在 IBM 兼容机上格式化时,数据区域的未使用部分会根据 INT 1Eh 的磁盘参数表 (DPT) 用填充值 0xF6 进行初始化,但也用于 Atari Portfolio。8 英寸 CP/M 软盘通常预格式化为 0xE5;通过 Digital Research,此值也用于 Atari ST 格式化软盘。Amstrad 改用 0xF4。一些现代格式化程序使用值 0x00 擦除硬盘,而使用值 0xFF(未编程闪存块的默认值)用于闪存盘以减少磨损。后一个值通常也用于 ROM 磁盘。(一些高级格式化工具允许配置格式填充字节。)
只需在 FAT 中向文件链添加更多链接,即可任意增加文件和子目录的大小(只要有空闲簇)。但请注意,文件是以簇为单位分配的,因此如果 1 KiB 文件位于 32 KiB 簇中,则会浪费 31 KiB。
FAT32 通常从 2 号簇开始根目录表:数据区域的第一个簇。
来源:维基百科 - 文件分配表
答案2
我猜想扇区 1-31 是为启动信息和分区表信息保留的。分区 /dev/sdb1 从块/扇区 32 开始,一直到 249854。它是物理磁盘上的逻辑分区。
124911+ 给出 32 至 249854 之间的块数。
关于磁盘几何,这里是man fdsik
这样说的:
如果可能,fdisk 将自动获取磁盘几何信息。这不一定是物理磁盘几何信息(事实上,现代磁盘实际上没有任何类似物理几何信息的东西,当然也不是可以用简单的“柱面/磁头/扇区”形式描述的东西),但它是 MS-DOS 用于分区表的磁盘几何信息。
通常默认情况下一切都会顺利进行,如果 Linux 是磁盘上唯一的系统,则不会出现任何问题。但是,如果必须与其他操作系统共享磁盘,则让另一个操作系统的 fdisk 至少创建一个分区通常是一个好主意。当 Linux 启动时,它会查看分区表,并尝试推断出与其他系统良好协作所需的(假)几何结构。