Jak zamontować folder współdzielony VirtualBox podczas uruchamiania?


87

Mam Ubuntu zainstalowany w Virtualbox. Chcę automatycznie zamontować folder współdzielony VirtualBox w Ubuntu, gdy loguję się w Ubuntu. W moim ~. / Bashrc i ~ / .bash_profile wstawiam następujący wiersz:

sudo mount -t vboxsf windows_share /media/windows_share

gdzie windows_share to nazwa, którą utworzyłem za pomocą Virtualbox. Ale za każdym razem, gdy uruchamiam Ubuntu, prosi mnie o passwd, ponieważ potrzebuje sudo. Czy jest tak czy inaczej, aby automatycznie montować udział Windows bez wprowadzania hasła przy każdym logowaniu?

Odpowiedzi:


109

Aby zawsze montować „folder współdzielony” Virtual Box podczas uruchamiania gościa Ubuntu, mamy dwie opcje. To zależy od osobistych preferencji, która opcja działa najlepiej w naszym otoczeniu.

1. Zamontuj za pomocą fstab

Aby zamontować folder współdzielony za pomocą vboxsfsystemu plików dostarczonego z dodatkami gości, musimy najpierw upewnić się, że spełnione są wymagania wstępne . Następnie możemy umieścić następujący wiersz w naszym etc/fstabpliku:

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

Zastąp name_of_sharei /path/to/mountpointkonfiguracją indywidualną (najpierw należy utworzyć katalog dla punktu montowania). Zobacz stronę podręcznika mount <options>. Jedną z możliwości jest montaż za pomocą defaultslub podanie określonych opcji montażu (np rw, suid, exec, auto, users.).

W niektórych systemach vboxsfmoduł jądra nie jest jeszcze ładowany w momencie fstabodczytu przy rozruchu. Może to pomóc w dołączeniu vboxsfmodułu jądra do /etc/modules.

Niektóre systemy mogą potrzebować opcji comment=systemd.automountwe wpisie fstab ( źródło ).

2. Zamontuj za pomocą Virtual Box „automatyczny montaż”:

W najnowszych wydaniach Virtual Box możemy również automatycznie montować foldery współdzielone podczas tworzenia:

wprowadź opis zdjęcia tutaj

Po ponownym uruchomieniu gościa ten folder współdzielony zostanie podłączony do katalogu gości /media/<username>/sf_<name_of_share>dostępnego dla wszystkich użytkowników, którzy zostali członkami grupy vboxsf.


1
Jak zmienić katalog montowania i prefiks montowania? Czy uruchamiasz niektóre polecenia terminala w systemie HOST lub GUEST?
— CMCDragonkai

12
Ta funkcja wymaga uruchomienia usługi „virtualbox-guest-utils”, a na Ubuntu 14.04 usługa ta uruchamia się później niż po zamontowaniu systemów plików. To jest przyczyna błędu „nie znaleziono urządzenia” podczas montowania udziałów przez fstab
— kolypto

1
@garromark, moim jedynym pomysłem jest stworzenie skryptu upstart, który jest dość prosty. Inną opcją jest umieszczenie tego samego wpisu fstab, ale dodanie „noauto”, więc wystarczy zamontować go ręcznie.
— kolypto

4
@kolypto, dzięki za skontaktowanie się ze mną. Znalazłem dwa konkurujące ze sobą rozwiązania, z których tylko jedno działało dla mnie: Opcja 1) (działało dla mnie), to, jak powiedziałeś, wstawianie noautoopcji fstab, a następnie później montowanie zwykle w skrypcie startowym (np. profil), opcja 2) głównym problemem jest to, że vboxsf nie jest ładowany przed uruchomieniem fstab, dołącz vboxsfdo pliku /etc/modules, prosząc jądro o załadowanie modułu przed uruchomieniem fstab. Może to pomoże komuś innemu.
— garromark

6
pamiętaj, aby dodać użytkownika do grupy vboxsf. Możesz odnieść się do askubuntu.com/questions/79565/add-user-to-existing-group
— chinloong

26
  1. Edytować /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Przed exit 0typem:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Zapisać

  4. (Opcjonalnie) Utwórz skrót do pulpitu lub folderu domowego:

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

