Comment monter un dossier partagé VirtualBox au démarrage?

87

J'ai Ubuntu installé dans Virtualbox. Je souhaite monter mon dossier partagé VirtualBox dans Ubuntu automatiquement lorsque je me connecte à Ubuntu. Je mets la ligne suivante dans mes ~. / Bashrc et ~ / .bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

où windows_share est le nom que j'ai créé avec Virtualbox. Mais chaque fois que je lance mon Ubuntu, il me demande un mot de passe car il a besoin de sudo. Est-il possible de monter automatiquement un partage Windows sans entrer de mot de passe chaque fois que je me connecte?

tonga
la source

Réponses:

109

Pour toujours monter un "dossier partagé" Virtual Box lors du démarrage d'un invité Ubuntu, nous avons deux options. Il en va de votre préférence personnelle quelle option fonctionne le mieux dans notre environnement.

1. Monter avec fstab

Pour monter un dossier partagé en utilisant le vboxsfsystème de fichiers fourni avec Guest Additions, nous devons d’abord nous assurer que les conditions préalables sont remplies . Ensuite, nous pouvons mettre la ligne suivante dans notre etc/fstabfichier:

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

Remplacez name_of_shareet /path/to/mountpointpar votre configuration individuelle (le répertoire du point de montage doit d'abord être créé). Voir la page de manuel pour monter <options>. Une possibilité consiste à monter avec defaults, ou à donner des options de montage spécifiques (par exemple rw, suid, exec, auto, users).

Sur certains systèmes, le vboxsfmodule de noyau n'est pas encore chargé au moment de sa fstablecture au démarrage. Il peut alors être utile d’ajouter le vboxsfmodule du noyau à /etc/modules.

Certains systèmes peuvent nécessiter une option comment=systemd.automountdans leur entrée fstab ( source ).

2. Montez avec Virtual Box "montage automatique":

Dans les dernières versions de Virtual Box, nous pouvons également monter automatiquement les dossiers partagés lors de la création:

entrez la description de l'image ici

Après un redémarrage de l'invité, ce dossier partagé sera monté dans le répertoire de l'invité /media/<username>/sf_<name_of_share>accessible à tous les utilisateurs qui ont été rendus membres du groupe vboxsf.

Takkat
la source
1
Comment modifier le répertoire de montage et le préfixe de montage? Exécutez-vous des commandes de terminal dans le système d'exploitation hôte ou le système d'exploitation invité?
CMCDragonkai
12
Cette fonctionnalité nécessite que le service "virtualbox-guest-utils" ait démarré et sur Ubuntu 14.04, ce service démarre plus tard que le système de fichiers est monté. Ceci est la raison de l'erreur "device not found" lors du montage des partages via fstab
kolypto
1
@ garromark, ma seule idée est de créer un script de démarrage, ce qui est assez simple. Une autre option consiste à mettre la même entrée dans fstab, mais en ajoutant "noauto" afin de la monter manuellement.
Kolypto
4
@kolypto, merci de me recontacter. En fait, j’ai trouvé deux solutions concurrentes, dont une seule a fonctionné pour moi: Option 1) (comme vous l’avez dit), consiste, comme vous l’avez dit, à noautoinclure les options fstab, puis à monter plus tard typiquement dans un script de démarrage (tel que. profile), Option 2) le problème principal étant que vboxsf n’est pas chargé avant l’exécution de fstab, ajoutez-le vboxsfau fichier /etc/modules, en demandant au kernal de charger le module avant l’exécution de fstab. Peut-être que cela aidera quelqu'un d'autre.
garromark
6
n'oubliez pas d'ajouter votre utilisateur au groupe vboxsf. Vous pouvez vous référer à askubuntu.com/questions/79565/add-user-to-existing-group
chinloong
26
  1. Modifier /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Avant de exit 0taper:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. sauver

  4. (Facultatif) Créez un raccourci vers le dossier de bureau ou d'accueil:

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

Pour démarrer sans erreurs, comme appuyer sur S pour ignorer le montage ou appuyer sur M pour réparer manuellement, vous devrez peut-être supprimer votre entrée dansfstab

