针对物理扇区大小4096 HDD优化逻辑扇区大小


20

对于许多新的硬盘驱动器,物理扇区大小为4096。是否可以使系统使用相同大小的逻辑扇区大小,而不是使用默认逻辑扇区大小512?

它会加快批量读取和写入的速度吗?在哪里可以配置?


有关对齐问题的评论,请参见unix.stackexchange.com/a/18542/1131。的最新版本mkfs.*应自动使用最佳扇区大小。您可以进行一些mkfs.*测试并检查结果(在mkfs的详细输出中或在相关的fs实用程序中)。
— maxschlepzig 2015年

谢谢,但没有对齐问题
— Matan 2015年

Answers:


29

512字节不是默认的扇区大小。这取决于您的硬件。

您可以通过以下方式显示磁盘报告的物理/逻辑扇区大小 /sys伪文件系统,例如:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

这两个值有什么区别?

  • 的 physical_block_size是驱动器能够以原子操作写入的最小块大小。
  • 的 logical_block_size是最小尺寸的驱动器能够写入(参见linux内核文件)。

因此,如果您有4k驱动器,则说明您的存储堆栈(文件系统等)使用的物理空间等于或大于物理扇区的大小。

这些值还会显示在的最新版本中fdisk,例如:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

在当前的Linux发行版中,程序(应该关注最佳扇区大小)如下 mkfs.xfs默认会选择最佳扇区大小(例如4096字节)。

但是您也可以通过选项来明确指定它,例如:

# mkfs.xfs -f -s size=4096 /dev/sda

要么:

# mkfs.ext4 -F -b 4096 /dev/sda

无论如何,大多数 mkfs变体还将在执行期间显示使用的块大小。

对于现有文件系统,可以使用以下命令来确定块大小:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

要么:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

要么:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

在分区上创建文件系统时,要检查的另一件事是分区起始地址是否实际与物理块大小对齐。例如,查看fdisk -l输出,将起始地址转换为字节,然后将其除以物理块大小-如果分区对齐,则提示必须为零。


谢谢,您对Linux描述的逻辑和物理块大小的说明非常有帮助。我最近遇到了一种情况,同一8TB硬盘在一个USB机柜中显示为512字节块,在另一个逻辑和物理磁盘中显示为4K块。我认为出了点问题,因为在更换机箱时Linux没有看到分区图,但是后来我发现GPT从第二个逻辑块开始,因此它在新对齐方式的位置不正确。我使用gdisk重新创建了一个大分区,而我的所有数据仍然存在(带有4K块的ext4)。
— Raptor007 '18

您描述的检查对齐方式是否可靠?我使用了“ parted”实用程序,它报告了一个硬盘分区是对齐的,但是当您采用这种方法时,我查询了物理块大小,得到了512,然后从中获取了分区的起始地址fdisk -l,将其除以8,然后再除以512。余数不是0,因此分区似乎未对齐
— user907860

1
@ user907860为什么要除以8?我的一个Linux系统中的一份fdisk -l报告Units = sectors of 1 * 512 = 512 bytes-因此,对于512/4096逻辑/物理驱动器,该磁盘具有2个从2048和1026048开始的分区,我进行了计算2048*512%4096,1026048*512%4096例如-在python shell中。由于两个表达式都等于零,因此这些分区是4k对齐的。
— maxschlepzig

非常感谢您的解释,我没有注意到数字是扇区,而不是位。我在一个月前提高了答案的水平,可悲的是,我不能再做一次
— user907860

2

不,这是不可能的,如果有的话,也没有关系。IO通常至少以4096字节为单位完成,通常还要更多。


2
不确定此陈述与我的问题有何关系。逻辑扇区大小可能意味着IO管道的某些部分中的块较小,并且对HDD固件进行了不必要的仿真。要澄清吗?
— Matan 2015年

2
@Matan,我完全无法理解你的评论。我解释说IO不会一次执行512字节,因此以512字节扇区寻址磁盘这一事实无关紧要。驱动器唯一需要做的仿真是,如果您尝试进行未4k对齐的写操作,并且由于IO通常以4k的倍数完成,并且现代的分区工具确保分区从4k边界开始,那不会发生。
— psusi

1
无论是在其主张还是其结论中,这种“答案”都是完全错误的。格式化卷时设置逻辑大小。逻辑和物理大小之间的不匹配在诸如基于闪存的存储等技术中具有一定的成本。
— 克里斯·斯特拉顿

@ChrisStratton,不,您正在考虑文件系统块/群集的大小。逻辑扇区大小是驱动器向OS报告的扇区大小,它只能读取和写入该大小或该大小倍数的单位,并且扇区以该大小为单位进行编号。与物理扇区大小进行比较,在物理扇区中,某些驱动器实际上在内部读取和写入4k扇区,但假装它们使用512字节扇区与与无法处理4k逻辑扇区的较早操作系统进行向后兼容。
— psusi

不正确 每当您让软件尝试在小于存储系统物理尺寸的设备上运行时,都会出现此问题。对于逻辑单元小于闪存擦除块大小的情况尤其如此-软件最终不得不将未触及的部分复制到新的物理块中,并且这会耗费擦除寿命,无论它是由操作系统文件系统代码还是由代码完成的驱动器内部。
— 克里斯·斯特拉顿

1

是的,这是可能的,但是这样做会导致驱动器填充速度比预期的快得多。对于小于512K的文件,由于大多数文件系统(NTFS等)无法允许文件共享扇区,因此每个文件将占用完整的4096K(4MB),并用0填充扇区的其余部分。文件系统的最佳选择是允许可变的扇区大小,但是,这增加了MFT(主文件表)的大小,并增加了数据损坏的风险,同时降低了轻松恢复数据的能力。换句话说,恢复软件不会完全了解边界。因此,虽然4096K的逻辑扇区大小对于大文件来说是很棒的,但对于普通的日常使用PC,它只是一堆0。现在,话虽如此,当数据小于逻辑扇区大小时,可以选择将数据存储在MFT本身中。但是,这意味着您的MFT变得巨大,数据将被写入两次(HDD上有MFT的两个副本)。您还必须指定MFT的最大大小,当达到最大大小或驱动器使用量超过MFT可用的最大可用容量时,这可能会引起问题。所有这些都是基于NTFS文件系统的用法。更好的是,NTFS确实允许您在4MB或更小的逻辑扇区大小的块级别对文件使用本机压缩。由于NTFS压缩的工作方式而应用了此限制。无论逻辑扇区大小如何,都将读取和压缩4MB的块。当然,

那么,这对您有帮助吗?


我认为,如果不使用NTFS作为示例文件系统,此答案会更好,因为(除非过去几年中发生了变化,否则)它在Unix和朋友环境中并不受到很好的支持或根本不被支持
— Fox

K代表Kilo,Kilo是一个度量单位前缀,表示千。4 MiB是1024个扇区,而不是您建议的1个扇区。4096字节是4 KiB或0,00390625 MiB。
— Aeyoun

这不是答案。OP在谈论HDD的扇区大小,而不是文件系统的块大小。那是不同的层。
— 炸鱼薯条德里克18/12/18

-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.

您错过了写下此报价的来源。
— 换句话说
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.