我正在制作 liveUSB iso 文件,做了很多安装,再加chroot script
上mount -t proc proc /proc
脚本(chroot
对我来说是新事物,当我进行一些“清理”并且使用 chroot 运行的脚本不再运行时,我注意到了这个问题)。现在我的情况很奇怪,系统怎么可能有这样的行为?
$ if [ -d "newdir/proc" ]; then echo 1;fi
1
$ if [ -d "newdir/pro" ]; then echo 1;fi
$ sudo ls -al "newdir"
total 0
问题还在于umount newdir
输出“目标正忙”。findmnt | grep proc
不再显示“newdir/proc”行。
添加1:
$ sudo ls -al "newdir/media/root/usb" # another mount
total 0
$ sudo ls -al "newdir/media/root"
total 0
$ sudo ls -al "newdir/media"
total 0
如果它能有所作为的话,newdir
那就是在tmpfs
系统中。
添加2:
根据@Bart 的答案的建议,我运行lsof
并意识到我有另一个终端,我chroot newdir
可以在其中查看脚本的 IIRC 结果。现在我退出了 chroot,lsof | grep nwdir
不再输出那些 bash 命令的列表,只输出有关fuse.gvfsd-fuse
和 的警告fuse /run/user/1000/doc
。对于以下情况仍然相同:
$ sudo ls -al "newdir/media/root"
total 0
然而,在那之后我能够在输出中执行无错误的操作umount newdir
,然后sudo ls -al "newdir/media/root"
给出no such file
.
聚苯乙烯通过此处的帮助确定了意外行为的原因:未使用 chroot 关闭终端。但是,我已经阅读了如何使用打开进程的句柄访问文件,但这里“重影”证明了普通的运行方式ls
我仍然希望我能看到解释为什么/如何这样工作。
答案1
它procfs
甚至不是真正的文件系统,而是内存内容和当前正在运行的进程的表示。您所看到的表明某些进程在 chroot Mounted 中创建了文件proc
,但没有退出并且仍然使用该目录中的文件引用。
lsof | grep /newdir/proc
应该显示哪些进程仍在使用不存在的位置。
您想要的可能是将其绑定安装到 chroot 内的某个位置:
mkdir -m 0555 newdir/proc
mount --bind /proc newdir/proc
并不是mount -t
。