성능이 저하된 상태의 RAID 1 어레이가 있고 여기에 다른 드라이브를 추가하고 싶습니다.
# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Fri Mar 21 17:23:00 2014
Raid Level : raid1
Array Size : 488254464 (465.64 GiB 499.97 GB)
Used Dev Size : 488254464 (465.64 GiB 499.97 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Jun 9 00:10:04 2015
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : mars:1 (local to host mars)
UUID : 3458a3fd:a510d0a7:605d8cd5:9880c31e
Events : 25816
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
2 0 0 2 removed
전체 크기에 맞게 동일하게 포맷된 첫 번째 드라이브와 동일한 드라이브를 사용하려고 합니다. 그러나 mdadm은 추가를 거부합니다.
# mdadm /dev/md1 --add /dev/sdc1
mdadm: /dev/sdc1 not large enough to join array
분할 출력은 두 드라이브의 섹터 크기가 서로 다르다는 것을 나타내지만 그것이 무엇인지, 수정할 수 있는지 확실하지 않습니다. 그렇지 않다면 내 선택은 무엇입니까?
# parted /dev/sdb unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdb: 976773168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 976773119s 976771072s primary ext4 raid, type=fd
# parted /dev/sdc unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdc: 976771055s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 976769023s 976766976s primary raid, type=fd
답변1
976766976은 /dev/sdb
9767보다 작습니다.7/dev/sdc
1072화
이것은 동일한 드라이브가 아닙니다.
답변2
새 디스크는 기존 디스크보다 1MB 조금 더 작습니다. 이는 모델이 다를 수도 있고(명칭이 동일하더라도 다른 공장에서 약간 다른 사양으로 제조될 수 있음), 공장 테스트 중에 결함이 있는 부분이 더 많이 발견되었을 수도 있습니다.
에는 전체 디스크에서 MBR의 1 섹터를 뺀 파티션과 사용되지 않은 섹터를 추가하여 파티션을 1MB(성능을 위해 권장됨)로 정렬하는 파티션이 sdb
있습니다 . sdb1
배열은 전체 파티션에 걸쳐 있으며 크기는 파티션에서 128MB를 뺀 크기입니다.영역 모양 변경.
976771055 섹터의 크기는 sdc
배열 976771072 섹터의 크기보다 17 섹터 작습니다. 따라서 새 디스크에 어레이를 설치할 수 없습니다.
동일한 데이터와 더 작은 모양 변경 영역으로 배열을 생성할 수 있습니다. 거의 맞기 때문에 128MB에서 2MB만 빼면 충분합니다. 기존 배열에서는 모양 변경 영역의 크기를 조정할 수 없다고 생각하므로 이를 백업하고 새 배열을 만든 다음 데이터를 복원해야 합니다.
내가 원하는 것은 어레이의 파티션을 2MB만큼 줄이는 것입니다.
sdc1
어쨌든 제 생각에는 가장 간단한 해결책은 새로운 RAID-1 어레이를 유일한 활성 볼륨 으로 만드는 것입니다 . 배열의 파티션 크기를 유지하려면 --data-offset=126M
모두 맞도록 모양 변경 영역을 생성하세요. 더 나은 방법은 이 문제가 다시 발생할 경우를 대비해 안전 여유로 몇 MB를 빼고 전체 파티션에 걸쳐 있는 배열을 만드는 것입니다. 그런 다음 이전 어레이의 모든 데이터를 새 어레이에 복사합니다. 더 작은 영역을 생성하는 경우 축소하려는 파티션의 파티션 복사본이 아닌 파일 복사를 수행하거나 (파티션이 여러 개인 경우) 해당 파티션을 먼저 수행한 다음 축소하십시오. 마지막으로 배열의 내용을 지우고 새 배열에 sdb1
추가합니다 .sdb1
또는 마지막 2MB(최소)가 어떤 파티션에도 할당되지 않도록 기존 배열의 내용을 축소한 다음 mdadm /dev/md1 --grow --size=…
기존 배열을 축소하는 데 사용합니다.
답변3
이 디스크에는 HPA가 있습니다. 동일한 디스크가 있고 HPA를 제거하여 누락된 섹터를 성공적으로 회수하고 두 드라이브를 모두 동일하게 만들었습니다. 바라보다https://superuser.com/a/642765
# hdparm -N /dev/sdx
# hdparm -N p976773168 /dev/sdx
답변4
내가 이 트릭을 알고 있는 sdb와 동일한 파티션을 sdc에 생성하기만 하면 됩니다(먼저 백업을 만들고 디스크를 넘어서는 파티션을 피하십시오(예: 2개의 디스크 220G sdb 210G sdc). 210G 아래에 2개의 파티션을 생성하거나 199G와 동일한 2개의 파티션을 생성할 수도 있습니다. 파티션 케이스)
sfdisk -d /dev/sdb > part_table
sfdisk /dev/sdc < part_table
그런 다음 sdc1을 다시 추가해 보세요.