Fred Collins
la source
4
C’est le SEUL moyen que j’ai trouvé de fonctionner, essayé RC.Local avec la commande mount normale, essayé FSTAB, essayé Crontab w / script. Un énorme merci !!
FreeSoftwareServers
2
Cela a fonctionné pour moi aussi (opposé à la réponse acceptée, je ne sais pas trop pourquoi). Donc, un grand merci de ma part! :)
Nom-affiché-est-manquant le
4
Travaillé pour moi J'ai édité /etc/rc.localavec ça mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurite
1
Pour des raisons d’argumentation et pour refléter le cas de virtualbox: j’avais l'habitude de faire cela au début sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointet j'ai fini par mettre le texte suivant dans /etc/rc.local pour que cela fonctionne: mount -t vboxsf windows_share /home/dev/shared/mount_pointoù dev est mon utilisateur, FYI / etc / fstab fonctionne également!
MediaVince
1
Votre réponse a fonctionné pour moi, mais les répertoires sont montés en tant que root. J'ai changé la mountcommande en rc.localscript pour inclure mon nom d'utilisateur ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Si quelqu'un cherche un tutoriel sur la façon d'activer rc.localUbuntu 17.04, cela a fonctionné pour moi. PPS, je n’ai pas besoin d’inclure vboxsf dans /etc/modules.
Mike Wittie
5

Après une matinée épuisante à essayer tout ce qui précède dans Ubutntu 16.04 s’exécutant dans Virtualbox 5.0.20 sans succès (particulièrement déçue que la solution rc.local ne fonctionne pas), elle a fonctionné comme suit:

  1. Enregistrement dans le menu Dossiers partagés de l'interface graphique Virtualbox du répertoire requis, mais PAS de son montage automatique ni de son montage permanent à partir de Virtualbox. Sinon, le répertoire de l'hôte est monté par la racine et l'accès par les utilisateurs non-root est difficile, même à partir du groupe d'administrateurs.

  2. ajout d'une entrée simple dans fstab:

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

    noautoOption de note - sinon le chargeur de démarrage échoue comme cela a été noté.

  3. Ajoutez la ligne correspondante à /etc/sudoerscomme suit en utilisant la commande visudo à partir du système d'exploitation invité:

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

