Как смонтировать общую папку VirtualBox при запуске?

У меня установлена Ubuntu в Virtualbox. Я хочу автоматически смонтировать свою общую папку VirtualBox в Ubuntu при входе в Ubuntu. Я поместил следующую строку в свои ~./bashrc и ~/.bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

где windows_share - это имя, которое я создал с помощью Virtualbox. Но каждый раз, когда я запускаю свой Ubuntu, он запрашивает у меня пароль, так как ему нужен sudo. Есть ли какой-нибудь способ автоматического подключения общего ресурса Windows без ввода пароля каждый раз, когда я вхожу в систему?

Чтобы всегда монтировать виртуальную коробку "общая папка" при загрузке гостевой Ubuntu, у нас есть два варианта. Какой вариант лучше всего подходит в наших условиях, зависит от личных предпочтений.

1. Монтируйте с помощью fstab

Для подключения общей папки с помощью vboxsf файловая система, снабженная Дополнения для гостей сначала нам нужно убедиться предварительные условия выполнены. Тогда мы можем поместить следующую строку в наш etc/fstab файл:

<name_of_share>   /path/to/mountpoint   vboxsf   <options>  0   0

Заменять name_of_share и /path/to/mountpoint с вашей индивидуальной настройкой (сначала необходимо создать каталог для точки монтирования). Смотрите справочную страницу для mount <options>. Одна из возможностей состоит в том, чтобы монтировать с defaults, или указать конкретные параметры монтирования (например rw, suid, exec, auto, users).

В некоторых системах vboxsf модуль ядра в данный момент еще не загружен fstab считывается при загрузке. Затем это может помочь добавить vboxsf модуль ядра для /etc/modules.

Некоторым системам может потребоваться опция comment=systemd.automount в их записи в fstab (источник).

2. Крепление с помощью виртуальной коробки "автоматический монтаж";:

В последних версиях Virtual Box мы также можем автоматически монтировать общие папки при создании:

enter image description here

После перезагрузки гостевой системы эта общая папка будет подключена к гостевой директории /media/<username>/sf_<name_of_share> доступен для всех пользователей, которые стали членами группы vboxsf.

  1. Редактировать /etc/rc.local

    sudo -H gedit /etc/rc.local
  2. До exit 0 тип:

    mount.vboxsf windows_share /media/windows_share vboxsf
  3. Сохранить

  4. (Необязательно) Создайте ярлык для рабочего стола или домашней папки:

    ln -s /media/windows_share /home/freddy/Desktop

Для того, чтобы загрузиться без ошибок, таких как нажатие S чтобы пропустить монтирование или нажать M чтобы восстановить вручную, вам, возможно, придется удалить свою запись в fstab

Для более новых systemd основанные системы, вам нужны альтернативные подходы - самый простой из них упоминается в другом ответ на другой вопрос - который в основном говорит о том, что вам нужно добавить специальный comment вариант для /etc/fstab вход:

src     /my_mount/src_host  vboxsf  auto,rw,comment=systemd.automount 0 0

>Однако для того, чтобы вышеуказанное работало в некоторых системах, вам необходимо установить флажок "Автоматическое монтирование" в диалоге Добавления общих папок VirtualBox, что означает, что в итоге вы можете получить несколько дубликатов монтирования каталога.

Для более чистого монтирования - без дублирования каталогов и без необходимости "автоматического монтирования" - вам необходимо использовать systemd's монтировать и автоматический монтаж директивы. Для этого создайте две записи в /usr/lib/systemd/system/ названные в честь вашей желаемой точки монтирования, например, чтобы соответствовать указанной выше точке монтирования fstab, они будут названы my_mount-src_host.mount и содержат:

[Unit]Description=VirtualBox shared "src" folder[Mount]What=srcWhere=/my_mount/src_host Type=vboxsfOptions=defaults,noauto,uid=1000,gid=1000

и my_mount-src_host.automount:

[Unit]Description=Auto mount shared "src" folder[Automount]Where=/my_mount/src_hostDirectoryMode=0775[Install]WantedBy=multi-user.target

Тогда им нужно включить:

sudo systemctl enable  my_mount-src_host.automountsudo systemctl enable  my_mount-src_host.mount

Теперь они будут монтироваться при загрузке. Если вы хотите смонтировать их немедленно (при условии, что общие папки были созданы), вы можете сделать это:

sudo systemctl start  my_mount-src_host.mount

Примечание. Если у вас есть каталоги с нечетными именами или тире (-) в них, то используйте systemd-escape чтобы найти подходящее экранированное имя.

