rsync를 사용하여 실행중인 시스템을 새 하드 디스크에 가장 잘 복제하는 방법은 무엇입니까?


22

하드 드라이브에 문제가있는 서버로 시스템을 실행하고 있습니다. 모든 중요한 데이터는 RAID에 있고 백업 및 모든 데이터가 있지만 시스템 자체의 이미지는 없습니다. 물론 설치할 수있는 특정 요구 사항은 없지만 복원 경로를 내리기 전에 먼저 핫 카피를 먼저 시도하고 싶습니다. 나는 이것이 프로세스로서 단점이 있다는 것을 알고 있지만, 첫 번째 수단으로 시도하는 데 많은 단점이 있다고 생각하지 않습니다.

  • 운영체제 : Ubuntu 12.04.4 LTS
  • 목이 없는
  • 디스크가 이미 실패했기 때문에 너무 많은 새 소프트웨어를 설치하고 싶지 않습니다. :)
  • 시스템이 실행 중입니다. 디스크가 멈추지 않을 가능성이 높아지는 것을 두려워합니다. dd가 나왔을까요?
  • 새 디스크는 dd 문제를 더 복잡하게 만드는 이전 디스크와 크기가 같지 않습니다 (두 배 더 큼).

내 생각은

  • 시스템의 새 드라이브를 핫 플러그
  • 파일 시스템을 만들다
  • / mnt / somedir에 마운트
  • 파일을 재 동기화
  • 일부 fstab 마술
  • 부팅 마법

내가 아직도 가지고있는 질문은 :

좋은 rsync 명령은 무엇입니까? 나는 계획하고 있었다 :

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(나는 더 많은 dir을 건너 뛰고 있습니다. 예를 들어 탑재 된 raid 등)

옵션은 다음과 같습니다.

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

특히 프로세스 속도를 높이기 위해 -H, -v 및 --progress를 건너 뜁니다.
우분투에서도 효과가 있습니까? 우분투가 하드 링크를 사용하는지 확실하지 않지만 옵션이 필요하다고 생각하지 않습니다.

이 실행 후 이전 디스크가 여전히 시작되면 재부팅 (라이브 USB 드라이브로)하고 rsync를 다시 실행할 수 있습니다. 시스템이 실행 중이기 때문에 읽을 수 없거나 변경된 파일을 수정합니다.


부팅을 수정하는 방법?
그런 다음 내 계획은 /내 fstab에서 UUID를 변경하고 (여전히 uuid를 찾는 방법을 Google에 저장해야 함) 시스템이 실제로 새 디스크에서 부팅되도록 마법을 수행합니다.

무언가를 잊었거나 특별히 어리석은 것을 계획 했습니까?

답변:


16

blkid명령을 사용하여 모든 블록 장치의 UUID를 가져올 수 있습니다 . (당신은 PARTUUID가 아니라 UUID라고 말하는 것을 원합니다)

내가 사용하는 rsync 옵션은 -avhPHAXx입니다.

매우 느린 콘솔 / tty에 있지 않으면 -v 또는 --progress가 속도를 높일 것이라고 생각하지 않습니다.

-x를 사용하면 모든 파일 시스템이 서로 다른 파일 시스템에 있다고 가정 할 때 모든 제외가 필요하지 않습니다 (내 시스템에서는 lost + found를 제외한 모든 제외).

내가 아는 유일한 프로그램은 하드 링크 (적어도 내 시스템에서는)를 사용 git하므로 -H 옵션을 추가하는 이유입니다. 내가 -H를 사용하지 않아도 될 것이라고 생각하는 유일한 문제는 약간 더 많은 공간을 차지한다는 것입니다.

부트 로더의 경우 GRUB2를 MBR과 함께 사용하는 경우 내가 사용하는 명령은 grub-install /dev/sdasda를 올바른 드라이브로 교체하는 것입니다. 새 드라이브를 부팅 가능하게 만들어야합니다. 다른 부트 로더 또는 UEFI를 사용하는 경우 새 드라이브를 올바르게 부팅하는 방법을 Google에서 확인합니다. 새 드라이브의 / boot는 현재와 동일한 파티션에 있어야한다는 점을 명심하십시오 (/ boot에 UUID를 사용하지 않는 경우) fstab을 적절히 수정해야합니다.


나는 내가 두려워하는 별도의 시스템에 그것들이 있다고 믿지 않으므로 제외는 신중한 것처럼 보입니다. 나는-v의 속도에 대해 혼합 된 내용을 읽고 있으므로 거기에서 무엇을 해야할지 모르겠습니다.). 힘내 좋은 지적이다, 나는 / home 그 중 일부를 가지고 확신합니다!
Nanne

1
글쎄, / proc, / sys 그리고 대부분의 / dev는 /와 완전히 다른 파일 시스템 / 마운트 포인트이므로, -x가있을 때 파일 시스템 / 마운트 포인트를 배제 할 이유가 전혀 없습니다. 루트 파일 시스템의 일부인지 확실하지 않은 경우 실행 mount하여 확인하십시오. 그 안에있는 것은 수동으로 제외 할 필요가 없습니다.
bparker

나는 왜 그리고 왜 확실하지 않지만 어쨌든 제외는 잘못되었습니다. 그들은 실제로 내가 한 드라 이런에 있었는데 왜 그런지 잘 모르겠습니다. (글쎄, 나는 반 무작위 장소에서 형식을 복사 했으므로 그 이유 일 수 있습니까?). 어쨌든, 당신의 조언에 따라 -x가 단단히 배치되어 너무 걱정하지 않았지만 추가로 중요한 것은 중요하지 않은 것들 (예를 들어 오래된 백업 백업)도 '저장'되었다는 것입니다.
Nanne

