如何找到我的硬盘驱动器的硬件块读取大小?


Answers:


44

lsblk命令这是伟大的:

lsblk -o NAME,PHY-SeC

结果:

NAME   PHY-SEC 
sda        512 
├─sda1     512 
├─sda2     512 
└─sda5     512 

3
是否区分逻辑大小和物理大小?
CMCDragonkai 2014年

2
将不会提供实际的物理尺寸。
sjas 2015年

7
对我有用,PHY-SEC显示正确的物理,而LOG-SEC显示逻辑大小。
soger,

31

Linux在文件中公开物理扇区的大小/sys/block/sdX/queue/physical_block_size。虽然,为了获得最佳性能,您可能应该使用不同的大小和度量进行一些测试。我能不能 找到 一个 明确的 答案中,使用完全相同的物理块大小将得到最佳的结果(虽然我认为它不可能是一个不错的选择)。


2
我有一个仅在该位置公开hw_sector_size的Debian Lenny系统(2.6.26内核),以及提供了两者的更新的Ubuntu Karmic系统(2.6.31内核)。因此,这在某种程度上取决于所使用的内核。
奎克吉德

将不会提供实际的物理尺寸。
sjas 2015年

@sjas你能扩大吗?你怎么会知道这事?
Hashim

1
@Hashim我测试了一些旧硬盘,其中一些硬盘具有512b和4k扇区大小。superuser.com/a/426015/145072是实际有效的解决方案。除此以外的所有东西hdparm都可能对您撒谎。
sjas


7

我的目的不是要得到一个完整的答案,但我希望它也能有所帮助。

以下是http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html中的内容


3-确定适当的块大小

为了更快地备份,它可以帮助确定要备份的磁盘设备的最佳块大小。假设您要备份/ dev / sda,以下是使用fdisk命令确定最佳块大小的方法:

rescuecd#/> /sbin/fdisk -l /dev/sda | grep Units

Units = cylinders of 16065 * 512 = 8225280 bytes

注意fdisk输出显示“ 16065 * 512的气缸”。这意味着磁盘上每个块有512个字节。通过将块大小增加2到4的倍数,可以显着提高备份速度。在这种情况下,最佳块大小可能是1k(512 * 2)或2k(512 * 4)。顺便说一句,贪婪并使用5k的块大小(512 * 10)或过多的块将无济于事;最终,系统将成为设备本身的瓶颈,您将无法从备份过程中挤出任何其他性能。(添加了重点)


我怀疑给定配置的最佳块大小与最佳块大小之间的性能差异可忽略不计,除非数据集巨大。确实,FixUnix的用户(2007年后)声称其最佳时间仅比次优时间快了5%。也许您可以通过使用“群集”大小或文件系统块大小的倍数来提高效率。

当然,如果您移到最佳块大小的任一边太远,都会遇到麻烦。

最重要的是,在绝对最佳的块大小下,您可能只会获得大约5%的性能(即每小时3分钟),因此请考虑是否值得您花费时间和精力进行进一步的研究。只要您远离极端价值观,就不应遭受痛苦。


1
使用echo "p" | /sbin/fdisk /dev/sda...代替的某些原因/sbin/fdisk -l /dev/sda...?第二个会更清洁,不会尝试进行任何更改。
奎克吉at德

您最好问一下马克·科利奇(链接)。他正在创建备份,我只引用了他文章的一部分。
Mark C 2010年

1
@MarkC链接的文章使用/sbin/fdisk -l /dev/sda | grep Units。最近两年可能已更改。无论如何,我已经更新了您的答案。
Bob

2
IMO这是最有用的答案,主要是因为最后一个加粗的段落。Linux非常努力地优化磁盘访问,只要您为磁盘使用适当的io调度程序和脏缓冲区设置,任何情况下8192字节的块大小就可以了。
较酷的

4

每次磁盘传输都会产生一个处理器必须处理的中断。典型的50Mb / s磁盘将要以512b块大小每秒生成100000个磁盘,普通处理器将处理成千上万个,因此更大(2 ^ x)的块大小会更方便(大多数情况下4k作为默认FS块大小)高达64k ISA DMA大小的系统)将更加实用...


你能澄清一下吗?
sjas 2015年

1
@Sjas他或她所说的显然是,每个扇区都是通过处理器必须处理的关联“中断”来单独传输的。较大的块大小意味着对于相同数量的数据,较少的中断(因此使用的CPU周期也较少)。
Mark C

1

此外,您可以查看的输出lshw以验证其他结果,(也因为hdparm我的发行版似乎不可用。)这可能有助于缩小范围:

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
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.