AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 761398
Accepted
ChennyStar
ChennyStar
Asked: 2023-11-14 01:16:16 +0800 CST2023-11-14 01:16:16 +0800 CST 2023-11-14 01:16:16 +0800 CST

将 HDD 的逻辑扇区大小设置为 4Kn 有什么好处吗?

  • 772

现代 HDD 都是“高级格式”的,例如默认情况下它们报告的逻辑/物理扇区大小为 512/4096。

默认情况下,大多数 Linux 格式化工具使用 4096 字节的块大小(至少这是 Debian/EXT4 上的默认值)。

直到今天,我还认为这是一种优化:Linux/EXT4 将 4K 数据块发送到 HDD,HDD 可以最佳地处理它们,即使其逻辑扇区大小为 512K。

但今天我读到了这篇最近(2021)的文章。该人做了一些 HDD 基准测试,以检查将 HDD 的逻辑扇区大小从 512e 切换到 4Kn 是否会提供更好的性能。他的结论是:

请记住:我的理论是文件系统使用 4k 块,并且所有内容都正确对齐,因此不应该有有意义的差异。

这成立吗?嗯,不。一点也不。(...) 使用 4kb 块...这里有一个非常大的差异。这是单线程基准测试,但在 4kb 块传输上,4k 扇区驱动器始终存在巨大领先优势。(...)

结论:使用 4k 扇区!
就我而言,这里的结论非常清楚。如果您拥有可以处理 4k 扇区的现代操作系统,并且您的驱动器支持以 512 字节或 4k 扇区运行,请在执行其他操作之前将驱动器转换为 4k 本机扇区。然后继续你的方式,让操作系统来处理它。

基本上,他的结论是,与开箱即用的 512e 相比,将 HDD 的逻辑扇区大小切换为 4Kn 后性能得到了相当大的改进:

在此输入图像描述

现在,需要注意的重要一点是:该特定基准测试是单线程的。他还做了一个 4 线程基准测试,结果显示 512e 和 4Kn 之间没有任何显着差异。

因此我的问题是:

  • 仅当您有在驱动器上读/写的单线程进程时,他的结论才成立。Linux有这样的单线程进程吗?
  • 因此,您是否建议将 HDD 的逻辑扇区大小设置为 4Kn ?
hard-disk
  • 2 2 个回答
  • 199 Views

2 个回答

  • Voted
  1. Best Answer
    ChennyStar
    2023-11-17T17:08:00+08:002023-11-17T17:08:00+08:00

    根据 @Tomes 的建议,我试图根据我与 @user10489 的评论交换来回答我自己的问题。

    当然,我不是这方面的专家,所以如果需要,请随时修改或更正我的陈述。

    但首先需要澄清一下,因为在很多网站上,人们混淆了块大小和扇区大小:

    • 块是文件系统可以处理的最小数据量(默认情况下通常为 4096 字节,例如 EXT4,但可以在格式化期间更改)。我相信 Windows 世界里有一个叫做集群的东西。
    • 扇区是驱动器可以处理的最小数据量。大约从 2010 年开始,所有 HDD 都使用 4096 字节扇区(例如,物理扇区大小为 4096 字节)。但为了与只能处理 512 字节扇区 HDD 的旧操作系统保持兼容,现代驱动器仍然将自己呈现为 512 字节 HDD(例如,其逻辑扇区大小为 512 字节)。从操作系统看到的逻辑 512 字节到 HDD 的物理 4096 字节的转换是由 HDD 的固件完成的。这称为高级格式 HDD(又名 512e/4Kn HDD,e用于模拟和n本机)

    因此,开箱即用的 HDD 的逻辑扇区大小为 512 字节,因为驱动器制造商希望所有操作系统(包括旧操作系统)都能识别它。但所有现代操作系统都可以处理本机 4K 驱动器(Linux从 2010 年内核 2.6.31 开始就可以做到这一点)。因此,一个合理的问题是:如果您知道自己永远不会使用 2010 年之前的操作系统,那么在使用新 HDD 之前将其逻辑扇区大小从 512 字节修改为 4096 字节是否有意义?

    有人做了一个基准测试来看看这样做是否有真正的好处,并发现只有在一种情况下才有真正的区别:单线程 R/W 测试。在多线程测试中,他没有发现显着差异。

    我的问题是:这个特定的用例是否适用于现实生活?例如,Linux 是否执行大量单线程 R/W 操作?在这种情况下,将 HDD 的逻辑扇区大小设置为 4096 将带来一些实际的好处。

    这个问题我还是没有答案。但我认为另一种看待它的方法是,在现代操作系统上,将驱动器的默认 512 字节逻辑扇区大小更改为 4096 字节并没有什么坏处:如果操作系统这样做,最好的情况是您会获得一些性能改进单线程 R/W 操作,最坏的情况没有任何变化。

    同样,驱动器使用开箱即用的 512 字节逻辑扇区的唯一原因是为了与 2010 年之前的旧操作系统保持兼容。在现代操作系统上,将其设置为 4096 字节不会有什么坏处。

    最后要注意的一件事是,并非所有 HDD 都支持该更改。据我所知,那些明确报告其支持的逻辑扇区大小的人:

    # hdparm -I /dev/sdX | grep 'Sector size:'
     Logical  Sector size:                   512 bytes [ Supported: 512 4096 ]
     Physical Sector size:                  4096 bytes
    

    然后也可以使用hdparm或制造商的专有工具对其进行更改。

    [ 编辑 ]

    但将逻辑扇区大小从 512 更改为 4K 可能不是一个好主意,这是有原因的。根据 Wikipedia 的说法,除了操作系统之外,应用程序也是使用基于 512 字节的代码的潜在领域:

    在此输入图像描述

    那么,这是否意味着即使使用支持 4Kn 的现代操作系统,如果特定应用程序不支持它,您也会遇到麻烦?

    在这种情况下,保留 HDD 的默认 512e 逻辑扇区大小可能更有意义,除非您可以绝对确定所有应用程序都可以处理 4Kn。

    [编辑2]

    再想一想,在现代硬件和软件上切换到 4K 扇区可能没有太大风险。大多数软件将在文件系统级别工作,那些具有直接原始块访问权限的软件(格式化工具、克隆工具等)可能会支持 4K 扇区,除非它们已经过时。另请参阅将 HDD 扇区大小切换为 4096 字节

    • 3
  2. Tomes
    2023-11-14T02:13:52+08:002023-11-14T02:13:52+08:00

    我不精通文件系统,但在阅读您的文章后,我立即问自己基准测试是如何执行的,以及所示的图表是否可能仅仅由于用于将数据传输到磁盘的总线而支持更大的块大小。

    也许您需要使用我收集到“稍后阅读”列表中的一些链接。关于多线程 I/O:我假设您需要单独的总线才能真正将数据并行传输到磁盘。

    无论如何,我是绿色的,但也许你喜欢这些读物:

    关于磁盘的基准测试和工作负载

    比较两个文件系统..我的注释是“良好的基准测试”

    如果您对特定的文件系统感兴趣,我还希望您能够指出简单的手册页。手册页中有描述的选项,在底部您可以找到支持功能所需的内核版本。但是阅读你的问题这对你来说可能已经很明显了。抱歉没有回复。

    • 0

相关问题

  • 使用 hdparm (APM, Suspend) 的硬盘空闲设置

  • 在 MS-Windows 7 下对外部磁盘进行分区时,ntfs 的版本是什么

  • 我可以远程判断我是否有空闲的 SATA 端口

  • 将局域网硬盘挂载到 linux fedora

  • 以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve