Come montare una cartella condivisa VirtualBox all'avvio?


87

Ho Ubuntu installato in Virtualbox. Voglio montare automaticamente la mia cartella condivisa VirtualBox su Ubuntu quando accedo a Ubuntu. Ho inserito la seguente riga nel mio ~. / Bashrc e ~ / .bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

dove windows_share è il nome che ho creato con Virtualbox. Ma ogni volta che avvio Ubuntu, mi chiede passwd poiché ha bisogno di sudo. Esiste un modo per montare automaticamente la condivisione di Windows senza inserire la password ogni volta che eseguo l'accesso?

Risposte:


109

Per montare sempre una "cartella condivisa" su Virtual Box all'avvio di un guest Ubuntu abbiamo due opzioni. Spetta alle preferenze personali quale opzione funziona meglio nella nostra impostazione.

1. Montare con fstab

Per montare una cartella condivisa usando il vboxsffilesystem fornito con Guest Additions, dobbiamo prima assicurarci che siano soddisfatti i prerequisiti . Quindi possiamo inserire la seguente riga nel nostro etc/fstabfile:

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

Sostituisci name_of_sharee /path/to/mountpointcon la tua configurazione individuale (la directory per il mountpoint deve essere creata per prima). Vedi la manpage per mount <options>. Una possibilità è montare defaultso fornire opzioni di montaggio specifiche (ad es rw, suid, exec, auto, users.).

Su alcuni sistemi il vboxsfmodulo del kernel non è ancora caricato al momento della fstablettura all'avvio. Potrebbe quindi aiutare ad aggiungere il vboxsfmodulo kernel a /etc/modules.

Alcuni sistemi potrebbero aver bisogno di opzioni comment=systemd.automountnella loro voce fstab ( sorgente ).

2. Montaggio con Virtual Box "montaggio automatico":

Nelle recenti versioni di Virtual Box possiamo anche montare automaticamente cartelle condivise alla creazione:

inserisci qui la descrizione dell'immagine

Dopo il riavvio del guest, questa cartella condivisa verrà montata nella directory guest /media/<username>/sf_<name_of_share>accessibile a tutti gli utenti che erano stati membri del gruppo vboxsf.


1
Come si modifica la directory di montaggio e il prefisso di montaggio? Esegui alcuni comandi di terminale nel sistema operativo HOST o nel sistema operativo OSPITE?
CMCDragonkai,

12
Questa funzione richiede che il servizio "virtualbox-guest-utils" sia stato avviato e su Ubuntu 14.04 questo servizio si avvia dopo il montaggio dei filesystem. Questo è il motivo dell'errore "dispositivo non trovato" durante il montaggio delle condivisioni tramite fstab
kolypto,

1
@garromark, la mia unica idea è quella di creare uno script upstart, che è abbastanza semplice. Un'altra opzione è quella di inserire la stessa voce fstab, ma aggiungere "noauto" in modo da montarla manualmente.
Kolypto,

4
@kolypto, grazie per essere tornato da me. In realtà ho trovato due soluzioni concorrenti, una sola delle quali ha funzionato per me: Opzione 1) (Ha funzionato per me), è, come hai detto, inserire noautole opzioni fstab e successivamente montarle in genere in uno script di avvio (come. profilo), Opzione 2) il problema principale è che vboxsf non è stato caricato prima dell'esecuzione di fstab, aggiungi vboxsfal file /etc/modules, chiedendo a kernal di caricare il modulo prima di eseguire fstab. Forse questo aiuterà qualcun altro.
garromark,

6
ricordati di aggiungere il tuo utente al gruppo vboxsf. Puoi fare riferimento a askubuntu.com/questions/79565/add-user-to-existing-group
chinloong

26
  1. modificare /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Prima di exit 0digitare:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Salva

  4. (Facoltativo) Crea un collegamento al desktop o alla cartella principale:

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

Per eseguire l'avvio senza errori, come premere S per saltare il montaggio o premere M per riparare manualmente, potrebbe essere necessario eliminare la vocefstab


4
Questo è l'UNICO modo in cui ho scoperto di funzionare, ho provato RC.Local con il normale comando mount, ho provato FSTAB, ho provato Crontab con script. Grazie enormi !!
FreeSoftwareServers

2
Questo ha funzionato anche per me (al contrario della risposta accettata, non sono del tutto sicuro del perché). Quindi un grande grazie da parte mia! :)
display-name-is-missing

4
Ha funzionato per me. Ho modificato /etc/rc.localcon questo mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurite,

1
Per ragioni di argomenti e per riflettere il caso di virtualbox: lo facevo all'avvio sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointe finivo per mettere il seguente in /etc/rc.local per farlo funzionare: mount -t vboxsf windows_share /home/dev/shared/mount_pointdove dev è il mio utente, FYI / etc / fstab funziona anche!
MediaVince il

1
La tua risposta ha funzionato per me, ma le directory vengono montate come root. Ho cambiato il mountcomando rc.localscript per includere il mio user id ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Se qualcuno è alla ricerca di un tutorial su come accendere rc.localUbuntu 17.04, questo ha funzionato per me. PPS Non ho avuto bisogno di includere vboxsf in /etc/modules.
Mike Wittie,

