我有一个 unix 安装,它应该可以用作 chroot 和独立系统。如果它作为 chroot 运行,我不想运行任何服务(cron、inetd 等),因为它们会与主机系统发生冲突或变得多余。
如何编写根据是否在 chroot 中运行而行为不同的 shell 脚本?我的迫切需要是一个现代 Linux 系统,它/proc安装在 chroot 中,并且脚本以 root 身份运行,但也欢迎更多可移植的答案。(如果 /proc 未安装,请参阅如何判断我正在 chroot 中运行?对于没有/proc.的 Linux 的情况。)
更一般地说,适用于其他收容方法的建议会很有趣。实际问题是,这个系统是否应该运行任何服务?(答案在 chroot 中是否定的,在成熟的虚拟机中是;我不知道诸如 jails 或容器之类的中间情况。)
我有2个问题。
如何检查 /proc/ 是否已安装?
不鼓励使用 /etc/mtab,因为它可能不一致。
使用 /proc/mounts 也不是一个选项,因为如果 /proc/ 未挂载可能不存在(尽管检查它的存在可能是进行此检查的一种方法。
进行此检查的最佳方法是什么?
运行cat /proc/mounts,我得到这个(简化):
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
/dev/sda1 / ext3 rw,relatime,errors=continue,barrier=1,data=ordered 0 0
io /etc/blkio cgroup rw,relatime,blkio 0 0
...
Run Code Online (Sandbox Code Playgroud)
关于内容,来自 Red Hat 的文档说:
第一列指定挂载的设备,第二列显示挂载点,第三列告诉文件系统类型...
我不认为那rootfs是一个设备,我想在里面找到这个设备,udev(/dev)但我找不到它。所以我不知道挂载在哪个设备/(你可能会说我可以mount用来获取这些信息,但如果rootfs这里不是通过mount命令挂载呢)。
另一个示例是在 VMware ESX 3.x 服务器上,您在mount的结果中找不到任何“vmfs”条目,但是通过cat /proc/mounts,我得到/vmfs /vmfs vmfs rw 0 0. 作为rootfs例子,我不知道哪些设备与第一个“/ VMFS”这里无论是相关的。
问题:谁能告诉我第一列的/proc/mounts真正含义是什么?
一些文件系统标志似乎隐藏在 /proc/mounts 中,这取决于它们是否被定义为默认值。
有没有办法显示 /proc/mounts 中的所有标志,还包括默认标志?如果没有,是否有另一个命令可以查看已安装文件系统的所有启用标志?
我的背景:我已经在 fstab 中设置了 data=writeback 标志,并在我的 grub 配置中将它传递给内核,但它仍然没有在 /proc/mounts 中列出。现在,我如何确定这是因为 data=writeback 是默认值(因此未显示),还是因为确实未设置标志?
我目前正在使用以下命令安装我的服务器。
mount ip.ip.ip.ip:/home/backups /mnt/backups/
Run Code Online (Sandbox Code Playgroud)
每次服务器重新启动时,我都必须手动重新添加它。
如何永久添加?