リモート サーバーからフォルダーをダウンロードするときに、ファイル構造/所有権/権限などを保持するにはどうすればよいですか?

リモート サーバーからフォルダーをダウンロードするときに、ファイル構造/所有権/権限などを保持するにはどうすればよいですか?

リモート サーバーのフォルダーに Linux rootfs をコンパイルしました。これをダウンロードしてローカル コンピューターの SD カードに保存し、組み込みコンピューターを起動するために使用する必要があります。ダウンロード時にファイルのすべての属性を保持するにはどうすればよいでしょうか。よろしくお願いします。

答え1

tarできるはずです。所有権と権限に関する情報を保存し、デフォルトで再帰的です。最終的には、SD カード上のファイルの所有権は、サーバー上で定義されたユーザーやグループにも、ローカル コンピューター上で定義されたユーザーやグループにも依存しないことを理解しています。これは--numeric-owner良いアイデアです。

--same-owner抽出中は、およびフラグを使用する必要があります--same-permissions(root として実行する場合はデフォルトです)。


リモート サーバー上でファイルをブロック デバイスとしてマウントする権限がある場合 ( losetup)、ファイル内にファイル システムを作成しmount、そこにファイルを配置して「すべての属性が保持される」ようにすることができます ( sudo cp -a)。次に ( umountsyncおよびの後にlosetup -d)、そのファイルのみをダウンロードし、それをローカル SD カードのパーティションにそのままプッシュするか ( 、、または任意のものを使用) dd、ローカルにマウントしてファイルを取得します。cpcat

多くのmkfsツールが通常のファイルに対して操作できることに注意してください。また、 の最新の実装では、mount通常のファイルを半直接的にマウントできます (losetupに関連するすべての処理を実行します)。 を明示的に使用する必要はまったくないでしょうlosetup。次のようになります。

# on the server
truncate -s <desired_image_size> image
mkfs.<type> <options> image
sudo mount image <mountpoint>
sudo cp -a <directory>/* <mountpoint>/    # warning: * doesn't match dotfiles
sudo umount <mountpoint>

サーバー上で実行できない追加の手順が必要な場合でも、ファイルシステム全体の形式でファイルをダウンロードする保証ファイルシステムでサポートされているすべての機能が転送中に保持されます。別のファイルシステムからコピーしたり別のファイルシステムにコピーしたりするときにそれらの機能を維持することが目的ですが、転送自体ではそれらを変更できません。tar特に「エキゾチックな」機能が必要な場合 (ただし、この場合は当てはまらないようです) は、 よりもこの方法のほうが適している場合があります。したがって、この方法が最も一般的です。

関連情報