다음 명령을 사용하여 완전한 원격 파일 시스템에서 tar를 실행하고 있습니다.
ssh -n <hostname> 'sudo tar -cpvzf - --one-file-system /' | cat > Bak.tar.gz
이것은 나에게 타르볼을 제공합니다. 이 타르볼을 제가 사용하고 있는 다른 서비스로 가져오려고 했지만 디렉토리가 포함되어 있지 않은 것 같아서 문제가 발생했습니다 /dev
. 초기 tar 이후에 --include="/dev"
비슷한 작업을 수행 할 수 있는지 궁금합니다. /dev
여기에는 몇 가지 지침이 필요합니다.
답변1
포함하려는 경로 이름에 추가하면 됩니다.
tar -cf - --one-file-system / /dev/
/dev
그러나 역학에는 완전히 잘못되었거나 관련 없는 장치 노드가 너무 많이 포함되기 때문에 이는 실제로 원하는 것이 전혀 아닌 경우가 많습니다 .
더 나은 접근 방식(다른 마운트에 의해 숨겨진 파일을 포함하여 원래 루트 파일 시스템의 전체 복사본을 실제로 얻는 것보다 더 나은 방법)은 하위 마운트 등에 의해 차단되지 않는 파일 시스템의 또 다른 마운트를 만드는 것입니다 tar
.
이렇게 하면 /dev/
루트 파일 시스템(및 기타 모든 것)에 실제로 저장된 내용을 얻을 수 있습니다. 여기에는 일반적으로 설치 시 처음 생성된 표준 노드 세트만 포함되어야 하며 시스템이 /dev
그 위에 동적으로 설정될 때까지 시작 시에만 필요합니다./dev/
mkdir /mnt/root
mount --bind / /mnt/root
cd /mnt/root
tar -cpvzf - .
cd /
umount /mnt/root
mount
맨페이지에 나와 있듯이 ,바인드 마운트 호출은 가능한 하위 마운트가 아닌 단일 파일 시스템(의 일부)만 연결합니다.. 이것이 --one-file-system
더 이상 필요하지 않은 이유입니다. 이 구조에는 다른 파일 시스템이 없습니다.
답변2
/dev
보관할 파일 목록에 추가하기만 하면 됩니다 .
ssh -n <hostname> sudo tar -cpvzf - --one-file-system / /dev > Bak.tar.gz
--one-file-system
다른 파일 시스템의 디렉터리로의 재귀만 방지합니다. 다른 파일 시스템의 파일/디렉토리를 tar에 대한 인수로 직접 나열할 수 있습니다.