Як змонтувати спільну папку VirtualBox при запуску?


87

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

sudo mount -t vboxsf windows_share /media/windows_share

де windows_share - це ім'я, яке я створив за допомогою Virtualbox. Але щоразу, коли я запускаю Ubuntu, він просить у мене passwd, оскільки йому потрібен 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виконайте індивідуальне налаштування (спочатку слід створити каталог для точки монтажу). Перегляньте манпайн для монтажу <options>. Однією з можливостей є встановлення за допомогою defaultsабо надання конкретних параметрів кріплення (наприклад, rw, suid, exec, auto, users).

У деяких системах vboxsfмодуль ядра ще не завантажений під час fstabзчитування під час завантаження. Тоді це може допомогти додати vboxsfмодуль ядра до /etc/modules.

Деяким системам може знадобитися опція comment=systemd.automountу своєму записі fstab ( джерело ).

2. Кріплення з віртуальною коробкою "автоматичне кріплення":

В останніх випусках Virtual Box ми також можемо автоматично монтувати спільні папки під час створення:

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

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


1
Як ви змінюєте каталог mount і префікс mount? Ви виконуєте якісь термінальні команди в ОС HOST або ОСОБАГО?
CMCDragonkai

12
Ця функція вимагає, щоб послуга "virtualbox-guest-utils" була запущена, а в Ubuntu 14.04 ця послуга запускається пізніше, ніж встановлені файлові системи. Це причина помилки "пристрій не знайдено" під час монтажу акцій через fstab
kolypto

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 w / script. Величезне спасибі !!
FreeSoftwareServers

2
Це теж працювало для мене (на відміну від прийнятої відповіді, не зовсім впевненого, чому). Тож велике спасибі від мене! :)
відображення-ім'я-відсутнє

4
Працювали для мене. Я редагував /etc/rc.localце mount -t vboxsf [-o OPTIONS] sharename mountpoint.
неврит

1
Заради аргументів та для відображення випадку virtualbox: я раніше це робив на початку 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. Реєстрація з меню спільних папок GUI Virtualbox потрібного каталогу, але НЕ автоматизує його або постійне встановлення з Virtualbox. В іншому випадку хост dir змонтований під корінь, і це неприємні користувачі, які навіть отримують доступ від групи адміністратора, боляче.

  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 / module, щоб переконатися, що .profile не запустив команди mount перед тим, як vboxsf буде готовий.
хуйз

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

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

Між rw є пробіл, noauto, що призводить до помилки розбору. без бланка зразок працював для мене
weberjn

4

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

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

Однак для того, щоб вище працювати для деяких систем, вам потрібно встановити прапорець "Автоматичне кріплення" у діалоговому вікні "Спільні папки" VirtualBox>> Додати, що означає, що у вас є кілька повторюваних версій каталогу.

Для більш чистого кріплення - без дублікатів каталогів або необхідності автоматичного монтажу - вам потрібно використовувати директиви щодо монтажу системи та автоматичного встановлення . Для цього створіть дві записи з /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опцією також працює без встановленої автоматичної 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

Блискуче! Дякую. Після боротьби з іншими рішеннями це спрацювало вперше!
Норберт Норбертсон

Мені довелося додати a 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 там, де ви хочете її встановити. У цьому випадку спершу я створив додаток папок під монтом (додаток mkdir).

Щоб увімкнути ваш cron як корінь (для
названого файлу вище) crontab cronjobs

Переконайтесь, що cron активний:
crontab -l

перезавантажте і він буде встановлений. Сон на 15 секунд дає достатньо часу, щоб все було готове до кріплення.


rc.local у прийнятій відповіді було видалено в нещодавньому випуску Ubuntu. Це альтернативне рішення працює :)
приголомшливий користувач Linux

0

Нещодавно я стикався з цією темою, коли після оновлення до Ubuntu LTS-18 (і жодних змін до VirtualBox, а також після перевстановлення розширень і бла-де-бла), автоматичне кріплення перестало працювати. Ці sf_xxxкаталоги були представлені в , /media/але жоден з них не був на насправді встановлені.

Спроби встановити їх /etc/fstab(як це запропоновано власною документацією VirtualBox) не спрацювали: завантаження не вдалося перейти в "аварійний режим", навіть коли я змінив /etc/modulesфайл.

Що ж в кінцевому підсумку вийшло - хоча я вважаю це як stinkin 'хак - це crontabтрюк , описаний вище.

До сьогоднішнього дня я поняття не маю "що зламалося".


0

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

Я переконався, що мій користувач був у правильній групі (групах), і що в ньому є запис у fstab для монтажу спільного доступу, і що дозволи були встановлені правильно, і що автоматично встановити ввімкнено в налаштуваннях VirtualBox, але все ще немає файли, які потрібно побачити.
Тож я відкрив додаток програм для запуску в графічному інтерфейсі 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 (потрібен перезапуск)

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.