我已经使用 chroot 到外部磁盘sudo chroot /mnt/disk
,但几乎我所做的一切(登录、制表符补全、less
输入文件等)都会导致出现错误/dev/null: Permission denied
,即使该命令似乎有效。
/dev/null 具有正确的权限(666),并且file
表示它是一个字符设备,因此它不像任何东西用常规文件覆盖它或更改了权限。
我该如何修复此问题?
以下是制表符补全(的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
答案1
磁盘可能已安装该nodev
选项,其mount
含义如下:
不要解释文件系统上的字符或块特殊设备。
您可以通过检查输出来验证这一点mount
外部chroot:
$ mount
...
/dev/sda1 on /mnt/disk type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
(这是一个特别难以发现的问题,因为 chroot 之外的配置会影响其中程序的行为!)
修复它就像重新挂载而不使用nodev
选项一样简单。以下命令将完成此操作(即使在 chrooted 进程正在运行时!),尽管可能有一种方法可以删除只是nodev
而不删除所有其他选项的选项:
sudo mount -o remount /dev/sda1 /mnt/disk