Aby uruchomić bez błędów, takich jak naciśnięcie S, aby pominąć montaż lub naciśnij M, aby ręcznie naprawić, może być konieczne usunięcie wpisu wfstab


4
Jest to JEDYNY sposób, w jaki znalazłem działanie, wypróbowałem RC.Local za pomocą zwykłego polecenia montowania, wypróbowałem FSTAB, wypróbowałem Crontab w / script. Ogromne dzięki !!
— FreeSoftwareServers

2
To również działało dla mnie (w przeciwieństwie do przyjętej odpowiedzi, nie jestem pewien, dlaczego). Wielkie dzięki ode mnie! :)
— display-name-is-missing

4
Pracował dla mnie. Redagowałem /etc/rc.localto mount -t vboxsf [-o OPTIONS] sharename mountpoint.
— neuryt

1
Ze względu na argumenty i dla odzwierciedlenia przypadku virtualbox: robiłem to przy starcie sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointi kończyłem umieszczanie następującego mount -t vboxsf windows_share /home/dev/shared/mount_pointpliku w /etc/rc.local, aby działało: gdzie dev jest moim użytkownikiem, FYI / etc / fstab również działa!
— MediaVince

1
Twoja odpowiedź zadziałała dla mnie, ale katalogi są montowane jako root. Zmieniłem mountpolecenie w rc.localskrypcie to moje ID użytkownika ( 2000) mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Jeśli ktoś szuka samouczka, jak włączyć rc.localUbuntu 17.04, to zadziałało dla mnie. PPS Nie musiałem dołączać vboxsf do /etc/modules.
— Mike Wittie

5

Po wyczerpującym poranku wypróbowanie wszystkich powyższych elementów w Ubutntu 16.04 bezskutecznie działającym w Virtualbox 5.0.20 (szczególnie rozczarowany, że rozwiązanie rc.local nie działa), działało:

  1. Rejestrowanie z menu folderów współdzielonych interfejsu GUI Virtualbox wymaganego katalogu, ale NIE jego automatyczne podłączanie lub stałe montowanie z Virtualbox. W przeciwnym razie katalog hosta jest montowany przez użytkownika root, co utrudnia dostęp użytkownikom innym niż root nawet z grupy administracyjnej.

  2. dodając prosty wpis w fstab:

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

    noautoOpcja Uwaga - w przeciwnym razie boot loader nie powiedzie się, jak zauważono.

  3. Dodaj odpowiedni wiersz /etc/sudoersw następujący sposób, używając polecenia visudo z systemu-gościa:

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

Umożliwi to procesom innym niż root specyficzne zamontowanie tego (ponieważ fstab nie może zamontować z opcją „użytkownik” ...)

  1. Dodaj odpowiedni wiersz do .profile użytkownika:

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

Teraz wybrany podkatalog hosta jest gotowy do instalacji dla wybranego użytkownika po zalogowaniu!


Czy kiedykolwiek znalazłeś obejście noauto?
— Jörgen Sigvardsson

To jedyne rozwiązanie, które działało dla mnie. Ale dodatkowo musiałem dodać „vboxsf” do / etc / modułów, aby upewnić się, że .profile nie uruchomił poleceń montowania, zanim vboxsf nie będzie gotowy.
— huyz

zamiast używać sudo, dodaj „user” do opcji fstab, a każdy użytkownik może zamontować system plików
— Lars Nordin

zobacz pclosmag.com/html/issues/200709/page07.html, aby uzyskać informacje na temat aktualizacji fstab, komentarze tutaj były tylko częściowo pomocne. Czwarta kolumna w fstab jest listą opcji oddzielonych przecinkami dodaj użytkownika (uid = xxx) do tej listy, np. Noauto, uid = 1000, gid = 1000
— qodeninja

Pomiędzy rw, noauto występuje spacja, co powoduje błąd analizy. bez próby ślepej próbka zadziałała dla mnie
— weberjn

4

Dla nowszych Systemd systemów opartych trzeba podejść alternatywnych - Najprostsza jest jednym wymieniony w innej odpowiedzi na inne pytanie - co w zasadzie mówi, że trzeba dodać specjalną commentopcję do /etc/fstabwpisu:

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

