기존 루트 파티션을 미러링하는 방법은 무엇입니까?

기존 루트 파티션을 미러링하는 방법은 무엇입니까?

SSD의 기존 루트(유일한) 파티션을 다른 디스크에 미러링하고 싶습니다. 일종의 RAID-1이어야 하며 비대칭 * 입니다 . 이 작업을 수행해야 하는 옵션이 있다는 것을 알고 있습니다 mdadm --write-behind.

하지만 기존 파티션의 컨텍스트를 보존하는 것이 가능한지는 모르겠습니다. 나는 그것이 같다고 상상한다.

  • "슬레이브" 파티션 생성
  • 슬레이브 파티션이 초기화되지 않았음을 알리도록 RAID를 설정하십시오.
  • 기본 파티션을 복제하여 초기화하도록 하세요.

하지만 제가 너무 낙관적인 것일 수도 있죠, 그렇죠?


* 모든 읽기 작업은 첫 번째 디스크에 액세스해야 하며, 쓰기 작업은 첫 번째 디스크가 기록될 때 완료된 것으로 간주되어야 합니다.

답변1

기존 파티션에서 시작하여 mdraid RAID-1 어레이를 생성할 수 있습니다. 먼저 mdadm 수퍼블록을 위한 공간을 확보해야 합니다. 즉, 파일 시스템을 약간 줄여야 합니다.

현재 일반적인 슈퍼블록 형식은 다음과 같습니다.0.9. 위치는 파티션 끝에서 128kB에서 60kB 사이이고 길이는 4kB이며 시작 주소는 64kB의 배수입니다. 따라서 파일 시스템을 128kB, 더 정확하게는 ((device_size mod 64kB) - 1) * 64kB로 축소하세요.

스트라이프당 2TB 이상을 원할 경우 다음이 필요합니다.1.0 슈퍼 블록 형식, 아직 모든 배포판에서 기본적으로 지원되지는 않습니다. 1.0 슈퍼블록은 장치 끝에 있습니다. 이는 파일 시스템을 8kB만 축소하면 된다는 것을 의미합니다.

이제 파일 시스템을 축소했으므로 어레이를 생성할 수 있습니다. 기존 데이터만 사용하여 성능이 저하된 어레이를 생성하는 것부터 시작하세요. 파일 시스템이 아직 마운트되지 않았는지 확인하십시오. 사용 사례의 경우 쓰기 의도 비트맵은 별도의 파티션에 있어야 합니다. -e 1.0최신 버전 1 슈퍼블록 형식과 함께 사용됩니다 .

mdadm --create /dev/md0 -e 0.9 -l 1 -n 2 \
      --write-behind=256 --bitmap=/path/to/bitmap /dev/sda1 missing

/dev/md0이제 원하는 경우 두 번째 디스크를 추가하여 파일 시스템을 마운트할 수 있습니다 . 데이터는 백그라운드에서 새 드라이브에 복사됩니다.

mdadm --add /dev/md0 --write-mostly /dev/sdb1

이와 같이 미러링된 배열을 만들었지만 write-behind 모드는 사용하지 않았습니다. write-behind 모드가 프로세스를 무효화한다고 생각하지 않습니다.

답변2

나는 아이디어가. 나는 이것을 루프 장치의 작은 파일 시스템으로 테스트했으며 직접 시도하기 전에 동일한 작업을 수행하는 것이 좋습니다. 이 답변에서 /dev/sda는 중요한 데이터가 포함된 디스크이고 /dev/sdb는 새로운 빈 디스크입니다.

export DATA_DISK='/dev/sda'
export EMPTY_DISK='/dev/sdb'
  1. 다음에서 성능이 저하된 RAID1 어레이를 생성합니다.빈 시장. 이건 매우 중요합니다!

    mdadm --create /dev/md0 --level=1 --raid-devices=2 "${EMPTY_DISK}" missing
    
  2. 그런 다음 미러링할 디스크의 파일 시스템을 축소합니다. (지원되기를 바랍니다.) 이는 RAID 어레이에 헤더가 있고 전체 파일 시스템이 어레이에 맞지 않기 때문에 필요합니다.

  3. 데이터 복사성능이 저하된 새로운 어레이로.

    dd if="${DATA_DISK}" of=/dev/md0 bs=4k
    
  4. 원본 디스크를 어레이에 추가합니다.

    mdadm --manage /dev/md0 --add "${DATA_DISK}"
    
  5. 동기화 진행 상황을 볼 수 있습니다.

    watch 'cat /proc/mdstat'
    

관련 정보