Cela permettra aux processus non root de monter ceci spécifiquement (car fstab ne peut pas monter avec l'option 'utilisateur' ...)

  1. Ajouter la ligne correspondante au fichier .profile de l'utilisateur:

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

Désormais, le sous-répertoire de l'hôte sélectionné est prêt pour l'utilisateur sélectionné lors de la connexion!

Michael Moutoussis
la source
Avez-vous déjà trouvé une solution de contournement noauto?
Jörgen Sigvardsson
C'est la seule solution qui a fonctionné pour moi. Mais en plus, je devais aussi ajouter "vboxsf" à / etc / modules pour m'assurer que .profile n'exécutait pas les commandes de montage avant que le vboxsf soit prêt.
huyz
au lieu d'utiliser sudo, ajoutez 'utilisateur' à l'option fstab et tout utilisateur peut monter le système de fichiers
Lars Nordin
voir pclosmag.com/html/issues/200709/page07.html pour plus d'informations sur la mise à jour de fstab, les commentaires ici n'ont été que partiellement utiles. La quatrième colonne de fstab est une liste d'options séparées par des virgules, qui ajoute l'utilisateur (uid = xxx) à cette liste, par exemple, noauto, uid = 1000, gid = 1000
qodeninja le
Il y a un blanc entre rw, noauto, ce qui entraîne une erreur d'analyse. sans le blanc l'échantillon a fonctionné pour moi
weberjn
4

Pour les systèmes basés sur systemd plus récents , vous avez besoin d’approches alternatives - la plus simple étant celle mentionnée dans une autre réponse à une autre question - qui indique en gros que vous devez ajouter une commentoption spéciale à l’ /etc/fstabentrée:

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

Cependant, pour que ce qui précède fonctionne sur certains systèmes, vous devez cocher la case "Montage automatique" dans la boîte de dialogue Dossiers partagés-> Ajouter de VirtualBox, ce qui signifie que vous pouvez vous retrouver avec quelques montages dupliqués du répertoire.

Pour un kit de montage propre - sans répertoires en double , ni la nécessité de « Auto-montage » - vous devez utiliser systemd de montage et automontage directives. Pour ce faire, créez deux entrées /usr/lib/systemd/system/nommées en fonction de votre point de montage souhaité, par exemple, pour correspondre au point de montage fstab ci-dessus, elles seraient nommées my_mount-src_host.mountet contiendraient:

[Unit]
Description=VirtualBox shared "src" folder

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

et 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

Ensuite, ils ont besoin de permettre:

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

Ils vont maintenant monter au démarrage. Si vous souhaitez les monter immédiatement (à condition que les dossiers partagés aient été créés), vous pouvez le faire:

sudo systemctl start  my_mount-src_host.mount

Notez que si vous avez des répertoires avec des noms impairs ou des tirets (-), utilisez-les systemd-escapepour trouver le nom échappé approprié.

Pierz
la source
Sur Ubuntu 18.04, votre première solution avec comment=systemd.automountoption fonctionne également sans la VBox Automount cochée. J'ai lutté pendant des jours avant de trouver votre solution, merci!
HubertL
C'est bon à entendre - j'ai mis à jour ma réponse pour refléter votre conclusion.
Pierz
Celui-ci a fonctionné sous Debian 9, les autres non.
Cslotty
3

J'ai essayé la solution rc.local mais je n'ai pas réussi à la faire fonctionner.
Cependant, j'ai découvert que le problème semble être lié au dossier à partir duquel vous exécutez la commande (sans savoir pourquoi). J'ai donc ajouté une ligne pour changer le répertoire dans mon dossier personnel avant la commande mount, et maintenant cela fonctionne.

Donc, mon partage Windows s'appelle Dropbox, mon point de montage est /home/jamie/Dropbox, mon nom d'utilisateur est jamie, voici ce que j'ai mis dans rc.local:

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
Frit
la source
Brillant! Merci. Après avoir lutté avec les autres solutions, cela a fonctionné du premier coup!
Norbert Norbertson
Je devais ajouter un sleep 2avant de monter l'appareil.
Adriano P
2

Je le fais d'un mode très similaire à ce qui a été proposé ci-dessus, mais ces scripts créent le requis et montent ou démontent le dossier partagé avec le script suivant:

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

Enregistrez-le sous /opt/.scripts/VBoxShared.sh.

Assurez-vous que cela peut être exécuté. Sur type de coque:

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

Maintenant, nous ajoutons une ligne qui exécute ce script sur rc.local:

sudo nano /etc/rc.local

et nous ajoutons ces lignes avant la dernière ligne ( exit 0):

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

Enregistrer ( CtrlO) et fermez-le ( CtrlX)

À ce stade, nous montons automatiquement tous les dossiers partagés répertoriés <SharedFolder>au démarrage.

Pour le démonter, il suffit de taper:

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

#!/bin/bash

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

exit 0

Enregistrer ( CtrlO) et fermer ( CtrlX)

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

Et c'est tout!

Banny
la source
2

Voici une solution de travail.

En tant que root (IE sudo su) Allez dans le dossier d’accueil (cd ~) et créez un fichier cron:
vi cronjobs
Ajoutez le
@reboot sleep 15 suivant; mount -t vboxsf app / mnt / app

Enregistrer le fichier

Remarque: remplacez app par le nom de votre dossier partagé et / mnt / app où vous souhaitez le monter. Dans ce cas, j'ai d'abord créé l'application de dossier sous mount (mkdir app).

Pour activer votre cron en tant que root (pour le nom de fichier ci-dessus)
crontab cronjobs

Assurez-vous que cron est actif:
crontab -l

redémarrez et il sera monté. Un sommeil de 15 secondes laisse suffisamment de temps pour que tout soit prêt pour le montage.

Stephen
la source
Dans la réponse acceptée, rc.local a été supprimé dans une version récente d'Ubuntu. Cette solution alternative fonctionne :)
Utilisateur Linux shonky
0

J'ai récemment rencontré ce fil de discussion lorsque, après la mise à jour vers Ubuntu LTS-18 (et n'apportant aucune modification à VirtualBox, et après la réinstallation des extensions et de blah-de-blah), le montage automatique a cessé de fonctionner. Les sf_xxxrépertoires étaient présents /media/mais aucun d’entre eux n’a été monté.

