我想捕获 chroot 中的所有内容,但不确定是否需要首先 chroot 进入它以查看完整的文件系统/保护器权限等。从 chroot 外部,似乎我会错过 root 的主目录/root
。完全捕获 chroot 的方法是什么,就像完全捕获 VM 一样?:
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
你不必 chroot 来 tar 东西。您可以改用该--numeric-owner
选项。仅当您还想在 tar 存档中记录(正确的)所有者/组名称时,才需要 Chroot,在这种情况下(当/etc/passwd
等是 tar 的一部分时),这并不是绝对必要的。
而且,如果没有实际 chroot ,您也不需要首先mount /dev
、等,所以这就消除了一个令人头疼的问题。/proc
/sys
该--one-file-system
选项是一个假朋友。它只会给你一个不完整的 tar,因为它会跳过任何和所有安装点。例如,某些系统/dev
甚至在 udev 挂载之前就已经存在静态设备节点;它们会消失,因此您的系统可能无法启动。
--one-file-system
因此,除非您绝对想要不完整的结果,否则请勿使用。
另一种方法是绑定安装,例如对于根分区:
mkdir /mnt/root
mount --bind / /mnt/root
绑定挂载不附带子挂载,因此/mnt/root
可以让您全面了解根文件系统,包括静态节点/dev/
和其他内容(如果存在)。您可以将其全部打包,而无需所有麻烦--one-file-system
和数十个--exclude
选项。
答案2
查看chroot(2)
全部内容(用户命令chroot(1)
只是系统调用的一个薄包装):它更改了受影响进程看到的位置/
,因此它无法(轻松)转义/访问目标目录之外的文件。
“chroot”目录只是一个沼泽标准目录(可能由您友好的系统管理员设置了特殊内容),因此您可以像其他任何东西一样操作它。