Jednak aby powyższe działało w niektórych systemach, musisz zaznaczyć pole „Auto-mount” w folderze Shared Folders VirtualBox-> Dodaj, co oznacza, że ​​możesz skończyć z kilkoma zduplikowanymi podłączeniami katalogu.

Dla czystsze montażu - bez duplikatów katalogów ani potrzeby "Auto-mount - trzeba użyć Systemd za montowania oraz montowanie dyrektyw. Aby to zrobić, utwórz dwa wpisy w /usr/lib/systemd/system/nazwie po żądanym punkcie montowania, np. W celu dopasowania powyżej punktu montowania fstab, będą one nazwane my_mount-src_host.mounti będą zawierać:

[Unit]
Description=VirtualBox shared "src" folder

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

i 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

Następnie muszą włączyć:

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

Będą teraz montowane przy rozruchu. Jeśli chcesz je zamontować natychmiast (pod warunkiem, że foldery udostępnione zostały utworzone), możesz to zrobić:

sudo systemctl start  my_mount-src_host.mount

Zwróć uwagę, że masz katalogi z nieparzystymi nazwami lub myślnikami (-), a następnie użyj przycisku, systemd-escapeaby znaleźć odpowiednio unikaną nazwę.


W systemie Ubuntu 18.04 pierwsze rozwiązanie z comment=systemd.automountopcją działa również bez zaznaczonego Automount VBox. Walczyłem przez kilka dni, zanim znalazłem twoje rozwiązanie, dzięki!
— HubertL

Dobrze słyszeć - zaktualizowałem odpowiedź, aby odzwierciedlić twoje odkrycie.
— Pierz

Ten działał na Debianie 9, inne nie.
— cslotty

3

Próbowałem rozwiązania rc.local, ale nie udało mi się go uruchomić.
Odkryłem jednak, że problem jest związany z folderem, z którego uruchomiono polecenie (nie mam pojęcia, dlaczego). Więc dodałem wiersz, aby zmienić katalog do mojego katalogu domowego przed poleceniem mount, a teraz działa.

Tak więc mój udział w Dropboxsystemie Windows nazywa się , mój punkt podłączenia to /home/jamie/Dropboxmoja nazwa użytkownika jamie, oto co wstawiłem do rc.local:

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

Znakomity! dzięki. Po zmaganiu się z innymi rozwiązaniami zadziałało to po raz pierwszy!
— Norbert Norbertson

Musiałem dodać sleep 2przed montażem urządzenia.
— Adriano P

2

Robię to w bardzo podobnym trybie, który został zaproponowany powyżej, ale te skrypty tworzą wymagane i montują lub odmontowują folder współdzielony za pomocą następującego skryptu:

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

Zapisz to jako /opt/.scripts/VBoxShared.sh.

Upewnij się, że można to uruchomić. Na typ skorupy:

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

Teraz dodajemy wiersz uruchamiający ten skrypt rc.local:

sudo nano /etc/rc.local

i dodajemy te linie przed ostatnią linią ( exit 0):

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

Zapisz ( CtrlO) i zamknij ( CtrlX)

W tym momencie montujemy automatycznie wszystkie foldery współdzielone wymienione <SharedFolder>podczas uruchamiania.

Aby odmontować, potrzebujemy tylko typu:

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

#!/bin/bash

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

exit 0

Zapisz ( CtrlO) i zamknij ( CtrlX)

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

I to wszystko!


2

Oto działające rozwiązanie.

Jako root (IE sudo su) Przejdź do katalogu domowego (cd ~) i utwórz plik cron:
vi cronjobs
Dodaj następujący
@reboot sleep 15; mount -t vboxsf app / mnt / app

Zapisz plik

Uwaga: zamień aplikację na nazwę folderu współdzielonego i / mnt / app w miejscu, w którym chcesz ją zamontować. W tym przypadku najpierw utworzyłem aplikację folderów pod mount (aplikacja mkdir).

Aby włączyć crona jako root (dla powyższej nazwy pliku)
crontab cronjobs

Upewnij się, że cron jest aktywny:
crontab -l

