1TB의 데이터를 유지하면서 2TB 디스크 1개와 1TB 디스크 2개로 2TB RAID-1 어레이를 생성할 수 있습니까?

1TB의 데이터를 유지하면서 2TB 디스크 1개와 1TB 디스크 2개로 2TB RAID-1 어레이를 생성할 수 있습니까?

현재 RAID-1 mdadm 어레이에 1TB의 데이터가 있습니다. 어레이는 1TB 디스크와 2TB 디스크의 1TB 파티션으로 구성됩니다. 이제 2TB RAID-1 어레이를 생성하는 데 사용하려는 두 번째 1TB 디스크를 구입했습니다.

/dev/urandom이 배열의 데이터는 dm-crypt를 사용하여 암호화되므로 데이터를 넣기 전에 각 디스크를 데이터로 덮어쓰고 싶습니다 .

문제는 이 2TB RAID-1 어레이를 생성하고 현재 1TB RAID-1 어레이에 1TB의 데이터를 유지하면서 각 디스크를 임의의 데이터로 안전하게 덮어쓸 수 있는지 여부입니다.

요약하자면 1TB 디스크 2개와 2TB 디스크 1개가 있습니다. 미러의 한 쪽은 2개의 1TB 디스크로 구성되고 미러의 다른 쪽은 전체 2TB 디스크로 구성되는 2TB RAID-1 어레이를 만들고 싶습니다. 또한 이러한 디스크만 사용하여 1TB의 데이터를 유지하면서 각 디스크를 임의의 데이터로 덮어쓸 수 있기를 원합니다.

답변1

적용 범위에 관해서는임의의 데이터가 포함된 디스크는 중복됩니다. 새로운 암호화된 RAID를 구축하고 있으므로 재동기화는 어쨌든 모든 것을 덮어쓰게 됩니다.

덮어쓰기 방법은 /dev/urandom속도가 매우 느리고 테라바이트를 지우려고 사용하는 사람들은 시간이 너무 오래 걸려서 중간에 취소하는 경우가 많습니다. 임의의 키로 기기를 암호화한 다음 삭제하는 /dev/zero것이 shred -n 1훨씬 더 빠릅니다. 따라서 디스크에 임의의 데이터가 있어야 한다면 대신 이 방법을 사용하는 것이 좋습니다.

이제 RAID에 대해 다음을 수행합니다. ( loop2이 예에서는 2TB 디스크)

  • 새로운 1TB 디스크 파티션을 RAID-1에 추가합니다.동기화가 완료될 때까지 기다리세요. 이렇게 하면 1TB의 데이터가 3개의 디스크에 걸쳐 있을 수 있습니다.

    $ mdadm /dev/md99 --grow --raid-devices=3 --add /dev/loop1p1
    mdadm: added /dev/loop1p1
    raid_disks for /dev/md99 set to 3
    $ cat /proc/mdstat
    md99 : active raid1 loop1p1[2] loop2p1[1] loop0p1[0]
          100224 blocks super 1.2 [3/3] [UUU]
    
  • RAID-1 어레이에서 2TB 디스크를 제거합니다. 1TB는 아직 예약되어 있습니다.중복적으로2개의 1TB 디스크에 위치합니다.

    $ mdadm /dev/md99 --fail /dev/loop2p1
    mdadm: set /dev/loop2p1 faulty in /dev/md99
    $ mdadm /dev/md99 --remove /dev/loop2p1
    mdadm: hot removed /dev/loop2p1 from /dev/md99
    $ mdadm /dev/md99 --grow --raid-devices=2
    raid_disks for /dev/md99 set to 2
    $ cat /proc/mdstat
    md99 : active raid1 loop1p1[2] loop0p1[0]
          100224 blocks super 1.2 [2/2] [UU]
    
  • 2TB 디스크 지우기

    $ shred -n 1 /dev/loop2
    
  • 디스크를 2TB로 다시 파티션합니다. 다른 부팅 장치가 없으면 암호화된 장치에서 부팅할 수 없으므로 부팅 파티션이 필요합니다.

    $ parted /dev/loop2
    
  • 이 파티션을 사용하여 missing두 번째 장치에 대한 새 RAID-1 배열을 만듭니다. 두 번째 장치는 나중에 추가될 예정입니다. 또한 현재 크기는 제한되어 있으며 현재 2x1TB 디스크 크기가 확실하지 않기 때문에 나중에 늘릴 예정입니다. (확실하다면 여기에서 다른 크기를 자유롭게 사용해도 되지만, 너무 크게 만들면 나중에 2x1TB를 추가할 수 없습니다.)

    $ mdadm /dev/md42 --create --level=1 --raid-devices=2 --size=1000G /dev/loop2p1 missing
    mdadm: largest drive (/dev/loop2p1) exceeds size (102400K) by more than 1%
    Continue creating array? yes
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md42 started.
    $ cat /proc/mdstat
    md42 : active raid1 loop2p1[0]
          102400 blocks super 1.2 [2/1] [U_]
    
    md99 : active raid1 loop1p1[2] loop0p1[0]
          100224 blocks super 1.2 [2/2] [UU]
    
  • 암호화, mkfs, 데이터 복사(원하는 비밀번호 및 설정, LVM, 파일 시스템, 복사 방법 사용...)

    $ cryptsetup luksFormat /dev/md42
    $ cryptsetup luksOpen /dev/md42 luksmd42
    $ mkfs.ext4 /dev/mapper/luksmd42
    $ mount /dev/md99 /mnt/old
    $ mount /dev/md42 /mnt/new
    $ rsync -aAHSX /mnt/old/. /mnt/neW/.
    $ umount /mnt/old /mnt/new
    
  • 이제 데이터는 이전 RAID 1(암호화되지 않음)과 새로운 비중복 RAID 1(암호화됨)에서 중복됩니다. 하지만 이 시점에서 새 RAID 1에 2x1TB 디스크를 추가하려면 중복성을 깨야 합니다.

    $ mdadm --stop /dev/md99
    mdadm: stopped /dev/md99
    
  • 시간을 낭비하고 싶다면 이 시점에서 2x1TB 디스크를 지울 수도 있습니다. RAID-1은 2TB 디스크의 임의 데이터를 1TB 디스크로 동기화하므로 이는 필요하지 않습니다.

    $ shred -n 1 /dev/loop0 &
    $ shred -n 1 /dev/loop1 &
    $ wait # for shred
    $ parted /dev/loop0
    $ parted /dev/loop1
    
  • linear0원하는 대로 mdadm을 사용하거나 2x1TB를 결합하세요 .

    $ mdadm /dev/md43 --create --level=0 --raid-devices=2 /dev/loop0p1 /dev/loop1p1
    $ cat /proc/mdstat
    md43 : active raid0 loop1p1[1] loop0p1[0]
          199680 blocks super 1.2 512k chunks
    
    md42 : active raid1 loop2p1[0]
          102400 blocks super 1.2 [2/1] [U_]
    
  • RAID 1에 추가하고 동시에 RAID 1을 확장합니다.

     $ mdadm /dev/md42 --add /dev/md43
     mdadm: added /dev/md43
     $ mdadm /dev/md42 --grow --size=max
     mdadm: component size of /dev/md42 has been set to 199616K
     $ cat /proc/mdstat
     md43 : active raid0 loop1p1[1] loop0p1[0]
           199680 blocks super 1.2 512k chunks
    
     md42 : active raid1 md43[2] loop2p1[0]
           199616 blocks super 1.2 [2/2] [UU]
    
  • 또한 cryptsetup 및 파일 시스템을 확장합니다.

     $ cryptsetup resize luksmd42
     $ resize2fs /dev/mapper/luksmd42
     resize2fs 1.42.7 (21-Jan-2013)
     Resizing the filesystem on /dev/mapper/luksmd42 to 197568 (1k) blocks.
     The filesystem on /dev/mapper/luksmd42 is now 197568 blocks long.
    

