데비안 원격 컴퓨터의 전체 디스크를 로컬 컴퓨터에 추가하거나 CP하는 방법은 무엇입니까?

데비안 원격 컴퓨터의 전체 디스크를 로컬 컴퓨터에 추가하거나 CP하는 방법은 무엇입니까?

이 글을 읽었습니다 -로컬 컴퓨터에서 SSH를 사용하여 원격 디스크를 추가하고 로컬 디스크에 저장하는 방법

그러나 다음 코드는 작동하지 않습니다.

"dd if=/dev/sda | gzip -1 -" | dd of=image.gz

디렉토리 가 없기 때문입니다 /dev/sda. 나는 Debian 7.0을 사용하고 있기 때문에 이것이라고 가정합니다.

내 vps의 전체 사본을 얻는 데 도움을 주시면 대단히 감사하겠습니다.

답변1

디스크의 장치 이름은 디스크 유형에 따라 다릅니다(더 정확하게는 디스크가 연결된 버스 및 컨트롤러 유형과 이를 처리하는 드라이버에 따라 다름). /dev/sdaPC의 첫 번째 디스크에 대한 일반적인 이름입니다(예를 들어 일부 이전 유형의 디스크 컨트롤러 또는 일부 하드웨어 RAID 컨트롤러의 경우 드라이버에 따라 다른 이름이 사용될 수 있음). VPS에서 디스크는 일반적으로 가상 /dev/vda이며 장치 이름은 /dev/xvda. df시스템에서 블록 장치 이름을 사용하거나 찾을 수 있습니다 lsblk.

그러나 라이브 시스템에서 백업을 수행하는 데 사용하지 마십시오.! 읽을 수 없는 백업으로 끝날 가능성이 높습니다. 백업이 수행되는 동안 디스크 내용이 변경되는 경우(라이브 시스템에서는 불가피한 일입니다(예: 로그가 어딘가에 기록됨)), 이미지는 약간 오래되고 약간 새롭기 때문에 일관성이 없어 복구가 불가능할 수 있습니다.

백업을 만드는 가장 좋은 방법은스냅 사진즉, 실제 시스템이 계속 변경되더라도 파일 시스템의 뷰는 고정되어 변경되지 않습니다. 이를 수행하는 방법과 가능 여부는 시스템 설정 방법에 따라 다릅니다. btrfs 및 zfs와 같은 일부 파일 시스템 유형에는 스냅샷 기능이 내장되어 있습니다. LVM은 볼륨의 스냅샷을 찍을 수도 있습니다.

스냅샷을 만들 수 없는 경우(또는 가능하더라도) 스냅샷을 만드세요.파일 수준지원. 변경된 시스템의 파일 수준 백업은 일관성이 없지만 "중요한" 변경을 수행하지 않으면 백업을 사용할 수 있습니다. 예를 들어, 파일을 이동하는 경우 백업 프로그램이 아직 이동하지 않은 디렉터리에서 이미 이동한 디렉터리로 해당 파일이 이동되면 백업에서 해당 파일이 생략될 수 있습니다. 반면에 로그 파일이 계속 커지면 파일의 중간 버전이 생기지만 파일 시스템 이미지가 손상되지는 않습니다. 하나의 파일을 삭제하고 다른 파일을 생성하는 경우 해당 파일 중 하나가 없거나 하나만 있거나 둘 다 없을 수 있지만 새 파일의 일부 데이터를 가리키는 이전 파일의 디렉터리 항목은 없습니다.

GNU tar(루트로!)를 사용하여 중요한 메타데이터가 포함된 Linux 시스템을 백업할 수 있습니다.

ssh root@vps 'tar -cJf - --acls --selinux --one-file-system /' >vps.tar.xz

답변2

/dev/sdaSCSI 드라이버를 통해 직접 디스크와 통신할 때 사용되는 규칙입니다. 댓글에서 디스크가 다음 위치에 있다고 말씀하셨습니다 /dev/vda. 이와 같은 이름 지정은 가상화 솔루션에서 다소 일반적입니다.추측하자면 KVM 관리형 VPS에 대해 이야기하고 있는 것 같습니다.

디스크를 백업하려면 /dev/vdaslm의 제안을 사용하십시오.

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=image.gz

이렇게 하면 /dev/vda전체 백업이 이루어지며 나중에 dd공간이 충분하다는 가정 하에 다른 디스크에 다시 복사할 수 있습니다.

fdisk -l잘 작동합니다. 내 장치 파일은 이지만 /dev/vda1전체 시스템이 포함되어 있습니까?

당신은 너무 빨리 읽었습니다. /dev/vda1디스크의 파티션(조각)입니다 /dev/vda. 세 가지 점에 유의해야 합니다.

  • 시스템이 루트 파티션으로만 구성된 경우 /dev/vda1백업으로 /dev/vda1충분합니다. 전체 드라이브(디스크 "헤더"도 포함)를 백업할 필요는 없습니다.
  • 시스템이 의 여러 파티션에 걸쳐 있는 경우 모든 파티션을 /dev/vda가져와야 합니다 dd(또는 dd위와 같이 전체 디스크를 가져와야 함).
  • 시스템이 여러 디스크를 사용할 수도 있습니다! 이런 일은 비교적 드물지만 일어날 수 있다고 생각합니다. /및 파티션(예: 및 )을 배치 /var하고 홈 디렉토리( )를 다른 드라이브( )에 배치할 수 있습니다./dev/vda/dev/vda1/dev/vda2/home/dev/vdb1/dev/vdb

lsblk귀하의 경우에는 이것이 귀하의 설정을 이해하는 데 적합한 도구라고 말하고 싶습니다 . 실행하고 MOUNTPOINT열을 살펴보세요. 시스템은 거기에 뭔가가 있는 한 해당 라인의 파티션을 사용합니다. 전체 내용을 백업하려면 다음을 수행해야 합니다.

  • 사용된 모든 파티션( /dev/vdXY)을 파일로 다운로드합니다. 파티션이 어딘가에 마운트될 때 사용됩니다.
  • 사용된 모든 디스크( /dev/vbX)를 파일로 다운로드합니다. 디스크는 사용된 파티션이 하나 이상 포함된 경우 사용됩니다.

즉, 다음을 실행할 수 있습니다.

ssh user@remote "dd if=/dev/vda | gzip -1 -" | dd of=disk1.gz
ssh user@remote "dd if=/dev/vdb | gzip -1 -" | dd of=disk2.gz
# ... and so on, once per used disk.

또는 (위의 2개 디스크 예를 사용하여):

ssh user@remote "dd if=/dev/vda1 | gzip -1 -" | dd of=root.gz
ssh user@remote "dd if=/dev/vda2 | gzip -1 -" | dd of=var.gz
ssh user@remote "dd if=/dev/vdb1 | gzip -1 -" | dd of=home.gz
# ... and so on, once per used partition.

파티션을 개별적으로 백업하는 것의 장점 중 하나는 필요한 경우 로컬에서 더 쉽게 탐색할 수 있다는 것입니다.

$ gzip -d home.gz                        # decompress the backup
$ sudo mkdir /mnt/home_bak               # create a mount point
$ sudo mount -o loop home /mnt/home_bak  # mount the backup
$ cd /mnt/home_bak                       # explore the home backup

마지막으로, lsblk마운트된 파티션만 나열하는 것을 기억하세요. 추가 파티션(부팅 시 자동으로 마운트되지 않는 파티션)을 설정한 경우 이를 포함해야 합니다.VPS를 설치할 때 이 작업을 수행했는지 기억할 것입니다.

관련 정보