uruchom ponownie i zostanie zamontowany. 15-sekundowy sen zapewnia wystarczająco dużo czasu na przygotowanie się do montażu.


rc.local w zaakceptowanej odpowiedzi został usunięty w najnowszej wersji Ubuntu. To alternatywne rozwiązanie działa :)
— shonky użytkownik Linux

0

Ostatnio napotkałem ten wątek, gdy po aktualizacji do Ubuntu LTS-18 (i nie wprowadzeniu żadnych zmian w VirtualBox, a także po ponownej instalacji rozszerzeń i bla-de-blaha), auto-mount przestało działać. Te sf_xxxkatalogi były obecne /media/, ale żaden z nich nie zostały właściwie zamontowane.

Próby zamontowania ich /etc/fstab(jak sugeruje własna dokumentacja VirtualBox) nie działały: rozruch nie powiódł się w „trybie awaryjnym”, nawet gdy zmodyfikowałem /etc/modulesplik.

Co było w końcu działać - chociaż uważam go jako stinkin' Hack - to crontabtrik opisany powyżej.

Do dziś nie mam pojęcia „co się zepsuło”.


0

Miałem problem z widocznym folderem współdzielonym, ale nie było w nim żadnych plików. Więc zrobiłem włamanie podobne do tego, co pokazano powyżej:

Upewniłem się, że mój użytkownik jest w prawidłowej grupie (grupach) i że w fstab jest wpis dotyczący montowania udziału oraz że uprawnienia zostały ustawione poprawnie, a automatyczne podłączanie było włączone w ustawieniach VirtualBox, ale nadal nie pliki do obejrzenia.
Więc otworzyłem aplikację Startup Applications w GUI Ubuntu 18.04 i stworzyłem zadanie, które uruchamiało „sudo mount -a” zaraz przy starcie. Z jakiegokolwiek powodu folder współdzielony nie był poprawnie montowany, gdy fstab był automatycznie analizowany podczas rozruchu, więc ponowne zamontowanie wszystko wydawało się rozwiązać problem. Teraz widzę pliki w udziale.


0

Wypróbowałem wszystkie rozwiązania tutaj i żadne nie zadziałało.

Udało się zainstalować nadzorcę i uruchomić skrypt w języku Python.

zainstaluj nadzorcę

apt-get install supervisor

skrypt Pythona (mój był w /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)

utwórz plik konfiguracyjny dla przełożonego

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

otwarty nadzór

sudo supervisorctl

przeczytaj konfigurację

reread

dodaj konfigurację

add shared_folders


0

(W moim przypadku moim systemem operacyjnym jest Mac OS X, a moim systemem operacyjnym gościa jest Ubuntu)

Żadne z powyższych rozwiązań i rozwiązania wymienione tutaj i tutaj nie działały dla mnie. Wystąpił problem z nimi wszystkimi.

Oto, co w końcu zrobiłem, aby rozwiązać problem:

1- Utworzyłem folder współdzielony w interfejsie VirtualBox, wskazując folder o nazwie VMSharesw moim Mac OS, nazywając gowd

2- Następnie zainstalowałem narzędzia do dodawania gości Ubuntu (wymagane ponowne uruchomienie)

3- Następnie utworzyłem folder w moim systemie-gościu jako punkt montowania (w moim przypadku była to nazwa /home/fashid/host)

4- Następnie pobiegłem:

sudo VBoxControl sharedfolder list

To było polecenie, aby zapewnić, że udział jest dostępny dla systemu-gościa, tymczasem nadal musisz go zamontować w systemie-gościu, aby był on faktycznie dostępny.

Pokaże coś takiego:

Shared Folder mappings (1):
01 - VMShares

To jest podstęp! Pokazuje rzeczywistą nazwę, którą należy wprowadzić poniżej polecenia, aby ją zamontować i udostępnić w systemie-gościu:

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

Czy zrozumiałeś o co chodzi? Nigdzie później nie używałem wd. W kroku 3 musiałem pobrać rzeczywistą nazwę folderu (hosta) zamiast dowolnej nazwy, którą przypisałem w oknie dialogowym GUI.

Powyższe kroki rozwiązały mój problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.