5

Dopo una faticosa mattinata a provare quanto sopra in Ubutntu 16.04 in esecuzione su Virtualbox 5.0.20 senza successo (particolarmente deluso dal fatto che la soluzione rc.local non funzionasse), ha funzionato:

  1. Registrazione dal menu Cartelle condivise della GUI di Virtualbox nella directory richiesta ma NON montaggio automatico o montaggio permanente da Virtualbox. Altrimenti la directory host è montata da root ed è un problema accedere agli utenti non root anche dal gruppo admin.

  2. aggiungendo una semplice voce in fstab:

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

    noautoOpzione nota - altrimenti il ​​boot loader non funziona come è stato notato.

  3. Aggiungi la riga corrispondente a /etc/sudoerscome segue usando il comando visudo dal SO guest:

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

Ciò consentirà ai processi non root di montare questo in modo specifico (poiché fstab non può montare con l'opzione 'user' ...)

  1. Aggiungi la riga corrispondente a .profile dell'utente:

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

Ora il sottodirere host selezionato è pronto per l'utente selezionato al momento dell'accesso!


Hai mai trovato una soluzione alternativa per noauto?
Jörgen Sigvardsson,

Questa è l'unica soluzione che ha funzionato per me. Inoltre, ho anche dovuto aggiungere "vboxsf" a / etc / modules per assicurarmi che .profile non eseguisse i comandi mount prima che vboxsf fosse pronto.
huyz,

invece di usare sudo, aggiungi 'user' all'opzione fstab e qualsiasi utente può montare il filesystem
Lars Nordin,

vedi pclosmag.com/html/issues/200709/page07.html per informazioni sull'aggiornamento di fstab, i commenti qui sono stati solo parzialmente utili. La quarta colonna di fstab è un elenco di opzioni virgola sep che aggiunge l'utente (uid = xxx) a quell'elenco, ad esempio noauto, uid = 1000, gid = 1000
qodeninja,

C'è un vuoto tra rw, noauto che provoca un errore di analisi. senza il bianco il campione ha funzionato per me
weberjn il

4

Per i nuovi sistemi basati su systemd hai bisogno di approcci alternativi - il più semplice è quello citato in un'altra risposta a un'altra domanda - che sostanzialmente dice che devi aggiungere commentun'opzione speciale alla /etc/fstabvoce:

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

Tuttavia, per far funzionare quanto sopra su alcuni sistemi, è necessario selezionare la casella 'Auto-mount' nelle cartelle condivise di VirtualBox-> Aggiungi finestra di dialogo, il che significa che si può finire con alcuni montaggi duplicati della directory.

Per un montaggio più pulito, senza directory duplicate né la necessità di "Auto-mount", è necessario utilizzare le direttive mount e automount di systemd . Per fare ciò, crea due voci in /usr/lib/systemd/system/nome dopo il punto di montaggio desiderato, ad es. Per abbinare il punto di montaggio fstab sopra, verrebbero nominate my_mount-src_host.mounte contenere:

[Unit]
Description=VirtualBox shared "src" folder

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

e 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

Quindi devono abilitare:

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

Ora verranno montati all'avvio. Se vuoi montarli immediatamente (a condizione che siano state create le cartelle condivise) puoi farlo:

sudo systemctl start  my_mount-src_host.mount

Nota se sono presenti directory con nomi o trattini dispari (-), utilizzare systemd-escapeper trovare il nome con escape appropriato.


Su Ubuntu 18.04, la tua prima soluzione con comment=systemd.automountopzione funziona anche senza il VBox Automount selezionato. Ho lottato per giorni prima di trovare la tua soluzione, grazie!
HubertL

Buono a sapersi - Ho aggiornato la mia risposta per riflettere la tua scoperta.
Pierz,

Questo ha funzionato su Debian 9, gli altri no.
cslotty,

3

Ho provato la soluzione rc.local ma non sono riuscito a farlo funzionare.
Tuttavia, ho scoperto che il problema sembra essere correlato alla cartella da cui si esegue il comando (non ho idea del perché). Quindi ho aggiunto una riga per cambiare la directory nella mia cartella home prima del comando mount, e ora funziona.

Quindi, la mia condivisione di Windows si chiama Dropbox, il mio mountpoint è /home/jamie/Dropbox, il mio nome utente è jamie, questo è quello che ho messo in rc.local:

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

Brillante! Grazie. Dopo aver lottato con le altre soluzioni, ha funzionato per la prima volta!
Norbert Norbertson,

Ho dovuto aggiungere un sleep 2prima di montare il dispositivo.
Adriano P,

2

Lo faccio con una modalità molto simile a è stato proposto sopra, ma questi script creano il necessario e montano o smontano la cartella condivisa con il seguente script:

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

Salva come /opt/.scripts/VBoxShared.sh.

Assicurarsi che questo possa essere eseguito. Sul tipo di shell:

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

Ora, aggiungiamo una riga che esegue questo script su rc.local:

sudo nano /etc/rc.local

e aggiungiamo queste righe prima dell'ultima riga ( exit 0):

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

Salva ( CtrlO) e chiudilo ( CtrlX)

A questo punto, montiamo automaticamente tutte le cartelle condivise elencate <SharedFolder>all'avvio.

Per smontarlo, abbiamo solo bisogno di digitare:

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

#!/bin/bash

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

exit 0

Salva ( CtrlO) e chiudi ( CtrlX)

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

E questo è tutto!


2

Ecco una soluzione funzionante.

Come root (IE sudo su) Vai alla cartella home (cd ~) e crea un file cron:
vi cronjobs
Aggiungi il seguente
@reboot sleep 15; mount -t vboxsf app / mnt / app

Salvare il file

Nota: sostituire l'app con il nome della cartella condivisa e / mnt / app dove si desidera montarla. In questo caso ho prima creato l'app per le cartelle sotto mount (app mkdir).

Per abilitare il tuo cron come
cronjobs crontab root (per il nome del file sopra)

Assicurati che cron sia attivo:
crontab -l

riavviare e verrà montato. 15 secondi di sonno consentono abbastanza tempo perché tutto sia pronto per il montaggio.


rc.local nella risposta accettata è stato rimosso in una recente versione di Ubuntu. Questa soluzione alternativa funziona :)
shonky linux user,

0

Di recente ho riscontrato questo thread quando, dopo l'aggiornamento a Ubuntu LTS-18 (e senza apportare modifiche a VirtualBox, e dopo aver reinstallato le estensioni e blah-de-blah), il montaggio automatico ha smesso di funzionare. Le sf_xxxdirectory erano presenti /media/ma nessuna di esse era effettivamente montata.

I tentativi di montarli /etc/fstab(come suggerito dalla documentazione di VirtualBox) non hanno funzionato: l'avvio non è riuscito in "modalità di emergenza", anche quando avevo modificato il /etc/modulesfile.

Ciò che alla fine ha funzionato - anche se lo considero un trucco puzzolente - è il crontabtrucco descritto sopra.

Fino ad oggi, non ho idea di "cosa si è rotto".


0

Stavo riscontrando un problema per cui potevo vedere la cartella condivisa, ma non c'erano file. Quindi ho fatto un hack simile a quello che è stato mostrato sopra:

Mi sono assicurato che il mio utente fosse nei gruppi corretti e che ci fosse una voce in fstab per montare la condivisione e che le autorizzazioni fossero impostate correttamente e che il montaggio automatico fosse attivo nelle impostazioni di VirtualBox, ma ancora no file da vedere.
Così ho aperto l'app Startup Applications nella GUI di Ubuntu 18.04 e ho creato un'attività che eseguiva semplicemente "sudo mount -a" all'avvio. Per qualsiasi motivo la cartella condivisa non veniva montata correttamente quando fstab veniva analizzato automaticamente all'avvio, quindi il re-montaggio di tutto sembrava risolvere il problema. Ora posso vedere i file nella condivisione.


0

Ho provato tutte le soluzioni qui e nessuna ha funzionato.

Ciò che ha funzionato è stato installare il supervisore ed eseguire uno script Python.

installa supervisore

apt-get install supervisor

script python (il mio era in /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)

creare un file di configurazione per supervisore

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

apri supervisore

sudo supervisorctl

leggi la configurazione

reread

aggiungi configurazione

add shared_folders


0

(Nel mio caso, il mio sistema operativo host è Mac OS X e il mio sistema operativo guest è Ubuntu)

Nessuna delle soluzioni di cui sopra e le soluzioni menzionate qui e qui hanno funzionato per me. C'è stato un problema con tutti loro.

Ecco cosa ho finalmente fatto per risolvere il problema:

1- Ho creato una cartella condivisa nell'interfaccia utente di VirtualBox, indicando una cartella denominata VMSharesnel mio Mac OS, denominandolawd

2- Quindi ho installato gli strumenti Ubuntu Guest Addition (riavvio richiesto)

3- Quindi ho creato una cartella nel mio SO guest come punto di montaggio (nel mio caso il nome era /home/fashid/host)

4- Quindi ho corso:

sudo VBoxControl sharedfolder list

Questo era il comando per assicurarsi che la condivisione fosse disponibile per il SO guest, nel frattempo è comunque necessario montarla nel SO guest per renderla effettivamente disponibile.

Mostrerà qualcosa di simile:

Shared Folder mappings (1):
01 - VMShares

Questo è il trucco! Mostra il nome effettivo che è necessario inserire nel comando seguente per montarlo effettivamente e renderlo disponibile nel sistema operativo guest:

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

Hai capito il punto? Non ho usato WD più tardi. Nel passaggio 3, dovevo prelevare il nome della cartella (host) effettiva invece del nome arbitrario che avevo assegnato nella finestra di dialogo della GUI.

Tramite i passaggi precedenti, il mio problema è stato risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.