Скорее всего, узлы устройства нового диска в новой системе не совпадают со старыми, которые вы клонировали вместе с разделом (разделами). Запустите аварийную систему (Knoppix или любую другую живую систему), определите, какой узел в /dev
используется для какого раздела, смонтируйте корневой раздел и настройте
и конфигурацию загрузчика (вероятно, в
, или на загрузочном разделе, если он у вас есть).
Если схема узлов устройств/разделов кажется идентичной, возможно, вам не хватает некоторых основных узлов в
, которые необходимы до того, как devtmpfs будет смонтирован в /dev
; создайте их из системы спасения, например. например,
mknod <mountpoint>/dev/console c 5 1
Вы должны быть в состоянии определить тип/идентификаторы узла и их разрешения из /dev
аварийной системы. Я не совсем уверен, но думаю, что /dev/null
и еще один или два других тоже необходимы, но это может варьироваться в каждом дистрибутиве.
В вашем скрипте две проблемы:
1 )Вы забыли пробелы в тестовой команде[`whoami` = myuser]
2 )Из-за раскрытия переменной "$@" в два шага цитирование теряется.
В моей системе работает следующее:
[ `whoami` = myuser ] || exec sudo -S -u myuser bash -- "$0" "$@"
Если весь сценарий должен быть запущен конкретным пользователем, то я оставлю на усмотрение пользователя, запускающего сценарий, возможность изменить его на правильное имя пользователя любым способом, который он увидит. подходят (либо через su
, sudo
, либо каким-то другим способом ).
Это упростит ваш сценарий и облегчит его использование. В частности, это позволит избежать необходимости «исправлять» неспособность пользователя принять правильную личность. Лично я бы расценил это как ошибку в его вызове, аналогичную невозможности использовать правильные параметры командной строки.
Сценарий по-прежнему может проверять, что он запускается нужным пользователем, очевидно:
if [ "$USER" != "correctuser" ]; then
echo 'Must be run by "correctuser"' >&2
exit 1
fi
Затем обычный пользователь запускал скрипт, используя
sudo -u correctuser./script.sh -e dev -v 1.9
в то время как пользователь root может захотеть сделать
su correctuser -c./script.sh -e dev -v 1.9