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


87

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

sudo mount -t vboxsf windows_share /media/windows_share

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

Ответы:


109

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

1. Смонтировать с помощью fstab

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

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

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

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

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

2. Крепление с помощью Virtual Box «автоматический монтаж»:

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

введите описание изображения здесь

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


1
Как изменить каталог монтирования и префикс монтирования? Вы запускаете некоторые команды терминала в ОС HOST или в ОС GUEST?
CMCDragonkai

12
Эта функция требует, чтобы служба «virtualbox-guest-utils» была запущена, а в Ubuntu 14.04 эта служба запускается позже, чем монтируются файловые системы. Это является причиной ошибки «устройство не найдено» при монтировании
общих

1
@garromark, моя единственная идея - создать сценарий выскочки, который довольно прост. Другой вариант - поместить ту же запись в fstab, но добавить «noauto», чтобы вы просто монтировали ее вручную.
Колыпто

4
@kolypto, спасибо, что вернулся ко мне. На самом деле я нашел два конкурирующих решения, только одно из которых работало для меня: Вариант 1) (Работал для меня) - это, как вы сказали, включить noautoопции fstab, а затем, как правило, монтировать в сценарии запуска (например,. профиль), вариант 2) главная проблема в том, что vboxsf не загружается до запуска fstab, добавьте vboxsfфайл /etc/modules, попросив ядро ​​загрузить модуль до запуска fstab. Может быть, это поможет кому-то еще.
Гарромарк

6
пожалуйста, не забудьте добавить своего пользователя в группу vboxsf. Вы можете обратиться к askubuntu.com/questions/79565/add-user-to-existing-group
chinloong

26
  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


4
Это единственный способ, который я нашел для работы, пробовал RC.Local с помощью обычной команды монтирования, пробовал FSTAB, пробовал Crontab с скриптом. Огромное спасибо !!
FreeSoftwareServers

2
Это сработало и для меня (в отличие от принятого ответа, не совсем понятно, почему). Так что большое спасибо от меня! :)
отображаемое имя отсутствует

4
Работал на меня. Я редактировал /etc/rc.localс этим mount -t vboxsf [-o OPTIONS] sharename mountpoint.
неврит

1
Для аргументов и для отражения случая виртуальной коробки: я использовал это при запуске sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointи в итоге поместил в /etc/rc.local следующее, чтобы это работало: mount -t vboxsf windows_share /home/dev/shared/mount_pointгде dev - мой пользователь, FYI / etc / fstab также работает!
MediaVince

1
Ваш ответ сработал для меня, но каталоги монтируются как root. Я изменил mountкоманду в rc.localсценарий , чтобы включить мой идентификатор пользователя ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Если кто-то ищет учебник о том, как включить rc.localUbuntu 17.04, это сработало для меня. PPS Мне не нужно было включать vboxsf в /etc/modules.
Майк Витти,

5

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

  1. Регистрация в меню «Общие папки» графического интерфейса Virtualbox необходимого каталога, но НЕ его автоматического монтирования или постоянного монтирования из Virtualbox. В противном случае директория хоста монтируется пользователем root, и доступ к ней для пользователей без полномочий 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]/
    

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


Вы когда-нибудь находили обходной путь noauto?
Йорген Сигвардссон

Это единственное решение, которое сработало для меня. Но кроме того, мне также пришлось добавить «vboxsf» в / etc / modules, чтобы убедиться, что .profile не запускал команды монтирования до того, как vboxsf будет готов.
huyz

вместо использования sudo добавьте 'user' к опции fstab, и любой пользователь сможет смонтировать файловую систему
Lars Nordin

см. pclosmag.com/html/issues/200709/page07.html для получения информации об обновлении fstab, комментарии здесь были только частично полезны. Четвертый столбец в fstab - это список параметров, разделенных запятыми, добавьте пользователя (uid = xxx) в этот список, например, noauto, uid = 1000, gid = 1000
qodeninja

