我有一台运行 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。