LAN을 통해 원시 디스크 이미지 마이그레이션


8

내 상황은 다음과 같습니다.

  • 기가비트 이더넷을 사용하는 동일한 데이터 센터에있는 2 개의 전용 서버
  • 두 전용 서버 모두 추가 도구와 유틸리티가 추가 된 Debian Squeeze 기반의 복구 환경으로 부팅되었습니다. 또한 소프트웨어 다운로드, 패키지 설치 및 / 또는 필요에 따라 컴파일 할 수있는 충분한 tmp 공간 (두 상자에 32GB RAM)이 있습니다.
  • 두 전용 서버 모두 3TB의 사용 가능한 공간이 있습니다.
  • "소스"서버에는 Adaptec 4 포트 컨트롤러가있는 하드웨어 RAID-10에 4 개의 1.5TB 디스크가 있습니다.
  • "대상"서버에는 Adaptec 2 포트 컨트롤러가있는 하드웨어 RAID-1에 2 x 3TB 디스크가 있습니다 (다른 포트와 동일하지만 포트 수는 다릅니다).
  • 사용 가능한 블록의 수는 /dev/sda10MB 미만이지만 대상 서버의 배열은 몇 메가 더 작습니다.
  • 두 RAID 어레이는 모든 구성 디스크의 전체 디스크 표면을 사용하여 하나의 단일 RAID 볼륨을 생성하도록 구성되어 있습니다.
  • 운영 체제는 MBR 모드로 부팅됩니다. UEFI 부팅이 사용되지 않습니다.

내가하고 싶은 것 :

  • "소스"서버에서 "대상"서버로 전체 OS 이미지 (GPT 파티션 테이블의 GRUB2 부트 로더, / boot 파티션 및 / 파티션으로 만 구성됨)를 블록 계층에서 복사하십시오.
  • 가능한 경우 복사는 "실시간"으로 이루어져야합니다. 즉, 디스크 이미지를 복사본으로 하드 디스크에 압축을 풀지 않는 한 대상쪽에 적절한 디스크 이미지 파일을 저장할 공간이 충분하지 않습니다. 일어나고 있습니다. 서버 간의 기가비트 이더넷 연결은 이것에 익숙 할만큼 충분히 안정적 fsck이며, 전송 전후에 파일 시스템이 정상인지 확인하기 위해 양쪽 끝 (소스 및 대상)에서 실행됩니다.
  • 가능하면 각 파티션의 구성 파일 시스템에서 사용하지 않는 네트워크를 통해 블록을 전송하지 마십시오 (모든 파티션은 ext4로 포맷 됨). "소스"디스크의 50 % 이상이 /파티션 에서 사용 가능한 공간이기 때문 입니다.
  • /복사 할 때 대상 디스크의 크기보다 작은 크기로 맞도록 파티션 크기를 조정하십시오 .
  • 복사가 성공하면 각 볼륨을 마운트하고 고정 IP에 대한 참조를 수정하여 새 서버의 IP를 반영하십시오. (추가 도움 없이이 작업을 올바르게 수행 할 수 있습니다)

