Mat*_*tan 27 performance io hard-disk
许多新硬盘的物理扇区大小为 4096。是否可以使系统使用相同大小的逻辑扇区大小,而不是默认的 512 逻辑扇区大小?
它会加速批量读取和写入吗?哪里可以配置?
max*_*zig 33
512 字节并不是真正的默认扇区大小。这取决于您的硬件。
您可以通过/sys
伪文件系统显示磁盘报告的物理/逻辑扇区大小,例如:
# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512
Run Code Online (Sandbox Code Playgroud)
这两个值有什么区别?
physical_block_size
是驱动器能够在原子操作中写入的最小块大小。logical_block_size
是驱动器能够写入的最小尺寸(参见 linux 内核文档)。因此,如果您有一个 4k 驱动器,那么您的存储堆栈(文件系统等)使用等于或大于物理扇区大小的东西是有意义的。
这些值也显示在 的最新版本中fdisk
,例如:
# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes
Run Code Online (Sandbox Code Playgroud)
在当前的 linux 发行版上,程序(应该关心最佳扇区大小)mkfs.xfs
会默认选择最佳扇区大小(例如 4096 字节)。
但是您也可以通过选项显式指定它,例如:
# mkfs.xfs -f -s size=4096 /dev/sda
Run Code Online (Sandbox Code Playgroud)
或者:
# mkfs.ext4 -F -b 4096 /dev/sda
Run Code Online (Sandbox Code Playgroud)
在任何情况下,大多数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
Run Code Online (Sandbox Code Playgroud)
或者:
# tune2fs -l /dev/sda
Block size: 4096
Fragment size: 4096
Run Code Online (Sandbox Code Playgroud)
或者:
# 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
Run Code Online (Sandbox Code Playgroud)
在分区上创建文件系统时,要检查的另一件事是分区起始地址是否实际与物理块大小对齐。例如,查看fdisk -l
输出,将起始地址转换为字节,将它们除以物理块大小 - 如果分区对齐,则提醒必须为零。
不,这是不可能的,即使是也没关系。无论如何,IO 通常以至少 4096 字节为单位完成,并且通常更多。