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_offset的RAID1 代码使用此参数来抵消物理读取,例如在读取路径中:
read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7428 次 |
| 最近记录: |