ssh 및 tar를 사용하여 전체 Linux 루트 파일 시스템을 새 하드 드라이브에 복사하는 방법


18

실패한 하드 드라이브에서 전체 Linux 루트 파일 시스템을 사용 가능한 열린 파티션이있는 다른 컴퓨터로 전송해야합니다. 나는이 포함 장해야 꽤 한 tarssh, 그러나 나는이 작업을 수행하는 방법을 정확히 기억할 수 없습니다.

아마도 새로운 / 대상 호스트에서 라이브 CD를 사용하여 다음 과 같은 것을 실행 하고 있습니다 .

ssh user@failingharddrivehost "some tar command | piped into something else"


주제를 벗어. 프로그래밍 질문이 아닙니다. 하지만 시도ssh user@failingsys "tar cfz - /" > oldsys.tar.gz

/ dev /를 tar하지 않도록주의하십시오 (예 : / dev / random, / dev / sdX, ...). Ditto / proc /
Hennes

답변:


19

rsync를 사용하십시오. 새 호스트에서 사용할 수 있습니다

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

tar와 같은 것을 사용하려고 시도하지 않을 것입니다. 파일이 깨진 경우 작동하지 않을 것입니다.


etagenklo와 @Hennes가 위에서 설명한 것처럼 rsync를 사용하여 종료되었습니다. 마이그레이션이 잘 진행되었습니다. 그럽을 고칠 필요가 있지만 그렇게 나쁘지 않아야합니다.
CHK

8
acls, xattrs 및 하드 링크를 유지하기 위해 -AHX를 rsync에 플래그로 추가하여 원래 fs의 훨씬 더 정확한 사본을 얻었습니다.
Alexander Remesch

5
루트 파일 시스템에없는 항목을 무시하기 위해 -x를 추가 한 다음 다양한 경로에 대해 --exclude 인수를 건너 뛸 수 있습니다.
Alex

4

두 컴퓨터가 같은 (안전한) LAN에있는 경우을 사용하는 다른 방법을 권장합니다 netcat. 일반적으로 데이터를 암호화하지 않기 때문에 훨씬 빠릅니다.

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

좋은 머신에서 수신 포트 1234를 열고 netcat -l -p 1234수신 데이터를 파이프하여 tar추출합니다 (mtime 및 권한 유지). 나쁜 호스트는 사용이 포트로 데이터를 전송 tar하고 netcat. 나는 약간의 포함 --exclude으로, 매개 변수 /proc/sys가상 파일 시스템이며, 새로운 호스트에 따라서 쓸모. (특히 ( /proc/kcore) 에서 RAM을 나타내는 파일은 불필요한 양의 데이터를 추가합니다).

그러나 dd고장난 드라이브의 파티션을 덤프 하는 것도 고려해야 합니다.

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

/dev/sda1올바른 장치 를 채택해야하는 곳 고장난 드라이브의 다른 파티션에서도이를 수행하십시오.

이 덤프를 사용하면 tar캡처 하지 않을 중요한 메타 데이터 (예 : ACL)를 놓치지 않을 것입니다.


3

디렉토리를 제외하고 왜 결합합니까? 같은 장치를 다른 디렉토리에 마운트하는 것이 더 좋지 않습니까? 현대 커널은 이런 식으로 허용합니다. 예를 들어, 당신은 마운트

/ dev / sda1을 /로 수행 한 후 다음을 수행하십시오. mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

이 후에는 / dev / sda1 as / / dev / sda1 as / CLEANROOT가 있습니다.

이것은 두 곳에서 볼 수있는 동일한 파일 시스템이지만 / CLEANROOT에는 추가 마운트가 없습니다. 그런 다음 제외없이 /를 복사하지 않고 tar 또는 rsync / CLEANROOT를 수행 할 수 있습니다.

물론 다른 데이터 파티션이 있으면 다른 데이터 파티션을 복사해야합니다.

파티션 복사는 서버 복구의 첫 단계입니다. 다른 하나는 부팅 섹터를 재생성하는 것입니다. 그렇지 않으면 시스템이 복사 된 디스크에서 부팅되지 않습니다. Install / rescue CD 또는 pendrive에서 부팅 할 때 Usefull은 복구 모드입니다.


1

장애가 발생한 호스트에 물리적으로 액세스 할 수 있습니까?

그렇다면 라이브 CD로 부팅하십시오. 그런 다음 사용하십시오.

  • 덤프 (권한을 포함하여 전체 파일 시스템을 덤프 / 복원)
  • / dev가있는 Tar 은 제외되었습니다. netcat을
    제외 하고 std_out 출력 및 파이핑과 이것을 결합 할 수 있습니다 . 제외 구문은 다음과 같습니다 tar --exclude='/dev'.
  • 또는 동일한 제외를 가진 rsync. 예 :
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • 또는 다음 과 같이 dd를 사용 하십시오.
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

라이브 CD로 부팅 할 수없는 경우 위의 솔루션 중 일부는 동일하게 유지되지만

  1. 일부 파일이 사용 중이거나 잠겨있을 수 있습니다.
  2. / dev /뿐만 아니라 / proc /도 제외해야합니다.
    예 :tar --exclude='/dev' --exclude='/proc'

예, 두 호스트 모두에 대한 물리적 (및 루트) 액세스 권한이 있습니다. rsync로 시도하십시오. 알 수없는 이유로 netcat이 실패한 상자에 충돌했습니다. 대상 파일 시스템을 마운트하고 싶지 않습니다. 그것은 실패 : #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK


0

rsync 사용을 고려해야합니다

다음 명령은 두 가지를 가정합니다.

  1. 하드 드라이브에 문제가있는 시스템에 있습니다.
  2. 새 파티션에는 ssh가 활성화 된 최소 Linux 설치가 있습니다.

rsync / new_partition:/wherever/you/want/

참고 : 후행 /가 중요합니다. 그렇지 않으면 파일이 위의 한 디렉토리 레벨에있게됩니다.


OP 는 데이터가 다른 컴퓨터로 전송되어야하므로 시간, 소유권, 심볼릭 링크 (및 ACL) 등을 보존 하므로 -a매개 변수 (및) 를 사용하려고 합니다. 그래서-A-e sshrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.