炸鱼薯条德里克 Asked: 2018-12-18 22:12:54 +0800 CST2018-12-18 22:12:54 +0800 CST 2018-12-18 22:12:54 +0800 CST 硬盘的分区单位是什么? 772 我知道分区表中的单位是扇区。但它是物理扇区大小还是逻辑扇区大小? 当逻辑扇区大小与物理扇区大小不同时,linux内核和分区工具如何处理分区大小,因为分区表中的数字总是记录为扇区数od。 linux hard-disk 1 个回答 Voted Best Answer dirkt 2018-12-18T23:14:23+08:002018-12-18T23:14:23+08:00 正如您在Wikipedia上看到的那样,GPT 中的条目是 LBA(逻辑块地址)。这些是基于逻辑扇区大小的地址。 当硬盘开始具有不同的(更大的)物理扇区大小时,供应商将旧的物理扇区大小保留为逻辑扇区大小,以帮助旧系统使用新硬盘。这意味着硬盘固件包含可以处理逻辑扇区读写的代码:对于读取,它将读取正确的(更大的)物理扇区并仅返回其中的一部分。对于写入,它将首先读取(较大的)物理扇区,然后修改其中的一部分,然后将其移回。 这是低效的,除非读取和写入发生在对应于物理扇区开始的 LBA,并且长度是物理扇区的倍数。 所以内核处理大物理扇区大小的方式是它只尝试使用这些类型的读写。为此,分区必须正确对齐(在物理扇区的边界上)。通常,分区程序会确保是这种情况,如果您尝试以并非如此的方式使用它们,则会打印一条警告。 内核不必那样做;即使不这样做它也会起作用,但效率会降低。 编辑 用户态应用程序是否可以通过 /sys 读取逻辑扇区大小并读取分区表,然后将它们相乘以告诉用户分区有多大? 是的,userland 应用程序就是这样fdisk做的(尽管我认为物理和逻辑扇区大小是/proc,而不是/sys,但我必须查一下)。 当内核操作文件系统时,它不需要知道底层存储的大小,只需要通过读取文件系统的元数据来了解文件系统结构的大小,对吗? 这有点困难:基本的内核单位是“页面”(MMU 单位),而特定文件系统的基本单位是“块”(有时是多个页面)。内核只需要知道这与底层存储的逻辑块大小有何关系,因为计算 LBA 需要这些。 但是当用户空间访问像/dev/sda2 这样的原始分区设备时,内核需要知道分区的开始和大小,不是吗? 是的。这就是为什么它在创建像/dev/sda2. 内核做这个的时候,需要知道分区表中记录的数字单位是逻辑扇区大小,而不是物理扇区大小,对吧? 是的。
正如您在Wikipedia上看到的那样,GPT 中的条目是 LBA(逻辑块地址)。这些是基于逻辑扇区大小的地址。
当硬盘开始具有不同的(更大的)物理扇区大小时,供应商将旧的物理扇区大小保留为逻辑扇区大小,以帮助旧系统使用新硬盘。这意味着硬盘固件包含可以处理逻辑扇区读写的代码:对于读取,它将读取正确的(更大的)物理扇区并仅返回其中的一部分。对于写入,它将首先读取(较大的)物理扇区,然后修改其中的一部分,然后将其移回。
这是低效的,除非读取和写入发生在对应于物理扇区开始的 LBA,并且长度是物理扇区的倍数。
所以内核处理大物理扇区大小的方式是它只尝试使用这些类型的读写。为此,分区必须正确对齐(在物理扇区的边界上)。通常,分区程序会确保是这种情况,如果您尝试以并非如此的方式使用它们,则会打印一条警告。
内核不必那样做;即使不这样做它也会起作用,但效率会降低。
编辑
是的,userland 应用程序就是这样
fdisk
做的(尽管我认为物理和逻辑扇区大小是/proc
,而不是/sys
,但我必须查一下)。这有点困难:基本的内核单位是“页面”(MMU 单位),而特定文件系统的基本单位是“块”(有时是多个页面)。内核只需要知道这与底层存储的逻辑块大小有何关系,因为计算 LBA 需要这些。
是的。这就是为什么它在创建像
/dev/sda2
.是的。