После изнурительного утра, когда я безуспешно пытался выполнить все вышеперечисленное в Ubutntu 16.04, запущенном в Virtualbox 5.0.20 (особенно разочарован тем, что решение rc.local не сработало), оно сработало:

  1. Регистрация в меню общих папок графического интерфейса Virtualbox требуемого каталога, но БЕЗ его автоматического монтирования или постоянного монтирования из Virtualbox. В противном случае каталог хоста монтируется root, и доступ к нему некорневым пользователям затруднен даже из группы администраторов.

  2. добавление простой записи в fstab:

    [VirtuablBoxNameOfMount] /media/[guestOSuser]/[mountSubdir]    vboxsf   rw, noauto   0     1

    Примечание noauto опция - в противном случае загрузчик завершается сбоем, как было отмечено.

  3. Добавьте соответствующую строку в /etc/sudoers следующим образом, используя команду visudo из гостевой ОС:

    ALL ALL = NOPASSWD: /bin/mount /media/[guestOSuser]/[mountSubdir]/

Это позволит некорневым процессам специально монтировать это (поскольку fstab не может монтироваться с помощью опции 'user' ...)

  1. Добавьте соответствующую строку в .profile пользователя:

    sudo mount /media/[guestOSuser]/[mountSubdir]/

Теперь выбранный поддиректор хоста готов к подключению для выбранного пользователя при входе в систему!

Я попробовал решение rc.local, но не смог заставить его работать.
Однако я обнаружил, что проблема, похоже, связана с папкой, из которой вы запускаете команду (понятия не имею, почему). Поэтому я добавил строку для изменения каталога в свою домашнюю папку перед командой монтирования, и теперь это работает.

Итак, мой общий ресурс Windows называется Dropbox, моя точка монтирования - это /home/jamie/Dropbox, мое имя пользователя - jamie, это то, что я поместил в rc.local:

cd /home/jamiemount.vboxsf /home/jamie/Dropbox Dropbox vboxsfexit 0

Я делаю это в очень похожем режиме, который был предложен выше, но эти скрипты создают требуемую и монтируют или размонтируют общую папку с помощью следующего скрипта:

#!/bin/bash## Mount automatically even shared folder on startup and unmount it at shutdown.## VirtualBox (c) 2015 by Oracle Systems Inc.###### Check user privileges.if [[ $EUID -ne 0 ]]; then    echo -e "This script must run at ROOT user!" \        "\nPlease, use 'sudo', 'visudo' or any other to run it."    exit 1fi# Check paramas from caller.if [[ $# -eq 0 ]]; then    echo -e "Auto-Mount selected shared folder of VirtualBox machine." \        "\nUsage:" \        "\n    VBoxShared <drive_one> <drive_two> <...>"    exit 2fideclare EVENT=          # This set the ACTION: -m OR -udeclare -a DRIVES=()# Processing each param:for arg in "$@"; do    case "$arg" in        "-m"|"--mount")            if [[ -z ${EVENT} ]]; then                EVENT=-m            else                exit 318        # parameters at conflict!            fi            ;;        "-u"|"--umount")            if [[ -z ${EVENT} ]]; then                EVENT=-u            else                exit 318        # parameters at conflict!            fi            ;;        *)            DRIVES=("${DRIVES[@]}" "${arg}")            ;;    esacdoneunset arg[[ -z ${EVENT} ]] && exit 1             # ERROR: No se ha establecido la acción a realizar.[[ "${#DRIVES[@]}" -gt 0 ]] || exit 1   # ERROR: No se han indicado las unidades a manejar.# Process each shared folder stored on '${DRIVES}' arrayfor drive in "${DRIVES[@]}"; do    DEST="/media/sf_${drive}"    case "${EVENT}" in        "-m")            [[ -d ${DEST} ]] || (mkdir ${DEST} && chown root:vboxsf ${DEST} && chmod 770 ${DEST})            mount -t vboxsf ${drive} ${DEST}            ;;        "-u")            if [[ `df --output=target | grep "${DEST}"` > /dev/null ]]; then                umount -f ${DEST}                rm -rf "${DEST}"            fi            ;;    esac    unset DESTdoneunset driveunset EVENTunset DRIVESexit 0

Сохраните его как /opt/.scripts/VBoxShared.sh.

Убедитесь, что это можно запустить. По типу оболочки:

sudo chmod a+x /opt/.scripts/VBoxShared.sh

Теперь мы добавляем строку, которая запускает этот скрипт на rc.local:

sudo nano /etc/rc.local

и мы добавляем эти строки перед последней строкой (exit 0):

. /opt/.scripts/VBoxShared.sh --mount <SharedFolder1> [<SharedFolder2> <SharedFolder3> ...]

Сохранить (CtrlO) и закройте его (CtrlX)

На этом этапе мы автоматически монтируем все общие папки, перечисленные на <SharedFolder> при запуске.

Чтобы размонтировать его, нам нужно только ввести:

sudo nano /etc/rc6.d/K99-vboxsf-umount.sh

#!/bin/bash. /opt/.scripts/VBoxShared --umount <SharedFolder1> [<SharedFolder2> <SharedFolder3> ...]exit 0

