在 chroot 中反复修复“/dev/null: Permission denied”

Ash*_*Ash 7 linux permissions chroot

我已经用 chroot 到一个外部磁盘sudo chroot /mnt/disk,但几乎我所做的一切(登录、tab 完成、less输入文件,...)都会导致一个错误提到/dev/null: Permission denied,即使命令似乎有效。

/dev/null 具有正确的权限 (666),并file表示它是一个字符设备,所以它不像任何东西已经用常规文件覆盖它或更改了权限。

我能做些什么来解决这个问题?

以下是制表符补全(of ls /u)的结果:

$ ls /ubash: /dev/null: Permission denied
bash: _upvars: `-a2': invalid number specifier
bash: /dev/null: Permission denied
bash: _upvars: `-a0': invalid number specifier
Run Code Online (Sandbox Code Playgroud)

Ash*_*Ash 6

该磁盘可能使用该nodev选项安装,该选项mount解释如下:

不要解释文件系统上的字符或块特殊设备。

您可以通过检查chrootmount 外部的输出来验证这一点:

$ mount
...
/dev/sda1 on /mnt/disk type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
Run Code Online (Sandbox Code Playgroud)

(这是一个特别棘手的问题,因为 chroot 之外的配置会影响其中程序的行为!)

修复它就像在没有nodev选项的情况下重新安装一样简单。以下命令将完成此操作(即使 chroot 进程正在运行!),尽管可能有一种方法可以删除该nodev选项而不删除所有其他选项:

sudo mount -o remount /dev/sda1 /mnt/disk
Run Code Online (Sandbox Code Playgroud)