Вопрос или проблема
Я использую Linux и VirtualBox более 20 лет, и это первый раз, когда я столкнулся с этой проблемой. Я пробовал всё, и ничего не работает.
Я установил новый Linux openSUSE Tumbleweed, рабочий стол XFCE, на VirtualBox (хост – Windows 10)
>hostnamectl
Статическое имя хоста: (не установлено)
Временное имя хоста: localhost
Имя иконки: computer-vm
Шасси: vm 🖴
Виртуализация: oracle
Операционная система: openSUSE Tumbleweed
CPE OS Name: cpe:2.3:o:opensuse:tumbleweed:20241129:*:*:*:*:*:*:*
Ядро: Linux 6.11.8-1-default
Архитектура: x86-64
Всё работает хорошо. Я следовал тем же инструкциям, которые всегда использую для каждого Linux, который устанавливаю на VirtualBox, чтобы поделиться своей папкой G:/public_html/
. Я делал это сотни раз раньше.
Я создал точку монтирования в /mnt/g/public_html
, а моя общая папка (которую я настроил во время установки VirtualBox для Linux) – это G:/public_html
Вот в чём проблема. В моей общей папке есть много скриптов Linux. У всех них установлен бит x
.
Я заметил, что когда я запускаю скрипт, он немедленно теряет бит x
. Пока скрипт выполняется. Я проверяю файл из второго терминала, используя ls -l
, и вижу, что x
исчез.
Как только скрипт завершает работу, бит x
вновь появляется!
Это происходит только со скриптами, которые находятся в моей папке общего доступа Windows. Не с скриптами, которые находятся в моей установке Linux, таких как $HOME
.
Это говорит мне о том, что это связано с настройками общей папки.
Что это означает, так это то, что если я пытаюсь запустить тот же скрипт из другого терминала, пока он всё еще выполняется в первом терминале, я получаю отказ в доступе. Я должен дождаться завершения первого процесса, чтобы снова запустить его и автоматически установить бит x
.
У меня есть другой Linux в роли гостя (Linux Endeavour) в другой виртуальной машине, и эта проблема там не возникает.
Вот что я заметил, и я думаю, что это может быть причиной: в openSUSE, когда я монтирую общую папку, все файлы имеют ‘me’ ‘me’ в качестве идентификатора пользователя и идентификатора группы. Где ‘me’ – это моё имя пользователя.
ls -l /mnt/g
total 12
drwxrwxrwx 1 me me 12288 Dec 1 06:45 public_html
В Endeavour OS, используя ту же команду монтирования, я получаю это
ls -l /mnt/g
total 12
drwxrwxrwx 1 me autologin 12288 Dec 1 06:45 public_html
Обратите внимание, что здесь идентификатор группы – autologin. Команда, которую я использую для монтирования общей папки, одинакова на обеих системах. Поэтому я не понимаю, почему один Linux использует autologin
для идентификатора группы для общей папки, а другой – нет. Я не знаю, является ли это причиной потери бита x
. Но это единственное различие, которое я вижу.
>cat mount_win.sh
mount -t vboxsf -o uid=1000,gid=1000 public_html /mnt/g/public_html
>id
uid=1000(me) gid=1000(me) groups=1000(me)
>
Я также пробовал добавить exec
к приведённой выше команде монтирования, но это не помогло.
Приведённая выше команда монтирования всегда является той, которую я использую для каждого нового Linux, который устанавливаю на VirtualBox. Она всегда работала.
Я сделал небольшое видео ниже, чтобы показать это (нажмите на него, чтобы увеличить).
Скрипт выполняет паузу на 20 секунд. Пока он выполняется, вы видите, что бит x
потерян до завершения скрипта. Смотрите на левый терминал, как ls -l
теперь не показывает x
во время выполнения скрипта.
>cd /mnt/g/public_html/LINUX_HOME_FILES/
>ls -l T.sh
-rwxrwxrwx 1 me me 70 Dec 1 16:09 T.sh
>
>cat T.sh
#!/bin/bash
echo "начало скрипта"
sleep 20s
echo "завершение скрипта"
>
Если есть что-то ещё, что я могу попробовать, или нужна любая другая информация, дайте мне знать.
Ответ или решение
Проблема, с которой вы сталкиваетесь, связана с поведением виртуальной машины и механизмами совместного использования папок между Windows и вашей установкой openSUSE в VirtualBox. Давайте поочередно разберём все аспекты, которые могут быть значимы для вашего случая.
1. Природа проблемы
Основная проблема заключается в том, что ваш bash-скрипт теряет бит на исполнение (x
bit) во время выполнения, но восстанавливает его после завершения. Данная ситуация наблюдается только при работе со скриптами в обShared folders, находящихся на диске Windows.
2. Причины потери x
бита
Причиной подобного поведения может быть то, как система управляет правами доступа к файлам в общей папке. VirtualBox использует механизм vboxsf
для совместного доступа, и некоторые качества файловой системы могут изменяться в зависимости от настроек монтирования:
-
Установленные параметры монтирования: Убедитесь, что используемые вами параметры монтирования соответствуют наилучшей практике. При использовании опций
uid
иgid
важно удостовериться, что они соответствуют ID пользователя и группы на хосте. В вашем случае вы используетеuid=1000,gid=1000
, что корректно, однако попробуйте добавитьdmode=775,fmode=775
к вашему монтированию для явного указания прав доступа к директориям и файлам, что может помочь. -
Права доступа и временные изменения: В некоторых реализациях
vboxsf
временные изменения прав могут происходить при выполнении скриптов, особенно если они запускаются в фоновом режиме или черезexec
. Проверяйте, не влияют ли другие процессы на права файла во время его выполнения.
3. Отличия в настройках
Сравнив настройки с вашим дистрибутивом Endeavour, можно заметить, что группа пользователей автологина (autologin
) в одной системе и ваше имя пользователя (me
) в другой может оказывать влияние на поведение монтирования.
- Разные идентификаторы: Возможно, что различные настройки групп, используемые в вашем openSUSE и Endeavour, приводят к разному поведению. Попробуйте изменить группу монтируемого каталога на автологин, если это возможно. Например, команда:
sudo chown :autologin /mnt/g/public_html
может помочь.
4. Рекомендации
- Эксперименты с параметрами монтирования: Попробуйте следующие варианты монтирования:
mount -t vboxsf -o uid=1000,gid=1000,dmode=775,fmode=775 public_html /mnt/g/public_html
-
Проверьте наличие обновлений: Убедитесь, что у вас установлены последние версии обоих VirtualBox и расширений Guest Additions для Linux. Обновления могут содержать исправления, которые устранить подобные проблемы.
-
Создайте временные скрипты: Если у вас есть возможность, создайте простые тестовые сценарии с минимальными функциями и проверьте их поведение. Это поможет сузить круг возможных причин.
-
Логи системных ошибок: Просмотрите системные логи (
/var/log/syslog
илиdmesg
), чтобы обнаружить какие-либо ошибки или предупреждения, которые могли бы оказать влияние на поведение файловой системы.
Заключение
Если ни один из предложенных вариантов не решит вашу проблему, возможно, стоит обратиться к документации VirtualBox или на специализированные форумы. Проблема может являться багом в версии openSUSE Tumbleweed или конфигурации VirtualBox. Для дальнейшего анализа могут потребоваться переменные окружения, такие как LS_COLORS
, которые могут также влиять на визуализацию прав доступа в командной строке.