Сохранить (CtrlO) и закрыть (CtrlX)

sudo chmod a+x /etc/rc6.d/K99-vboxsf-auto.sh

И это все!

Вот рабочее решение.

Как root (Т.Е. sudo su) Перейдите в домашнюю папку (cd ~) и создайте cron-файл:
vi закадычные друзья
Добавьте следующее
@reboot sleep 15; смонтировать -t vboxsf app /mnt/app

Сохранить файл

Примечание: замените приложение именем вашей общей папки и /mnt/app, куда вы хотите его смонтировать. В этом случае я сначала создал приложение папки в разделе mount (приложение mkdir).

Чтобы включить ваш cron от имени root (для указанного выше имени файла)
crontab cronjobs

Убедитесь, что cron активен:
crontab -l

перезагрузитесь, и он будет смонтирован. 15-секундный сон дает достаточно времени для того, чтобы все было готово к монтажу.

(В моем случае моя хост-ОС - Mac OS X, а моя гостевая ОС - ubuntu)

Ни одно из вышеперечисленных решений и упомянутых решений здесь и здесь сработало на меня. Со всеми ними была проблема.

Вот что я, наконец, сделал, чтобы решить эту проблему:

1- Я создал общую папку в пользовательском интерфейсе VirtualBox, указав на папку с именем VMShares в моей Mac OS, назвав его wd

2- Затем я установил Ubuntu Guest Addition tools (требуется перезагрузка)

3- Затем я создал папку в своей гостевой ОС в качестве точки монтирования (в моем случае имя было /home/fashid/host)

4- Потом я побежал:

sudo VBoxControl sharedfolder list

Это была команда, которая должна была гарантировать, что общий ресурс доступен для гостевой ОС, в то время как вам все равно нужно смонтировать его в вашей гостевой ОС, чтобы сделать его действительно доступным.

Это покажет что-то вроде:

Shared Folder mappings (1):01 - VMShares

В этом весь фокус! Он показывает фактическое имя, которое вам нужно ввести в приведенную ниже команду, чтобы фактически смонтировать его и сделать доступным в вашей гостевой ОС:

sudo mount -t vboxsf VMShares /home/farshid/myshares

Вы поняли, в чем дело? Позже я нигде не использовал wd. На шаге 3 мне нужно было выбрать фактическое имя папки (хоста) вместо произвольного имени, которое я назначил в диалоговом окне GUI.

С помощью описанных выше шагов моя проблема была решена.

Недавно я столкнулся с этой темой, когда после обновления до Ubuntu LTS-18 (и не внося никаких изменений в VirtualBox, а также после переустановки расширений и бла-де-бла), автоматическое крепление перестало работать. То sf_xxx каталоги присутствовали в /media/ но ни один из них на самом деле не был установлен.

Попытки установить их в /etc/fstab (как было предложено в собственной документации VirtualBox) не сработало: загрузка завершилась сбоем в "аварийном режиме", даже когда я изменил /etc/modules файл.

Что сделал в конечном счете работа – хотя я считаю ее вонючей халтурой - это crontab трюк, описанный выше.

По сей день я понятия не имею, "что сломалось".

Я перепробовал здесь все решения, и ни одно из них не сработало.

Что сработало, так это установить supervisor и запустить скрипт на python.

установите супервизор

apt-get install supervisor

скрипт на python (мой был в /home/ubuntu/shared_folders.py )

import subprocessimport osimport timeshared_folder = '/home/ubuntu/shared'file_count = len(os.listdir(shared_folder))mnt_command = 'mount -t vboxsf -o rw,uid=1000,gid=1000 shared-folder ' + shared_folderif file_count == 0:        # mount        subprocess.Popen(mnt_command, shell=True)time.sleep(3600)

создать конфигурационный файл для супервизора

nano /etc/supervisor/conf.d/sharedfolders.conf

[program:shared_folders]command=python shared_folders.pydirectory=/home/ubuntuprocess_name=%(program_name)s_%(process_num)snumprocs=1numprocs_start=0autostart=trueautorestart=truestartsecs=1startretries=3exitcodes=0,2stopsignal=TERMstopwaitsecs=10;user=pavelpredirect_stderr=truestdout_logfile=/var/log/supervisor/qlistener-stdout.logstdout_logfile_maxbytes=50MBstdout_logfile_backups=10stdout_capture_maxbytes=0stdout_events_enabled=falsestderr_logfile=/var/log/supervisor/qlistener-stderr.logstderr_logfile_maxbytes=50MBstderr_logfile_backups=10stderr_capture_maxbytes=0stderr_events_enabled=falseenvironment=APPLICATION_ENV=developmentserverurl=AUTO

откройте supervisorctl

sudo supervisorctl

считывание конфигурации

reread

добавление конфигурации

add shared_folders