リモート本番サーバーには、15 TBを超えるデータを含むディレクトリがあります。さらに、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
これを行うには、リモートホストに追加のソフトウェアをインストールする必要はありません。