次のコマンドを使用して、完全なリモートファイルシステムで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の引数として直接一覧表示できます。