Исправление ошибки «/dev/null: Permission denied» в chroot-окружении

Исправление ошибки «/dev/null: Permission denied» в chroot-окружении

Я выполнил 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

Связанный контент