
при попытке бежать
#!/bin/sh
for i in /sys/bus/pci/devices/*/boot_vga; do
if [ $(cat "$i") -eq 0 ]; then
GPU="${i%/boot_vga}"
AUDIO="$(echo "$GPU" | sed -e "s/0$/1/")"
USB="$(echo "$GPU" | sed -e "s/0$/2/")"
echo "vfio-pci" > "$GPU/driver_override"
if [ -d "$AUDIO" ]; then
echo "vfio-pci" > "$AUDIO/driver_override"
fi
if [ -d "$USB" ]; then
echo "vfio-pci" > "$USB/driver_override"
fi
fi
done
modprobe -i vfio-pci
(как sh-файл) Я получил вывод
./a.sh: 8: cannot create /sys/bus/pci/devices/0000:17:00.0/driver_override: Permission denied
./a.sh: 10: cannot create /sys/bus/pci/devices/0000:17:00.1/driver_override: Permission denied
при просмотре местоположений этих файлов я обнаружил, что /sys/bus/pci/devices/0000:17:00.0/driver_override и /sys/bus/pci/devices/0000:17:00.1/driver_override уже существуют, а их содержимое равно "(null)"
решение1
Эта проблема, скорее всего, связана с тем, что вы не запускаете скрипт с правами root. Каталог /sys
в Linux является частью виртуальной файловой системы и защищен. Изменение файлов здесь часто требует прав root (или суперпользователя).
В вашем случае вы пытаетесь изменить driver_override
файлы, для чего требуются более высокие привилегии.
Попробуйте запустить скрипт с помощью sudo, например так:
sudo ./a.sh
Эта команда выполнит скрипт с привилегиями root, и вы больше не увидите ошибку «Отказано в доступе».
Однако будьте осторожны при запуске скриптов с правами root, особенно когда они изменяют системные файлы, поскольку ошибки могут потенциально нанести вред вашей системе. Всегда убеждайтесь, что вы понимаете, что делает скрипт, прежде чем запускать его как root-пользователь.
Содержимое "(null)" в driver_override
файле может быть связано с тем, что не указан драйвер для переопределения текущего. Интерфейс driver_override
позволяет указать конкретный драйвер для привязки к устройству при выполнении автоматического зондирования драйвера устройства. Это расширенная функция, и ее следует использовать осторожно.