mdadm 및 4k 섹터 (고급 형식)


10

Serverfault에는 4k 섹터 디스크 정렬에 대한 많은 질문이 있지만 아직 한 가지 분명하지 않습니다.

RAID1 + LVM을 성공적으로 정렬했습니다. 내가 한 것 중 하나는 mdadm 수퍼 블록 버전 1.0 (디스크 끝에 수퍼 블록을 저장함)을 사용하는 것입니다.

맨 페이지에서 다음과 같이 말합니다.

다른 하위 버전은 수퍼 블록을 장치의 다른 위치 (끝 (1.0), 시작 (1.1)) 또는 4K (시작 (1.2))에 저장합니다. "1"은 "1.0"과 같습니다. "default"는 "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

그런 다음 논리 볼륨을 추가했습니다.

vgcreate universe2 /dev/md4

어레이가 16MB / 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.5TB WD EARS입니다. 데스크탑 PC에 디스크가 있으며 약 80MB / 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)

데이터 오프셋은 2048 섹터로 8로 나눌 수 있으므로 괜찮다고 생각할 것입니다. 볼륨 그룹의 물리적 범위 크기는 4MiB이며 8로도 나눌 수 있습니다. 그러나 재 동기화는 장치의 내용과 관련이 없기 때문에 문제가되지 않습니다.

또 다른 편집 : 정렬 문제가 아닌 것으로 보입니다. hdparm -t는 디스크 중 하나의 읽기 속도가 매우 낮기 때문에 (30MB / s). 다른 것이 잘못입니다.

Edit2 : 답을 찾았을 때이 게시물을 업데이트하는 것을 잊지 마십시오. 모두 잘 정렬되어 있습니다. 디스크 중 하나가 고장났습니다. 분명히 그것은 마지막 다리에 있었고 심지어는 어느 시점에서 파산했습니다. 교체 디스크가 정상적으로 작동했습니다.

답변:


13

예, 4k 섹터 정렬을 위해 만들어졌습니다.

1.1 및 1.2 수퍼 블록을 사용하면 각 디스크의 시작 부분에 공간이 예약되어 수퍼 블록이 짓밟 히지 않습니다. 수퍼 블록 생성 코드는이 예약 된 공간이 4kB의 배수가되도록합니다. 모든 물리적 읽기는 수퍼 블록의 끝 이 아니라이 예약 된 공간의 끝에서 오프셋 됩니다 . 따라서 4kB로 균등하게 분할되는 모든 섹터 크기에 대한 정렬이 유지됩니다.

관심이 있으시면 다음은 mdadm 소스 코드 ( super1.c) 의 증거입니다 .

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

그리고이 data_offset매개 변수는 커널RAID1 코드에서 물리적 경로 (예 : 읽기 경로)를 오프셋하는 데 사용됩니다 .

read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset

1.1과 1.2가 모두 4k 정렬에 적합한 경우 1.2 버전은 무엇입니까? 왜 슈퍼 블록을 시작부터 4k까지 시작하고 싶습니까?
Halfgaar

2
따라서 디스크의 시작 부분을 부팅 블록 용으로 예약하여 디스크를 부팅 디스크로 사용할 수 있습니다.
Tom Shaw

방금 게시물을 업데이트했습니다. 외관상 새 어레이가 올바르게 정렬되지 않았습니다.
Halfgaar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.