이것은 내 $ $를 저장했습니다. Linode에서 12GB + 시스템을 복제하여 새로운 노드로 만들었습니다. 5 년이 지난 후에도 여전히 작동합니다. 고마워요!
geeth

따라서 복제 된 파일 시스템을 복제 할 수 있도록 복제 된 파일 시스템을 분할 할 때 루트 분할 영역을 비동기 상태로 유지하면서 부트 분할 영역을 설정해야하거나 복제 된 드라이브를 프로덕션 환경에두기 직전에 설정해야합니다. 그렇지 않으면 복제 된 드라이브가 부팅 가능하다고 가정하고 실제로는 원하지 않습니다. 내 상황에서 내 클론 드라이브는 별도의 서버에있는 디스크입니다. 그리고 Rsync는 prod와 정렬을 유지하는 데 사용됩니다.
NZ Dev

10

방금이 작업을 성공적으로 수행했습니다 (커플 시도 후).

나는 사용했다

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

그런 다음 /mnt/etc/fstab부트 파티션 스왑 공간에 대한 파일을 재설정했습니다 .

그런 다음 GRUB을 재설정해야했습니다.

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub

이것은 MBR 포맷 디스크에만 해당됩니다.
Teque5

2

이 드라이브로 부팅을 수정하지 마십시오. 내 추천 :

  1. 고장난 시스템의 핫스왑 위험을 감수하지 않고 다른 시스템 의 드라이브 를 연결하십시오.
  2. rsync 비 시스템 파일을 새 디스크로 복사합니다.
  3. 별도의 하드 디스크에서 부팅, 최소 루트 및 스왑을 만듭니다. 문제가있는 하드 디스크에서 복제 할 운영 체제와 동일한 운영 체제를 설치하십시오.
  4. 이 새 디스크에서 부팅합니다 (대상 호스트에서 가동 중지 시간이 발생할 위험이없는 경우 별도의 시스템에서 이상적임). 그렇지 않으면이 디스크로 대상 호스트를 부팅 할 수 있습니다.
  5. 올바른 마운트 지점을 사용하여 2 단계의 디스크를이 새로운 시스템에 추가하십시오. 이제 시스템 드라이브의 복제본이 있습니다. 파티션을이 새 디스크에 (선택적으로) 복사 할 수 있지만 디스크를 OS 부팅에 필요한 최소 요구 사항으로 유지하는 것이 좋습니다. 알다시피, 주 파티션에 너무 많은 것들이 있으면 복구가 어렵습니다. 서버가 헤드리스이므로 네트워크 구성을 올바르게 복사하십시오.
  6. 4 단계에서 처음에 대상을 부팅하지 않기로 선택한 경우에는 이상 시스템의 드라이브를이 새 디스크 쌍으로 교체하십시오.
  7. 재부팅하십시오.

다운 타임의 위험이 있습니다. 필수적이지 않은 서버입니다. 복사가 훨씬 빠르기 때문에 hotswap (기본적으로 hot-add)을 사용하려고했습니다. 우리가 SATA와 이야기하고 있기 때문에 내가 생각한 위험이 너무 많지 않아야합니다 (적어도 II). 그 외에도 여분의 부팅 디스크를 제안하는 이유는 무엇입니까? 이미 설치된 소프트웨어, 홈 디렉토리 등의 문제가 복잡하지 않습니까? 내가 피하려고하는 더 많은 일처럼 들린다 : D
Nanne

내가 프로덕션에서 사용하는 것; 외부 디스크 (실제로 LVM)에 / home, / etc, / var, / usr 및 / opt를 마운트하고 별도의 디스크에 / 및 / boot를 마운트합니다. 이 방법으로 메인 디스크에 장애가 생길 때 걱정할 필요가 없습니다. 서비스에 영향을주지 않으면 서 교체하면됩니다. 처음에는 약간의 작업이지만 장기적으로 절약 할 수 있습니다. 특히 파티션의 공간이 부족하여 다운 타임없이 볼륨을 추가해야하는 경우에 특히 그렇습니다.
Burhan Khalid

당신이 좋은 지적을하는 동안, 그것은 현재 내가 요구하거나 필요하지 않습니다 :). 시스템에는 여러 개의 다른 디스크가 있으며 (약 7 개) 선을 어딘가에 그려야합니다 .D. 따라서 OS는 현재 분할 할 필요가 없습니다. 내 말은 : 나는 지금 내가 찾고있는 것이 아니라 시스템이 좋다는 데 동의한다. D. 따라서 모든 디스크를 1 개의 디스크에두면 외부로 복사한다는 사실로 인해 디스크 속도가 크게 느려지지 않습니까?
Nanne

이더넷을 통한 외부 인터페이스에 따라 USB 2보다 빠르며 USB 3보다 빠릅니다. 물론 속도가 느리지는 않습니다. 물론 / tmp와 같이 작성중인 디렉토리 또는 파이프가 작성되는 곳은 복사하지 마십시오.
Burhan Khalid

0

나는 rsync에 Centos Freepbx 배포판에서 많은 시간을 보내고 부팅 가능한 새 디스크를 가지고 있으며 마지막으로 fstab 및 grub UUID를 수정하면 작동하지 않습니다.

그것을 작동시키는 마지막 단계는

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Grub CLI에있을 때 (즉, grub>프롬프트에서) :

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

를 누르면 enter이제 종료하고 기존 디스크를 제거한 다음 새 디스크로 부팅 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.