카테고리 보관물: Server

Server

LAN을 통해 원시 디스크 이미지 마이그레이션 않습니다. 일어나고 있습니다. 서버 간의 기가비트

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

  • 기가비트 이더넷을 사용하는 동일한 데이터 센터에있는 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입니다.
  • 두 상자가 모두 구조로 부팅되므로 실행중인 운영 체제에서 기본 데이터를 변경하지 않고도 디스크에 직접 액세스 할 수 있습니다.


답변

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

나는 여기에 가정 //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 주소 등)을 완료하십시오.

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


답변

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

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


답변

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

문제는 데이터 파티션이 미러의 유일한 활성 절반 인 소스 서버에서 성능이 저하 된 미러를 만든 다음 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 오버 헤드 없음)이 있습니다.


답변