mdadm raid1 和 4k 驱动器上的块大小(或块大小)是多少?

max*_*zig 16 software-raid mdadm raid1

我想在 mdadm raid1 设置中使用两个 3 TB 驱动器(使用 Debian Sequeeze)。

这些驱动器使用 4k 硬件扇区而不是传统的 512 字节扇区。

我有点困惑,因为一方面内核报告:

$ cat /sys/block/sdb/queue/hw_sector_size
512
Run Code Online (Sandbox Code Playgroud)

但另一方面fdisk报告:

# fdisk -l /dev/sdb
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Run Code Online (Sandbox Code Playgroud)

因此,内核似乎认为驱动器使用 4k 扇区。

mdadm男子网页是关于块大小和RAID1有点神秘:

   -c, --chunk=
          Specify chunk size of kibibytes.  The default when  creating  an
          array  is 512KB.  To ensure compatibility with earlier versions,
          the default when Building and array with no persistent  metadata
          is  64KB.   This  is  only  meaningful  for RAID0, RAID4, RAID5,
          RAID6, and RAID10.
Run Code Online (Sandbox Code Playgroud)

为什么raid1没有意义?

看一下/proc/mdstat,raid1设备md8有2930265424个块,即

3000591794176/2930265424/2 = 512
Run Code Online (Sandbox Code Playgroud)

mdadm那么是否使用 512 字节的块大小?(/2 因为它是双向镜像)

块大小与块大小是不同的概念吗?

试图让mdadm 解释一个设备:

# mdadm -E /dev/sdb -v -v
Avail Dev Size : 5860531120 (2794.52 GiB 3000.59 GB)
Array Size : 5860530848 (2794.52 GiB 3000.59 GB)
Run Code Online (Sandbox Code Playgroud)

在哪里

3000591794176/5860530848 = 512
Run Code Online (Sandbox Code Playgroud)

使用mkfs.xfsmd 设备上的默认值,它报告:

sectsz=512
bsize=4096
Run Code Online (Sandbox Code Playgroud)

我通过调用更正了这个 mkfs.xfs -s size=4096 /dev/md8

编辑:测试一下我注意到以下事情:

似乎初始重新同步是使用 128k(而不是 512 字节)的块大小完成的:

md: resync of RAID array md8
md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for resync.
md: using 128k window, over a total of 2930265424 blocks.
Run Code Online (Sandbox Code Playgroud)

显示的速度/proc/mdstat与该块大小一致(对于 512 字节,性能会受到影响):

[>....................]  resync =  3.0% (90510912/2930265424) finish=381.1min speed=124166K/sec
Run Code Online (Sandbox Code Playgroud)

(例如禁用写缓存时显示的速度立即下降到 18m/sec)

/sys实际上有一些相关的文件,除了hw_sector_size

# cat /sys/block/sdb/queue/physical_block_size
4096
# cat  /sys/block/sdb/queue/logical_block_size
512
Run Code Online (Sandbox Code Playgroud)

这意味着驱动器不会就其 4k 扇区大小向内核撒谎,并且内核具有一些 4k 扇区支持(如fstab -l建议的输出)。

谷歌搜索导致一些关于 WD 磁盘的报告,这些报告没有报告 4k 大小 - 幸运的是这个 3 TB WD 磁盘没有这样做 - 也许 WD 用当前磁盘修复了他们的固件。

psu*_*usi 18

块大小不适用于 raid1,因为没有条带化;基本上整个磁盘是一个块。简而言之,您无需担心 4k 物理扇区大小。mdadm 的最新版本使用内核中的信息来确保数据的开头与 4kb 边界对齐。只要确保您使用的是 1.x 元数据格式。