Les tentatives de montage /etc/fstab(comme suggéré par la documentation de VirtualBox) n'ont pas fonctionné: le démarrage a échoué en "mode d'urgence", même lorsque j'avais modifié le /etc/modulesfichier.

Ce qui a finalement marché - bien que je le considère comme un bidouillage - est le crontabtruc décrit ci-dessus.

À ce jour, je n'ai aucune idée de "ce qui a éclaté".

Mike Robinson
la source
0

J'avais un problème où je pouvais voir le dossier partagé, mais il ne contenait aucun fichier. J'ai donc fait un piratage semblable à ce qui a été montré ci-dessus:

Je me suis assuré que mon utilisateur appartenait au bon groupe et qu’il y avait une entrée dans fstab pour monter le partage, et que les autorisations étaient définies correctement et que le montage automatique était activé dans les paramètres de VirtualBox, mais toujours pas. fichiers à voir.
J'ai donc ouvert l'application Applications de démarrage dans l'interface graphique d'Ubuntu 18.04 et créé une tâche qui exécutait simplement "sudo mount -a" dès le démarrage. Pour une raison quelconque, le dossier partagé n’était pas monté correctement lorsque fstab était automatiquement analysé au démarrage; tout remonter semblait donc résoudre le problème. Maintenant, je peux voir les fichiers dans le partage.

Excentrique
la source
0

J'ai essayé toutes les solutions ici et aucune n'a fonctionné.

Ce qui a bien fonctionné a été d'installer supervisor et d'exécuter un script python.

superviseur d'installation

apt-get install supervisor

script python (le mien était à /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)

créer un fichier de configuration pour superviseur

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

supervisor ouvert

sudo supervisorctl

lire la configuration

reread

ajouter une configuration

add shared_folders

Eugene Gekhter
la source
0

(Dans mon cas, mon système d'exploitation hôte est Mac OS X et mon système d'exploitation invité est Ubuntu)

Aucune des solutions ci-dessus, et les solutions mentionnées ici et ici n'a fonctionné pour moi. Il y avait un problème avec chacun d'eux.

Voici ce que j'ai finalement fait pour résoudre le problème:

1- J'ai créé un dossier partagé dans l'interface utilisateur de VirtualBox, en pointant sur un dossier nommé VMSharesdans mon Mac OS, en le nommant.wd

2- Puis j'ai installé les outils Ubuntu Guest Addition (redémarrage requis)

3- Puis j'ai créé un dossier dans mon OS invité en tant que point de montage (dans mon cas, le nom était /home/fashid/host)

4- Puis j'ai couru:

sudo VBoxControl sharedfolder list

Cette commande a pour but de vous assurer que le partage est disponible pour le système d'exploitation invité. En attendant, vous devez toujours le monter dans votre système d'exploitation invité pour le rendre réellement disponible.

Il montrera quelque chose comme:

Shared Folder mappings (1):
01 - VMShares

C'est le truc! Il montre le nom réel que vous devez entrer dans la commande ci-dessous pour le monter et le rendre disponible dans votre OS invité:

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

Avez-vous réalisé le point? Je n'ai utilisé nulle part plus tard. À l'étape 3, j'avais besoin de récupérer le nom du dossier (hôte) réel au lieu du nom arbitraire que j'ai assigné dans la boîte de dialogue de l'interface graphique.

Via les étapes ci-dessus, mon problème a été résolu.

Farshid
la source