有关Serverfault关于alignment4k扇区磁盘有许多问题,但有一件事情还不是很清楚。
我成功地alignment了我的RAID1 + LVM。 我做的一件事是使用mdadm超级版本1.0(它将超级块存储在磁盘的末尾)。
该手册说:
不同的子版本将超级块存储在设备上的不同位置,可以在结尾(1.0),开始(1.1)或从开始(1.2)开始4K。 “1”相当于“1.0”。 “默认”相当于“1.2”。
1.2版本是默认的,用于4K扇区驱动器? 我看到它的方式不是这样,因为从起始4k开始,超级块的长度不是4k(如果我没有记错的话,超级块的长度大约是200字节)。
任何对此的洞察力都是值得欢迎
编辑:
下面回答mdadm superblock 1.1和1.2是为4kalignment的。 我刚刚创build了一个整体设备突袭:
mdadm --create /dev/md4 -l 1 -n 2 /dev/sdb /dev/sdd
然后我添加了一个逻辑卷:
vgcreate universe2 /dev/md4
arrays以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
所以我怀疑它是否正确alignment。
(磁盘是1.5TB的WD EARS,我把它们放在我的台式电脑中,并且它们以大约80MB / 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分割。但是这并不重要,因为重新同步与设备包含的内容无关。
另一个编辑:它似乎不是一个alignment问题; 因为hdparm -t显示其中一个磁盘的读取速度非常低(30 MB / s)。 别的东西是不对的。
编辑2:我永远不会记得更新这个职位,当我find答案。 一切都很好地alignment。 其中一个磁盘坏了。 显然,它已经到了最后一站,甚至在某个时候爆发了。 replace磁盘工作正常。
是的,它是用于4k部门的alignment。
使用1.1和1.2超级块时,在每个磁盘的开始处保留空间,以便超级块不被踩踏。 超级块创build代码强制这个保留空间是4kB的倍数。 所有的物理读取都从这个保留空间的末尾偏移,而不是从超级块的末尾偏移。 这因此保留了任何扇区大小均匀分配到4kB的alignment方式。
如果你有兴趣,这里是来自mdadm源代码 ( super1.c )的certificate:
/* force 4K alignment */ reserved &= ~7ULL; sb->data_offset = __cpu_to_le64(reserved);
而这个data_offset参数被内核中的RAID1代码用来抵消物理读取,例如在读取path中:
read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset