我成功对齐了我的RAID1 LVM.我做的一件事是使用mdadm superblock version 1.0(它将超级块存储在磁盘的末尾).
该联机帮助页说:
The different sub-versions store the
superblock at different locations on
the device,either at the end (for
1.0),at the start (for 1.1) or 4K from the start (for 1.2). “1” is
equivalent to “1.0”. “default” is
equivalent to “1.2”.
1.2版本是默认的,适用于4k扇区驱动器吗?我看到它的方式,它不是,因为从一开始4k超级块的长度不是4k的多(超级块大约200字节长,如果我没记错的话).
对此有任何见解是值得欢迎的.
编辑:
下面回答说mdadm超级块1.1和1.2意味着4k对齐.我刚创建了一个完整的设备raid:
mdadm --create /dev/md4 -l 1 -n 2 /dev/sdb /dev/sdd
然后我添加了一个逻辑卷:
vgcreate universe2 /dev/md4
该阵列以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
所以我怀疑它是否正确对齐.
(磁盘是1.5 TB WD EARS.我在桌面PC上安装它们,它们以大约80 MB / s的速度同步.)
EDIT2:
这是 – 检查输出:
# 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)
数据偏移量为2048个扇区,可以分为8个,因此可以认为没问题.卷组的物理盘区大小为4 MiB,也可以由8分割.但这甚至不重要,因为重新同步与设备包含的内容无关.
另一个编辑:它似乎不是一个对齐问题;因为hdparm -t显示其中一个磁盘的读取速度非常低(30 MB / s).还有别的不对劲.
编辑2:当我找到答案时,我永远不会记得更新这篇文章.一切都很好.其中一个磁盘坏了.显然它是在它的最后一站,甚至在某个时刻破裂.替换磁盘工作正常.
解决方法
对于1.1和1.2超级块,在每个磁盘的开头保留空间,以便超级块不会被踩踏.超级块创建代码强制此保留空间为4kB的倍数.所有物理读取都从此保留空间的末尾偏移,而不是从超级块的末尾开始.因此,这保留了均匀划分为4kB的任何扇区大小的对齐.
如果您有兴趣,这里是the mdadm source code(super1.c)的证明:
/* force 4K alignment */ reserved &= ~7ULL; sb->data_offset = __cpu_to_le64(reserved);
并且RAID1 code in the kernel使用该data_offset参数来抵消物理读取,例如,在读取路径中:
read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset