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?

tonga
źródło

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.

Takkat
źródło
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

Fred Collins
źródło
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!

Michael Moutoussis
źródło
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ę.

Pierz
źródło
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
Smażone na głębokim tłuszczu
źródło
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!

Banny
źródło
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.

Stephen
źródło
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”.

Mike Robinson
źródł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.

Zepsuty
źródło
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

Eugene Gekhter
źródło
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.

Farshid
źródło