chrooted tarを作成する方法は?

chrooted tarを作成する方法は?

chrootのすべてをキャプチャしたいのですが、完全なファイルシステム/保護者権限などを見るには、まずchrootに入る必要があるかどうかわかりません。 chrootの外から見ると、ルートのホームディレクトリを見逃すようです/root。 VMを完全にキャプチャするかのようにchrootを完全にキャプチャする方法は? :

cd ~/mychroot
# Un-mount any previously mounted filesystems first?
# umount /proc
tar -cpzf /tmp/mychroot.tar.gz --one-file-system --exclude=/tmp --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev /    cp ~/mychroot/mychoort.tar.gz /path/to/somewhere/safe

sudo chroot ~/mychroot
# Un-mount any previously mounted filesystems first?
tar -cpzf /tmp/mychroot.tar.gz --one-file-system --exclude=/tmp --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev /    # Exit the chroot
exit
cp ~/mychroot/mychroot.tar.gz /path/to/somewhere/safe

答え1

tar操作を行うためにchrootする必要はありません。代わりにこのオプションを使用できます--numeric-owner。 Chrootは、tarアーカイブに(正しい)所有者/グループ名を記録する場合にのみ必要です。この場合(/etc/passwdなどがtarの一部である場合)は必ずしも必要ではありません。

また、実際にchrootをせずに先にマウントなどをする必要がないので、/dev面倒なことがなくなります。/proc/sys

オプション--one-file-systemは偽の友達です。すべてのマウントポイントをスキップするため、不完全なtarが生成されます。たとえば、一部のシステムには、/devudevがマウントされる前に存在する静的デバイスノードがあり、システムが起動しない場合があります。

--one-file-systemしたがって、不完全な結果を絶対に望まない限り使用しないでください。

別の方法は、例えばルートパーティションにマウントをバインドすることです。

mkdir /mnt/root
mount --bind / /mnt/root

バインドマウントはサブマウントには付属していないため、静的ノードやその他のコンテンツ(存在する場合)を/mnt/root含むルートファイルシステムの完全なビューを提供します。/dev/煩わしさ--one-file-systemと何十もの--excludeオプションなしで、これらすべてを1つのパッケージに収めることができます。

答え2

すべて表示chroot(2)(ユーザーコマンドはchroot(1)システムコールを囲む薄いラッパーにすぎません):影響を受けるプロセスが表示する場所を変更するため、ターゲットディレクトリ/外のファイルを(簡単に)エスケープ/アクセスできません。

「chroot」ディレクトリは単純な標準ディレクトリなので(おそらくおなじみのシステム管理者が特別な内容に設定したでしょう)、他と同様に操作できます。

関連情報