web-dev-qa-db-fra.com

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

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 le 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?

84
tonga

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 système de fichiers vboxsf 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 fichier etc/fstab:

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

Remplacez name_of_share et /path/to/mountpoint par votre configuration individuelle (le répertoire du point de montage doit d'abord être créé). Voir la page de manuel relative à mount <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 module de noyau vboxsf n'est pas encore chargé au moment où fstab est lu au démarrage. Il peut alors être utile d’ajouter le module de noyau vboxsf à /etc/modules.

Certains systèmes peuvent avoir besoin de l'option comment=systemd.automount dans 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:

enter image description here

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 membre du groupe vboxsf.

105
Takkat
  1. Éditer /etc/rc.local

    Sudo -H gedit /etc/rc.local
    
  2. Avant exit 0 tapez:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Sauvegarder

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

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

Pour pouvoir démarrer sans erreurs, par exemple en appuyant sur S pour ignorer le montage ou sur M pour réparer manuellement, vous devrez peut-être supprimer votre entrée dans fstab

25
Fred Collins

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 de 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
    

    Remarque: Option noauto - sinon, le chargeur de démarrage échoue comme indiqué.

  3. Ajoutez la ligne correspondante à /etc/sudoers comme 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!

5

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 semblait lié au dossier à partir duquel vous exécutez la commande (vous ne savez pas pourquoi). J'ai donc ajouté une ligne pour changer le répertoire dans mon dossier personnel avant la commande mount, et maintenant cela fonctionne.

Ainsi, 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
3
DeepFried

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> ...]

Sauvegarder (CtrlO) et fermez-le (CtrlX)

À ce stade, nous montons automatiquement tous les dossiers partagés répertoriés sur <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

Sauvegarder (CtrlO) et proche (CtrlX)

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

Et c'est tout!

2
Banny

Voici une solution de travail.

En tant que root (I.E. Sudo su) Allez dans le dossier d’accueil (cd ~) et créez un fichier cron:
vi cronjobs
Ajouter ce qui suit
@ redémarrez le sommeil 15; 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.

2
Stephen

Pour les systèmes plus récents systemd , vous avez besoin d’approches alternatives - la plus simple étant celle mentionnée dans un autre réponse à une autre question - qui dit essentiellement que vous devez ajouter une option comment spéciale à l'entrée /etc/fstab:

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 montage plus propre - sans répertoires en double ni besoin de "montage automatique", vous devez utiliser les directives systemd mount et automount . Pour ce faire, créez deux entrées dans /usr/lib/systemd/system/ portant le nom du point de montage souhaité, par exemple. pour correspondre au point de montage fstab ci-dessus, ils seraient nommés my_mount-src_Host.mount et 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 systemd-escape pour rechercher le nom échappé approprié.

2
Pierz

(Dans mon cas, mon OS hôte est Mac OS X et mon OS invité est Ubuntu)

Aucune des solutions ci-dessus, et les solutions mentionnées ici et ici 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 wdname__

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 sur 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.

0
Farshid

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.

0
Cranky

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

Les tentatives de montage dans /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 fichier /etc/modules.

Ce qui a fait a finalement marché - bien que je le considère comme un bidouillage - est l’astuce de crontab décrite ci-dessus.

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

0
Mike Robinson

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

Ce qui a fonctionné, c’est d’installer superviseur 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

rereadname__

ajouter une configuration

add shared_folders

0
Eugene Gekhter