아, 끝났습니다.

편집하다:

/etc/mdadm.conf다음은 이 설정을 사용하는 예입니다( mdadm --detail --scan시작점을 얻기 위해).

ARRAY /dev/md43 metadata=1.2 UUID=b9f590d7:9984dad4:cb75131b:63bca165
ARRAY /dev/md42 metadata=1.2 UUID=3a70188d:9ecacda7:ac715e16:9402fc55

특히:

  • 선 없음 DEVICE(꼭 선이 있어야 한다면 장치가 md*포함되어 있는지 확인하세요)
  • 줄의 순서가 ARRAY중요합니다. RAID0 어레이를 먼저 빌드해야 하며 파일에서 첫 번째로 나열되는 경우 발생합니다.

답변2

먼저 백업을 하세요.

내 대답은 sda가 2TB 디스크이고 sdb와 sdc가 1TB 디스크라는 것이라고 가정합니다. sdc는 새로운 빈 1TB 디스크입니다. 현재 sda1 및 sdb1의 이미지가 있습니다. sda2는 사용되지 않습니다. (필요에 따라 번호를 변경하십시오).

다음과 같은 방법으로 원하는 곳으로 갈 수 있다고 생각합니다.

  1. echo repair > /sys/block/md0/md/sync_action(또는 미러가 있는 모든 MD 장치를 통해) 전체 어레이 일관성 검사/복구를 수행하십시오. 보기 cat /proc/mdstat; 완료될 때까지 잠시(몇 시간) 기다리십시오. 이는 불량 블록 등을 숨기지 않도록 하기 위한 것입니다.
  2. 새로운 빈 디스크를 닦아냅니다(어레이 검사와 동시에 실행되도록 함).
  3. 이미지에서 sda1을 제거합니다. 올바른 디스크를 떨어뜨렸는지 확인하세요. 이 글을 읽기 전에 꼭 백업해 두시기 바랍니다. 계속 닦아주세요 /dev/sda(무작위로 채우기). 다시 파티션을 나누면 /dev/sda파티션이 하나만 남게 됩니다( /boot한 개가 있는 경우에는 2개). 또한 다시 파티션할 때 약간의 여유 공간을 남겨두어야 할 수도 있습니다. 이 공간이 sdb 및 sdc의 경우 RAID10보다 크지 않은지 확인해야 합니다.
  4. sda1새 이미지를 사용 하고 만듭니다 missing. 나는 이것이 이라고 가정하고 있습니다 md1. 계속해서 그것에 LUKS(암호화)를 설정하고 md1_crypt.
  5. 이전 이미지의 파일을 새 이미지로 복사합니다.
  6. 이전 파일 시스템을 마운트 해제하고 md0(이전 어레이)을 중지합니다.
  7. /dev/sdb를 삭제합니다.
  8. /dev/sdc가 지워졌는지 확인하세요.
  9. /dev/sdb1 및 /dev/sdb2에 RAID0 어레이를 만듭니다. 나는 그것을 부를 것이다md2
  10. 이제 (새 미러) md2에 (RAID0)을 추가하십시오 .md1

기본 아이디어는 다음으로 전환하는 것입니다.

                     sda
sdb                   |
    \                \|/
     ---> RAID10 -> RAID1 ---> LUKS/dmcrypt ---> filesystem
    /
sdc

추가 어레이(3방향 미러)가 필요할 수 있습니다 /boot. dmcrypt와 파일 시스템 사이에 또는 자체 배열에 LVM을 배치하여 스왑 공간을 확보할 수 있습니다.

관련 정보