원격 프로덕션 서버에는 15TB가 넘는 데이터가 포함된 디렉터리가 있습니다. 또한 Linux 권한 외에도 ACL은 부서, 사용자 및 데몬이 액세스를 미세 조정할 수 있도록 광범위하게 사용됩니다.
CI/CD 파이프라인 및 자동화된 테스트를 위해서는 이러한 권한 변경이 시스템에 어떤 영향을 미치는지 테스트해야 하지만 그 전에 테스트 환경에서 프로덕션 콘텐츠를 복제해야 합니다.
분명히 15TB의 데이터를 복제할 수 없으며 데이터에는 별로 관심이 없고 메타데이터(파일 이름, 권한, 타임스탬프 - 기본적으로 ls -lah
반환되는 모든 정보)에만 관심이 있습니다.
내가 사용하는 방법에 따라 내가 무엇을 하려는지 쉽게 알 수 있습니다 rsync
.
rsync -aAr --include='*/' --exclude='*' [email protected]:/my/directory/ /test/directory/
카탈로그 관점에서 볼 때 이것이 바로 나에게 필요한 것입니다. rsync
내용은 없지만 파일 이름과 속성은 그대로 유지한 파일 복사를 허용하는 옵션이 있으면 문제 가 해결될 것입니다. (할 수 있다?)
이제 디렉터리에서 위의 rsync 명령을 실행한 후 수행할 작업은 다음과 같습니다.
ssh [email protected] 'find /my/directory -type f -exec ls -lah {} \;' > my.production.directory.files.txt
그러면 콘텐츠에 다음과 같은 데이터 줄이 포함된 로컬 파일이 제공됩니다.
-rwxrwxrwx 1 owner group 15K Oct 13 10:07 /my/directory/jobs.txt
여기에는 9개의 필드가 있으며 이를 awk 및 bash에 전달합니다.
cat my.production.directory.files.txt | awk '{print "touch " $9 " && chown "$3":"$4" "$9}' | bash
더 나은 방법이 있어야 한다고 생각합니다. 적용할 다른 명령과 원래 타임스탬프를 통해 파일을 필터링하기 chmod
전에 이 작업을 수행하는 더 효율적인 방법이 있습니까 ? like 는 like 와 cp
함께 있고 --reference와도 관련이 있습니다. 단, 원격 파일 시스템은 제외됩니다.--attributes-only
touch
chown
응답은 명령줄에서 직접 실행되어야 합니다. 어떤 스크립트도 업로드하거나 의존할 수 없습니다. 또한 getfacl -R 및 setfacl이 권한을 복원하지만 타임스탬프 및 비권한 관련 파일 데이터(내가 알고 있는)는 복원하지 않는다는 것을 알고 있습니다.
답변1
여기 미친 아이디어가 있습니다.sshfs
?
다음 명령을 사용하여 원격 디렉터리를 로컬로 마운트합니다
sshfs
.sshfs remoteuser@remotehost:/my/directory /mountpoint
--attributes-only
옵션을 사용하여cp
파일 구조를 다시 만듭니다.cp -a --attributes-only /mountpoint /test/directory
sshfs 파일 시스템을 마운트 해제합니다.
fusermount -u /mountpoint
이를 위해서는 원격 호스트에 추가 소프트웨어를 설치할 필요가 없습니다.