mdadm 和 4k 扇区(高级格式)

Hal*_*aar 10 linux raid storage mdadm advanced-format

关于对齐 4k 扇区磁盘的 Serverfault 有很多问题,但有一件事对我来说还不是很清楚。

我成功地对齐了我的 RAID1+LVM。我所做的其中一件事是使用 mdadm superblock 1.0 版(将超级块存储在磁盘的末尾)。

手册页是这样说的:

不同的子版本将超级块存储在设备的不同位置,要么在末尾(对于 1.0),要么在开头(对于 1.1),要么从开头开始 4K(对于 1.2)。“1”相当于“1.0”。“默认”相当于“1.2”。

默认的 1.2 版本是为 4k 扇区驱动器制作的吗?在我看来,事实并非如此,因为从一开始的 4k + 超级块的长度并不是 4k 的众多(如果我没记错的话,超级块大约有 200 字节长)。

欢迎对此有任何见解。

编辑:

下面的回答是 mdadm superblock 1.1 和 1.2 用于 4k 对齐。我刚刚创建了一个全设备突袭:

mdadm --create /dev/md4 -l 1 -n 2 /dev/sdb /dev/sdd
Run Code Online (Sandbox Code Playgroud)

然后我给它添加了一个逻辑卷:

vgcreate universe2 /dev/md4
Run Code Online (Sandbox Code Playgroud)

阵列以 16 MB/s 的速度同步:

md4 : active raid1 sdd[1] sdb[0]
      1465137424 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.8% (13100352/1465137424) finish=1471.6min speed=16443K/sec
Run Code Online (Sandbox Code Playgroud)

所以我怀疑它是否正确对齐。

(磁盘为 1.5 TB WD EARS。我的台式电脑中有它们,它们以大约 80 MB/s 的速度同步。)

编辑2:

这是 --examine 输出:

# mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 79843828:7d939cce:1c8f0b32:cf339870
           Name : brick:4  (local to host brick)
  Creation Time : Sat Jul  9 10:47:33 2011
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 2930275120 (1397.26 GiB 1500.30 GB)
     Array Size : 2930274848 (1397.26 GiB 1500.30 GB)
  Used Dev Size : 2930274848 (1397.26 GiB 1500.30 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : active
    Device UUID : dd2e3b5f:33214b96:1cb88169:25deb050

    Update Time : Sat Jul  9 10:49:06 2011
       Checksum : 4f7cd785 - correct
         Events : 1


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing)
Run Code Online (Sandbox Code Playgroud)

数据偏移量是2048个扇区,可以被8整除,所以会觉得没问题。卷组的物理范围大小为 4 MiB,也可被 8 整除。但这甚至无关紧要,因为重新同步与设备包含的内容无关。

另一个编辑:它似乎不是对齐问题;因为 hdparm -t 显示其中一个磁盘的读取速度非常低 (30 MB/s)。还有一点不对劲。

Edit2:当我找到答案时,我从不记得更新这篇文章。一切都很好地对齐。其中一个磁盘坏了。显然它已经到了最后一站,甚至在某个时候也坏了。更换磁盘工作正常。

Tom*_*haw 13

是的,它是为 4k 扇区对齐而设计的。

对于 1.1 和 1.2 超级块,在每个磁盘的开头保留了空间,以便超级块不会被践踏。超级块创建代码强制此保留空间为 4kB 的倍数。所有物理读取都从这个保留空间的末尾偏移,而不是从超级块的末尾偏移。因此,这保留了均匀划分为 4kB 的任何扇区大小的对齐方式。

如果您有兴趣,这里是来自mdadm 源代码( super1.c)的证明:

/* force 4K alignment */
reserved &= ~7ULL;
sb->data_offset = __cpu_to_le64(reserved);
Run Code Online (Sandbox Code Playgroud)

内核中data_offsetRAID1 代码使用此参数来抵消物理读取,例如在读取路径中:

read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset
Run Code Online (Sandbox Code Playgroud)

  • 这样就可以为启动块保留磁盘的开头,允许将磁盘用作启动磁盘。 (3认同)