실수 로이 답변을 발견했지만 누군가 궁금한 경우 실험에서 지원하는 답변이 있습니다.
짧은 버전
보너스 질문 : md(4)
크기가 다른 블록 장치 에서 RAID 어레이를 만들 수 있습니까? 예. 그러나 RAID 어레이는 가장 작은 블록 장치 의 크기와 자체 관리를위한 오버 헤드를 갖습니다 . 장치 크기가 서로 1 % 이내 인 경우 경고가 표시됩니다.
질문 1 : md(4)
가장 작은 현재 구성원보다 작은 장치를 기존 RAID 배열에 추가 할 수 있습니까? 아니야, 미안. mdadm
귀하의 데이터를 보호하기 위해 그렇게 거부합니다.
질문 2 : 기존 md 배열의 크기를 조정할 수 있습니까? 그렇습니다 ( mdadm
manpge를 읽으십시오 !).하지만 노력할 가치가 없을 수도 있습니다. 모든 것을 백업 한 다음 RAID 장치의 내용의 크기를 조정 한 다음 장치 자체의 크기를 조정해야합니다.이 모든 것은 오류, 계산 오류 및 기타 데이터 비용이 많이 발생합니다 (통화 경험이 많음) .
위험과 노력의 가치가 없습니다. 비어있는 새 디스크가있는 경우 디스크 크기를 조정하고 모든 데이터의 1-2 개 사본을 항상 그대로 유지하는 방법은 다음과 같습니다 (2 디스크 RAID1이 있다고 가정).
md(4)
하나의 디스크가없는 새 어레이를 만듭니다 .
- 배열 내용의 구조를 다시 만듭니다 (Crypto, LVM, 파티션 테이블, 그 조합, 보트를 떠 다니는 모든 것).
- 기존 디스크에서 새 디스크로 데이터를 복사하십시오.
- 새 디스크를 사용하여 재부팅하십시오.
- 이전 디스크의 파티션 테이블을 닦아냅니다 (또는
md(4)
수퍼 블록을 0으로 만듭니다). 필요한 경우 새 디스크의 구성표와 일치하도록 필요한 파티션을 만듭니다.
- 기존 디스크를 새 어레이에 추가하십시오.
- 배열 구성원이 동기화 될 때까지 기다립니다. 커피 마셔 라틴 아메리카로 날아가서 자신의 커피 원두를 선택하십시오. :) ( 중남미에 거주 하는 경우 아프리카로 대신 비행하십시오).
참고 : 예, 이것은 그의 답변에 설명 된 것과 동일한 기술 0xC0000022L입니다.
질문 3. 드라이브가 1G 짧으면 어떻게됩니까? :) 걱정하지 마십시오. 교체 드라이브가 더 클 수 있습니다. 실제로, 위와 같은 전략을 사용 하면 고장이 날 때마다 (또는 더 저렴한 업그레이드를 위해) 더 큰 대형 드라이브를 구입 해야 합니다 . 점진적으로 업그레이드 할 수 있습니다.
실험적 증거
실험 설정
먼저, 일부 블록 장치를 위조하자. 우리는 사용합니다 /tmp/sdx
과 /tmp/sdy
(각 100M) 및 /tmp/sdz
(테크네튬).
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
세 루프백 블록 장치와 같은 세 개의 파일을 백업이 세트 /dev/loop0
, /dev/loop1
및 /dev/loop2
, 매핑 sdx
, sdy
그리고 sdz
각각. 크기를 확인합시다 :
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
예상대로 정확히 100M (102400 KiB = 100 MiB)의 루프 장치 2 개와 99M (정확히 99x1024 1K 블록) 중 하나가 있습니다.
동일한 크기의 장치에서 RAID 어레이 만들기
간다 :
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
크기를 확인하십시오 :
sudo grep md100 /proc/partitions
9 100 102272 md100
이다 precicely mdadm를 설명서에 하나의 모습 128K를 차지 메타 데이터를 우리에게 해당 버전 1.2을 생각 나게 : 128 + 102,272 = 102400. 이제 두 번째 실험 준비를 파괴하자 우리가 기대하는 것.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
크기가 다른 장치에서 RAID 배열 만들기
이번에는 소형 블록 장치를 사용하겠습니다.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
글쎄, 우리는 경고를 받았지만 배열이 만들어졌습니다. 크기를 확인하자 :
sudo grep md100 /proc/partitions
9 100 101248 md100
우리가 얻는 것은 101,248 블록입니다. 101248 + 128 = 101376 = 99 × 1024. 사용 가능한 공간은 가장 작은 장치의 공간 (128K RAID 메타 데이터)입니다. 마지막 실험을 위해 다시 한 번 정리하겠습니다.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
마지막으로 실행중인 어레이에 더 작은 장치 추가
먼저 100M 디스크 중 하나만으로 RAID1 어레이를 만들어 봅시다. 배열은 저하되지만 실제로는 신경 쓰지 않습니다. 우리는 단지 시작된 배열을 원합니다 . missing
키워드는 '나는 아직 당신을위한 장치가 이제 그는 배열을 시작하고 나중에 하나를 추가 할 것입니다하지 않습니다'라고 그 자리 표시 자입니다.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
다시 한 번 크기를 확인하십시오.
sudo grep md100 /proc/partitions
9 100 102272 md100
충분히, 그것은 102400 블록의 128K 짧은입니다. 더 작은 디스크 추가하기 :
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
팔! 그것은 우리를 못하게 할 것이며, 오류는 매우 분명합니다.