如果已安装,blockdev 会报告不同的块大小

如果已安装,blockdev 会报告不同的块大小

我有一台运行 Red Hat 7 的 Proliant,带有两个带有 raid 1(硬件 raid)的数据磁盘。

我使用以下命令创建了文件系统:

mkfs.xfs /dev/sdb

xfs 的默认块大小为 4096。

因此 blockdev --report显示如下内容:

RO    RA   SSZ   BSZ  1er sect.          Taille   Périphérique
rw  8192   512  4096          0    600093712384   /dev/sdb

没关系。

如果我安装驱动器则 blockdev --report显示以下内容:

RO    RA   SSZ   BSZ  1er sect.          Taille   Périphérique
rw  8192   512  512          0    600093712384   /dev/sdb

因此安装后,块大小似乎是 512,而不是 4096。

我不明白为什么。我有一个数据库要放在这个驱动器上,我需要 4096 块大小。有什么想法吗?块大小是 512 还是 4096?

答案1

当已安装分区时,将设置块大小以反映分区的块大小。否则将显示实际设备的默认块大小。

在您的情况下,最令人困惑的是,您没有对其进行分区,这会使情况更加明显。

答案2

简短回答:在挂载时,XFS 将块设备的“块大小”设置为 mkfs.xfs 或 xfs_info 输出中显示的“扇区大小”。在 mkfs 时更改格式的扇区大小将在挂载时产生不同的块设备“块大小”。

较长的答案:XFS 在挂载时将块设备的块大小设置为其内部“扇区”大小,这是它将执行的最小 IO 粒度。它目前通过set_blocksize()中的调用来执行此操作xfs_setsize_buftarg()

在上面的原始问题中,文件系统的块大小为 4k,但扇区大小为 512 字节;这意味着元数据更新仍可能在 512 字节 IO 中完成,因此 XFS 将块设备“块大小”设置为 512。

如果您-s sectsize对 mkfs.xfs 使用参数,这会将 IO 的最小单位更改为您指定的大小,并且 XFS 也会在挂载时将块设备的“块大小”设置为相同的值。

注意:您选择的扇区大小不应大于驱动器可以执行的最大原子 IO,因为 XFS 期望扇区大小的写入要么完全写入,要么失败,中间没有部分写入。通常,mkfs.xfs 将向设备查询适当的扇区大小,并选择正确的默认值。

答案3

我不知道为什么这是,但我做了以下事情:

$ mkfs -t xfs -f /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=21, agsize=268435455 
blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5370675200, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
$ blockdev --report /dev/sdb 
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0  21998285619200   /dev/sdb
$ mount /scratch/
$ blockdev --report /dev/sdb 
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512   512          0  21998285619200   /dev/sdb

没什么好惊讶的。和你一样。(BSZ安装后变为 512)然后,我尝试了-s参数:

$ mkfs -t xfs -f -s size=4096 /dev/sdb -L cta5.scratch
meta-data=/dev/sdb               isize=512    agcount=21, agsize=268435455 
blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5370675200, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
$ blockdev --report /dev/sdb 
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0  21998285619200   /dev/sdb
$ mount /scratch/
$ blockdev --report /dev/sdb 
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0  21998285619200   /dev/sdb

sectsz命令响应已更改。mkfs万岁!它保持在 4k BSZ。无论这意味着什么……

这是 10×2TB RAID0 文件系统。我的操作系统也是 RHEL7 衍生版。

答案4

这可能是因为创建该分区时扇区大小较小。请尝试以下操作:

mkfs.xfs -s size=4096 -b size=4096 -f /dev/sdb1

(请确保先备份数据)然后挂载 fs。

相关内容