내 질문 :

  • 내가해야 첫 번째 의 크기 사이 (바이트)의 차이를 계산 /dev/sda각 서버를 한 다음 사용 e2resize비파괴로의 크기를 줄일 /파티션을 소스 측에 이 대상 측의 공간에 맞도록?
  • 나는 실행해야 dd원시 블록 장치에 /dev/sda대상 (이상으로 소스에서 ssh), 또는 I 대상에 해당 파티션 레이아웃을 생성해야하고 실행 dd파티션 ? 한 번에 파티션을 처리하면 부트 로더의 문제가 발생하지만 한 번에 파티션을하지 않으면 dd대상이 보유 할 수있는만큼 많은 바이트를 쓴 후에 데이터 전송을 중지해야합니다. ( /마지막으로 블록 의 파티션 끝을 "닫습니다" . 이는 소스의 파티션 레이아웃에서 다른 모든 파티션의 논리적으로 "오른쪽에 있습니다".

몇 가지 기타. 사양 :

  • 소스 상자의 호스트 OS는 여러 OpenVZ 게스트를 실행하는 Ubuntu Server 12.04입니다.
  • 두 상자가 모두 구조로 부팅되므로 실행중인 운영 체제에서 기본 데이터를 변경하지 않고도 디스크에 직접 액세스 할 수 있습니다.

장치 또는 OS 파일 시스템에서 사용 된 블록을 정확히 복사해야합니까?
앤드류

답변:


6

이것은 지저분하지만 가능합니다.

나는 여기에 가정 //dev/sda3그것은 /boot에 있습니다 /dev/sda1.

  1. 기존 서버의 파일 시스템을 가능한 최소 크기로 줄입니다.

    oldserver # resize2fs -M /dev/sda3
    
  2. 새 서버의 디스크를 동일한 크기의 스왑 공간 /boot및 새 /파티션 (및 필요한 다른 것)으로 파티션하십시오.

    newserver # parted /dev/sda
    
  3. //boot파일 시스템을 복사하십시오 .

    oldserver # dd if=/dev/sda1 | ssh root@newserver "dd of=/dev/sda1"
    oldserver # dd if=/dev/sda3 | ssh root@newserver "dd of=/dev/sda3"
    

    새 서버의 파티션은 기존 서버의 파티션보다 약간 작기 No space left on device때문에이 말미에 가짜 메시지가 표시됩니다. 그러나 1 단계에서 파일 시스템을 축소 했으므로 이는 중요하지 않습니다.

  4. 새 서버의 파일 시스템 크기를 파티션 크기로 조정하십시오.

    newserver # resize2fs /dev/sda3
    
  5. 새 디스크에 GRUB을 설치하십시오.

    newserver # mount /dev/sda3 /mnt
    newserver # mount /dev/sda1 /mnt/boot
    newserver # mount -o bind /dev /mnt/dev
    newserver # mount -o proc proc /mnt/proc
    newserver # chroot /mnt /bin/bash
    
    newserver(chroot) # grub-install /dev/sda
    newserver(chroot) # exit
    
  6. 나머지 픽스 업 (IP 주소 등)을 완료하십시오.

파티션의 여유 공간을 복사하지 않는 방법을 찾을 수는 있지만 모든 것을 복사하는 것보다 연구하는 데 시간이 더 걸릴 것입니다 ...


대박! 이 지침은 다른 모든 기준을 충족하므로 파티션의 여유 공간을 복사해도 괜찮습니다 . 하지만, 바로 파일 시스템 크기를 조정하지 않을 및 파티션 자체oldserver모든 여유 공간을 복사 할 필요가 없습니다를? /boot너무 작아서 신경 쓰지 않아도 되지만 /최소한 그렇게 할 수 있습니다. 파티션의 끝 섹터를 resize2fsFS 섹터의 끝을 설정하는 섹터와 동일하게 설정하십시오. 음, 섹터, 블록 ... 아마도 블록 . 그러나 이것에 감사드립니다! 대단해!
allquixotic 2019

예, 파티션 크기도 줄이면 많은 복사를 피할 수 있습니다. 시간을 절약 할 수 있습니다. 수학이 약간 벗어난 경우를 대비하여 여유를 두었습니다.
마이클 햄프 턴

또한 스퓨리어스 / 무서운 "장치에 남은 공간 없음"이 제거 /dev/sda3됩니다. 약 1.3TB 로 크기가 조정 되어 약 2.9TB를 유지할 것으로 예상되는 파티션에 복사됩니다.
allquixotic 2019

시간이 좀 걸립니다 . 100 Mbit / s 할당 의 기가비트 포트 가 있습니다. 쓰레기.
allquixotic

5

나는 거라고 mkfs다음, 새 서버에 새로운 파일 시스템을rsync 기존 서버에서 그들을. 다시 시작 가능하고 일관되며 각 파일을 쉽게 개별적으로 확인할 수 있습니다. 법의 사본이 아닌 파일 시스템의 사용하지 않는 섹션을 버리는 경우이 방법을 사용하지 않을 이유가 없습니다. GRUB을 다시 실행해야하는데, 도전이되어서는 안됩니다.

파일 시스템을 인식하는 원시 사본을 설명하는 데 시간이 오래 걸리므로 rsync 솔루션이 작동하지 않는 이유에 대해 언급하지 않으면 입력을 아끼지 않을 것입니다.


내가 생각하는 partimage파일 시스템 인식 원시 사본을 할 수 있지만 지원하지 않습니다 ext4. 따라서 rsync모든 재량 적 액세스 제어 (a la chmod)를 보존 하고 심볼릭 링크 및 장치 파일을 깨끗하게 복사 할 수 있는 한 옵션으로 더
좋아 보입니다

나는 Jeff의 대답에 이어 두 번째입니다. sfdisk -d / dev / sda |를 사용하여 파티션 레이아웃을 전송할 수 있습니다. ssh 대상 "sfdisk / dev / sdb". 파일 시스템을 만들고 'rsync -a -e "ssh -c arcfour"/ mnt / root @ destination : / mnt /'로 전송하십시오. Michael Hampton의 답변 5 단계에 따라 대상을 부팅 가능하게 만드십시오.
Tim Haegele 2013

1

정말 블록 장치 수준에서 데이터를 전송하려는 경우 최소 가동 중지 시간이 포함 된 서버를 마이그레이션하는 데 사용했던 매우 유용한 트릭을 생각할 수 있습니다.

문제는 데이터 파티션이 미러의 유일한 활성 절반 인 소스 서버에서 성능이 저하 된 미러를 만든 다음 AOE 를 통해 두 번째 서버에서 대상 파티션을 내보낼 수 있습니다 (두 서버가 동일한 브로드 캐스트 도메인에 있다고 가정). 그런 다음 소스 서버에서 네트워크 블록 장치를 성능 저하 된 미러에 연결하여 재 구축을 시작합니다. 재 구축이 완료 될 때까지 기다렸다가 미러를 중지하고 AOE에서 내 보낸 장치를 제거하면 정상입니다.

조금 더 자세한 내용은 다음과 같습니다 (간단히 설명하겠습니다).

구성 요소 :

  • mdadm그와 빌드 모드 (메타 데이터없이 임시 거울);
  • vblade 블록 장치를 AOE 네트워크 장치로 내보내기위한 것;
  • aoe-tools AOE 네트워크 블록 장치를 가져옵니다.

대상 서버에서 파티션 테이블을 만든 다음 대상에 맞도록 소스 파티션을 축소해야합니다. GRUB을 새로운 MBR에 쉽게 설치할 수 있습니다. 새로 작성된 파티션 테이블에서 파티션 만 동기화하면 오류가 덜 발생합니다.

수신 측에서는 vblade도구 를 사용하여 파티션을 내 보내야하며 소스 서버에서 설치 후 내 보낸 장치를 볼 수 있습니다 aoe-tools(실행 aoe-discover한 다음 /dev/ether/장치 를 찾으십시오 ).

그런 다음 소스 드라이브를 사용하여 소스 서버에 raid1 장치를 빌드해야합니다 .

mdadm --build /dev/md0 -n2 -l1 --force /dev/sda

이 후에 새로 빌드 된 미러를 검사 할 수 있습니다.

mdadm --detail /dev/md0
cat /proc/mdstat

이제 내 보낸 대상 파티션을이 미러에 안전하게 연결할 수 있습니다.

mdadm /dev/md0 --add /dev/ether/eX.Y

그런 다음 동기화 진행 상황을 지켜보십시오.

watch -n5 cat /proc/mdstat

동기화가 완료되면 mdadm --stop /dev/md0소스 서버 vblade에서 대상 서버에서 프로세스를 종료 하고 두 번째 서버에서 GRUB을 설치하고 IP 주소를 변경하는 등 미러를 중지하십시오 .

실제로이 트릭을 사용하면 동기화 된 상자를 재부팅하기 만하면 가동 중지 시간이 발생하면서 거의 실시간으로 상자간에 서버를 이동할 수 있습니다.


성능상의 이유로 링크의 MTU를 늘리거나 가능한 경우 점보 프레임이 활성화 된 별도의 VLAN을 설정하는 것이 좋습니다.

또한 AOE의 대안으로 nbd-server/ 와 같은 것을 사용 nbd-client하거나 iSCSI를 원할 경우 iSCSI를 사용할 수도 있지만 AOE ( vblade+ aoe-tools)는 매우 간단한 인터페이스와 뛰어난 성능 (TCP / IP 오버 헤드 없음)이 있습니다.


또한 블록 장치 수준에서의 동기화가 rsync를 사용하여 파일로 파일을 가져가는 것보다, 특히 파일 시스템에 수백만 개의 (작은) 상대적으로 작은 파일이있는 경우보다 훨씬 빠를 수 있다고 덧붙였습니다.
artyom 2013

mdadm? 하드웨어 RAID를 사용하고 있습니다. 그리고 AOE가 무엇인지 전혀 모르고 iSCSI를 사용한 적이 없습니다. 내 서버가 동일한 브로드 캐스트 도메인에 있고 동일한 데이터 센터에 있다고 생각하지 않습니다. 서버 사이에는 하나 이상의 스위치가 있습니다.
allquixotic 2019

나는 이것이 훌륭한 아이디어라고 생각합니다! 그러나 다른 크기의 디스크를 어떻게 처리합니까?
Tim Haegele 2013

그럼에도 불구하고 @allquixotic, AOE를 nbd (네트워크 블록 장치, 제공 nbd-servernbd-client패키지)로 바꾸는 다음 구성표를 시도해 볼 수 있습니다 . mdadm는 두 블록 장치를 동기화하는 데만 사용되며 build모드 에서 메타 데이터가 작성되지 않으므로 모든 블록 장치 위에 사용할 수 있습니다 (먼저 마운트 해제해야 함). 문제는 기본적으로 하드웨어 RAID가있는 경우에도 성능이 저하 된 mdadm raid1에 새로운 시스템을 설정하는 것입니다. 이렇게하면 파티션을 마운트 해제하지 않고도 설명 된 기술을 적용하여 마이그레이션 중단 시간을 단일 재부팅 시간으로 줄일 수 있습니다.
artyom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.