
Я выполнил chroot на внешний диск с помощью sudo chroot /mnt/disk
, но почти все, что я делаю (вход в систему, автодополнение по клавише Tab, less
создание файла и т. д.), приводит к ошибке с упоминанием /dev/null: Permission denied
, даже если команда вроде бы работает.
/dev/null имеет правильные права доступа (666) и file
говорит, что это символьное устройство, так что это не похоже на то, что кто-то перезаписал его обычным файлом или изменил права доступа.
Что я могу сделать, чтобы это исправить?
Вот к чему ls /u
приводит автодополнение клавишей Tab ():
$ 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