백업 목적으로 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의 공유 메모리를 할당하므로 이를 허용하려면 이 매개변수나 구성을 조정해야 할 수도 있습니다.
경고: 이 방법으로 활성 파티션을 전송하는 데 문제가 있습니다. 따라서 전송하려는 파티션이 마운트되지 않았는지 확인하십시오.