블록 디바이스의 콘텐츠 전송

블록 디바이스의 콘텐츠 전송

백업 목적으로 SSH 링크를 통해 (여러) 전체 디스크 파티션을 전송하고 싶습니다. 원본은 블록 특수 장치이고 대상은 일반 파일이어야 합니다. 그러나 일반적인 도구는 이에 적합하지 않은 것 같습니다.

  • scp불평할 것이다not a regular file
  • tar대상 측에서 장치 inode를 다시 생성하려고 시도합니다.
  • rsync설명하다skipping non-regular file

현재 가장 좋은 옵션은 nc포트 전달을 통하거나 cat원격 측에서 파티션당 한 번 호출하는 것입니다. 이는 공개 키가 설정되지 않은 한 파티션당 하나의 비밀번호 입력을 의미합니다. 더 우아한 솔루션이 있습니까?

환경은 합리적인 Linux 라이브 시스템일 수 있습니다. 현재 나는 데비안에서 쌕쌕거림을 겪고 있지만, 그럴 필요는 없습니다.또한이에 대해 구체적으로 설명하십시오.

답변1

SSH를 통해 파이프할 수 있습니다. 사용 예 dd:

dd bs=1M if=/dev/disk | ssh -C target dd bs=1M of=disk.img

전송 중에 네트워크 연결이 중단된 경우 복사된 콘텐츠의 양을 알면 전송을 재개할 수 있습니다. 예를 들어, 하나 이상의 파일이 1000MiB전송되었다고 확신하는 경우(파일 크기 확인 disk.img):

dd bs=1M skip=1000 if=/dev/disk | ssh -C target dd bs=1M seek=1000 of=disk.img

dd이는 단지 예일 뿐이며 파이프와 함께 사용되는 한 다른 명령처럼 작동합니다.

답변2

이더넷 링크를 통해 전송하려는 경우 배포판에 아직 버퍼가 없으면 버퍼를 설치하겠습니다. dd와 비슷하지만 더 좋고 빠릅니다. 기본적으로 동시 읽기 및 쓰기를 위해 공유 메모리 버퍼를 사용하도록 프로그래밍되어 있습니다. 테이프 덤프에 사용했는데 전송 시간이 약 10% 절약되었습니다. 명령줄은 다음과 같습니다.

  buffer -i /dev/disk -m 100m | ssh -C target buffer -o disk.image -m 100m

더 많은 옵션을 사용할 수 있으며 기본 블록 크기는 10K입니다. 위의 내용은 100MBytes의 공유 메모리를 할당하므로 이를 허용하려면 이 매개변수나 구성을 조정해야 할 수도 있습니다.

경고: 이 방법으로 활성 파티션을 전송하는 데 문제가 있습니다. 따라서 전송하려는 파티션이 마운트되지 않았는지 확인하십시오.

관련 정보