Между rw, noauto есть пробел, который приводит к ошибке разбора. без
бланка

4

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

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

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

Для чистого монтажа - без дублирующих каталогов , ни необходимости «Auto-Mount» - вам нужно использовать Systemd в монтировании и автоматическое монтирование директив. Для этого создайте две записи с /usr/lib/systemd/system/именами в соответствии с желаемой точкой монтирования, например, чтобы соответствовать точке монтирования fstab, над которой они будут названы my_mount-src_host.mountи содержать:

[Unit]
Description=VirtualBox shared "src" folder

[Mount]
What=src
Where=/my_mount/src_host 
Type=vboxsf
Options=defaults,noauto,uid=1000,gid=1000

и my_mount-src_host.automount:

[Unit]
Description=Auto mount shared "src" folder

[Automount]
Where=/my_mount/src_host
DirectoryMode=0775

[Install]
WantedBy=multi-user.target

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

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

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

sudo systemctl start  my_mount-src_host.mount

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


В Ubuntu 18.04 ваше первое решение с comment=systemd.automountопцией работает также без проверки Automount VBox. Я боролся в течение нескольких дней, прежде чем найти ваше решение, спасибо!
HubertL

Рад слышать - я обновил свой ответ, чтобы отразить ваши выводы.
Пьер

Этот работал на Debian 9, другие - нет.
cslotty

3

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

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

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0

Brilliant! Благодарю. После борьбы с другими решениями это сработало впервые!
Норберт Норбертсон

Мне пришлось добавить sleep 2перед установкой устройства.
Адриано П

2

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

#!/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 1
fi

# 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 2
fi

declare EVENT=          # This set the ACTION: -m OR -u
declare -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}")
            ;;
    esac
done
unset 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}' array
for 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 DEST
done
unset drive

unset EVENT
unset DRIVES
exit 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

И это все!


2

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


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

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

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

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

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

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


rc.local в принятом ответе был удален в недавнем выпуске Ubuntu. Это альтернативное решение работает :)
пользователь shonky linux

0

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

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

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

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


0

У меня возникла проблема, из-за которой я мог видеть общую папку, но в ней не было файлов. Итак, я сделал хак, похожий на то, что было показано выше:

Я удостоверился, что мой пользователь был в правильной группе (группах), и что в fstab была запись для монтирования общего ресурса, и что права были установлены правильно, и что автоматическое монтирование было включено в настройках VirtualBox, но все еще нет файлы, которые можно увидеть.
Поэтому я открыл приложение Startup Applications в графическом интерфейсе Ubuntu 18.04 и создал задачу, которая просто запускала «sudo mount -a» прямо при запуске. По какой-то причине общая папка не монтировалась правильно, когда fstab автоматически анализировался при загрузке, поэтому перемонтирование всего, казалось, решило проблему. Теперь я могу видеть файлы в общей папке.


0

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

То, что работало, было установить супервизор и запустить скрипт на Python.

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

apt-get install supervisor

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

import subprocess
import os
import time

shared_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_folder
if 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.py directory=/home/ubuntu process_name=%(program_name)s_%(process_num)s numprocs=1 numprocs_start=0 autostart=true autorestart=true startsecs=1 startretries=3 exitcodes=0,2 stopsignal=TERM stopwaitsecs=10 ;user=pavelp redirect_stderr=true stdout_logfile=/var/log/supervisor/qlistener-stdout.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 stdout_capture_maxbytes=0 stdout_events_enabled=false stderr_logfile=/var/log/supervisor/qlistener-stderr.log stderr_logfile_maxbytes=50MB stderr_logfile_backups=10 stderr_capture_maxbytes=0 stderr_events_enabled=false environment=APPLICATION_ENV=development serverurl=AUTO

открытый руководитель

sudo supervisorctl

читать конфигурацию

reread

добавить конфигурацию

add shared_folders


0

(В моем случае, моей операционной системой является 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.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.