Wie mounte ich einen freigegebenen VirtualBox-Ordner beim Start?

87

Ich habe Ubuntu in Virtualbox installiert. Ich möchte meinen freigegebenen VirtualBox-Ordner automatisch in Ubuntu einbinden, wenn ich mich bei Ubuntu anmelde. Ich habe die folgende Zeile in mein ~. / Bashrc und ~ / .bash_profile eingefügt:

sudo mount -t vboxsf windows_share /media/windows_share

Dabei ist windows_share der Name, den ich mit Virtualbox erstellt habe. Aber jedes Mal, wenn ich mein Ubuntu starte, fragt es mich nach passwd, da es sudo benötigt. Gibt es eine Möglichkeit, die Windows-Freigabe bei jeder Anmeldung automatisch zu aktivieren, ohne ein Kennwort einzugeben?

Tonga
quelle

Antworten:

109

Um einen Virtual Box "Shared Folder" beim Booten eines Ubuntu-Gasts immer zu mounten, haben wir zwei Möglichkeiten. Welche Option in unserer Umgebung am besten geeignet ist, hängt von Ihren persönlichen Vorlieben ab.

1. Mount mit fstab

Um einen freigegebenen Ordner mithilfe des vboxsfmit Guest Additions bereitgestellten Dateisystems bereitzustellen, müssen Sie zunächst sicherstellen, dass die Voraussetzungen erfüllt sind . Dann können wir die folgende Zeile in unsere etc/fstabDatei einfügen:

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

Ersetzen Sie name_of_shareund /path/to/mountpointmit Ihrem individuellen Setup (das Verzeichnis für den Mountpoint muss zuerst erstellt werden). Informationen zum Einhängen finden Sie in der Manpage <options>. Eine Möglichkeit besteht darin, mit defaultsoder bestimmte Mount-Optionen anzugeben (z rw, suid, exec, auto, users. B. ).

Auf einigen Systemen ist das vboxsfKernelmodul noch nicht geladen, wenn fstabes beim Booten gelesen wird. Es kann dann hilfreich sein, das vboxsfKernelmodul anzufügen /etc/modules.

Einige Systeme benötigen möglicherweise eine Option comment=systemd.automountin ihrem fstab-Eintrag ( Quelle ).

2. Montieren mit Virtual Box "automatische Montage":

In neueren Versionen von Virtual Box können wir freigegebene Ordner beim Erstellen automatisch bereitstellen:

Bildbeschreibung hier eingeben

Nach einem Neustart des Gasts wird dieser freigegebene Ordner in das Gastverzeichnis /media/<username>/sf_<name_of_share>geladen, auf das alle Benutzer zugreifen können, die Mitglied der Gruppe wurden vboxsf.

Takkat
quelle
1
Wie ändere ich das Mount-Verzeichnis und das Mount-Präfix? Führen Sie einige Terminalbefehle im Betriebssystem HOST oder im Betriebssystem GUEST aus?
CMCDragonkai
12
Diese Funktion setzt voraus, dass der Dienst "virtualbox-guest-utils" gestartet wurde und unter Ubuntu 14.04 dieser Dienst später gestartet wird, als die Dateisysteme eingehängt sind. Dies ist der Grund für den Fehler "Gerät nicht gefunden" beim Mounten der Freigaben über fstab
kolypto
1
@garromark, meine einzige Idee ist es, ein Startup-Skript zu erstellen, das recht einfach ist. Eine andere Möglichkeit ist, den gleichen fstab-Eintrag zu setzen, aber "noauto" hinzuzufügen, damit Sie ihn nur manuell einhängen.
Kolypto
4
@kolypto, danke, dass du dich bei mir gemeldet hast. Ich habe tatsächlich zwei konkurrierende Lösungen gefunden, von denen nur eine für mich funktioniert hat: Option 1 (Funktioniert für mich) besteht darin, wie Sie sagten, noautodie fstab-Optionen einzugeben und sie später in der Regel in einem Startskript (wie z. profile), Option 2) Das Hauptproblem ist, dass vboxsf nicht geladen wird, bevor fstab ausgeführt wird. Hängen Sie es vboxsfan die Datei an /etc/modulesund fordern Sie den Kernel auf, das Modul zu laden, bevor fstab ausgeführt wird. Vielleicht hilft das jemand anderem.
Garromark
6
Denken Sie bitte daran, Ihren Benutzer zur vboxsf-Gruppe hinzuzufügen. Sie können sich auf askubuntu.com/questions/79565/add-user-to-existing-group
chinloong
26
  1. Bearbeiten /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Vor dem exit 0Typ:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. sparen

  4. (Optional) Erstellen Sie eine Verknüpfung zum Desktop oder Basisordner:

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

Um fehlerfrei zu booten, z. B. durch Drücken von S zum Überspringen des Ladevorgangs oder durch Drücken von M zum manuellen Reparieren, müssen Sie möglicherweise Ihren Eintrag in löschenfstab

Fred Collins
quelle
4
Dies ist der EINZIGE Weg, den ich gefunden habe, um zu arbeiten, versuchte RC.Local mit dem regulären Befehl mount, versuchte FSTAB, versuchte Crontab w / script. Vielen Dank!!
FreeSoftwareServers
2
Dies funktionierte auch für mich (im Gegensatz zu der akzeptierten Antwort, nicht ganz sicher warum). Also ein großes Dankeschön von mir! :)
Anzeigename-fehlt
4
Hat für mich gearbeitet. Ich bearbeiten /etc/rc.localmit diesem mount -t vboxsf [-o OPTIONS] sharename mountpoint.
Neurite
1
Aus Gründen der Argumentation und zur Veranschaulichung des Virtualbox-Falls: Ich habe dies beim Start getan sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointund Folgendes in /etc/rc.local eingefügt, damit es funktioniert: mount -t vboxsf windows_share /home/dev/shared/mount_pointWo dev mein Benutzer ist, funktioniert auch FYI / etc / fstab!
MediaVince
1
Ihre Antwort hat für mich funktioniert, aber die Verzeichnisse werden als root gemountet. Ich änderte den mountBefehl in rc.localSkript zu meinem Benutzer - ID enthalten ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Wenn jemand sucht nach einem Tutorial, wie zum Einschalten rc.localauf Ubuntu 17.04 dies für mich gearbeitet hat. PPS Ich musste vboxsf nicht einbinden /etc/modules.
Mike Wittie
5

Nach einem anstrengenden Morgen, in dem in Ubutntu 16.04 alles oben Genannte erfolglos in Virtualbox 5.0.20 ausprobiert wurde (besonders enttäuscht darüber, dass die rc.local-Lösung nicht funktioniert hat), funktionierte sie wie folgt:

  1. Registrieren Sie über das Menü "Freigegebene Ordner" der Virtualbox-Benutzeroberfläche das erforderliche Verzeichnis, aber NICHT die automatische Bereitstellung oder die permanente Bereitstellung über Virtualbox. Andernfalls wird das Hostverzeichnis von root gemountet und es ist schwierig, auch von der Administratorgruppe aus auf Nicht-Root-Benutzer zuzugreifen.

  2. Hinzufügen eines einfachen Eintrags in fstab:

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

    Hinweisoption noauto- Andernfalls schlägt der Bootloader wie angegeben fehl.

  3. Fügen Sie die entsprechende Zeile /etc/sudoersmit dem Befehl visudo aus dem Gastbetriebssystem heraus wie folgt hinzu:

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

Dies ermöglicht es Nicht-Root-Prozessen, dies spezifisch bereitzustellen (da fstab nicht mit der Option 'user' bereitgestellt werden kann ...)

  1. Fügen Sie der .profile des Benutzers die entsprechende Zeile hinzu:

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

Jetzt ist das ausgewählte Host-Unterverzeichnis beim Login für den ausgewählten Benutzer fertig gemountet!

Michael Moutoussis
quelle
Haben Sie jemals eine Problemumgehung gefunden noauto?
Jörgen Sigvardsson
Dies ist die einzige Lösung, die für mich funktioniert hat. Außerdem musste ich "vboxsf" zu / etc / modules hinzufügen, um sicherzustellen, dass .profile die mount-Befehle nicht ausführte, bevor die vboxsf bereit war.
Huyz
Anstatt sudo zu verwenden, füge 'user' zur Option fstab hinzu und jeder Benutzer kann das Dateisystem mounten
Lars Nordin
Informationen zum Aktualisieren von fstab finden Sie unter pclosmag.com/html/issues/200709/page07.html. Die Kommentare hier waren nur teilweise hilfreich. Die vierte Spalte in fstab ist eine durch Kommas getrennte Liste von Optionen. Fügen Sie Benutzer (uid = xxx) zu dieser Liste hinzu, z. B. noauto, uid = 1000, gid = 1000
qodeninja
Zwischen rw und noauto befindet sich ein Leerzeichen, was zu einem Analysefehler führt. ohne die leere funktionierte die probe für mich
weberjn
4

Für neuere systembasierte Systeme benötigen Sie alternative Ansätze - der einfachste wird in einer anderen Antwort auf eine andere Frage erwähnt -, die im Grunde bedeuten, dass Sie commentdem /etc/fstabEintrag eine spezielle Option hinzufügen müssen :

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

Damit dies jedoch auf einigen Systemen funktioniert, müssen Sie das Kontrollkästchen "Automatisch einhängen" im Dialogfeld "Freigegebene Ordner" von VirtualBox -> "Hinzufügen" aktivieren. Dies bedeutet, dass Sie möglicherweise einige doppelte Einhängepunkte des Verzeichnisses haben.

Für ein saubereres Mounten - ohne doppelte Verzeichnisse oder das Erfordernis des automatischen Mountens - müssen Sie die Anweisungen mount und automount von systemd verwenden . Erstellen Sie dazu zwei Einträge, /usr/lib/systemd/system/die nach Ihrem gewünschten Einhängepunkt benannt sind, z. B. um mit dem darüber liegenden fstab-Einhängepunkt übereinzustimmen. Sie würden benannt my_mount-src_host.mountund enthalten:

[Unit]
Description=VirtualBox shared "src" folder

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

und 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

Dann müssen sie aktivieren:

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

Sie werden jetzt beim Booten montiert. Wenn Sie sie sofort bereitstellen möchten (vorausgesetzt, die freigegebenen Ordner wurden erstellt), können Sie dies tun:

sudo systemctl start  my_mount-src_host.mount

Beachten Sie, dass Sie bei Verzeichnissen mit ungeraden Namen oder Bindestrichen (-) systemd-escapeden entsprechend maskierten Namen suchen.

Pierz
quelle
Unter Ubuntu 18.04 comment=systemd.automountfunktioniert Ihre erste Lösung mit Option auch ohne aktivierte Automount VBox. Ich hatte tagelang Mühe, bevor ich deine Lösung fand. Danke!
HubertL
Gut zu hören - Ich habe meine Antwort aktualisiert, um Ihre Erkenntnisse widerzuspiegeln.
Pierz
Dieser arbeitete an Debian 9, die anderen nicht.
Cslotty
3

Ich habe die rc.local-Lösung ausprobiert, konnte sie jedoch nicht zum Laufen bringen.
Ich habe jedoch festgestellt, dass das Problem mit dem Ordner zusammenhängt, aus dem Sie den Befehl ausführen (keine Ahnung, warum). Deshalb habe ich vor dem Befehl mount eine Zeile hinzugefügt, um das Verzeichnis in meinen Ausgangsordner zu ändern, und jetzt funktioniert es.

Also, meine Windows-Freigabe heißt Dropbox, mein Mountpoint ist /home/jamie/Dropbox, mein Benutzername ist jamie, das ist, was ich in rc.local geschrieben habe:

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
Frittiert
quelle
Brillant! Vielen Dank. Nach dem Kampf mit den anderen Lösungen funktionierte dies zum ersten Mal!
Norbert Norbertson
Ich musste ein hinzufügen, sleep 2bevor ich das Gerät montierte.
Adriano P
2

Ich mache es in einem sehr ähnlichen Modus, der oben vorgeschlagen wurde, aber diese Skripte erstellen die erforderlichen und hängen den freigegebenen Ordner mit dem folgenden Skript ein oder aus:

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

Speichern Sie es als /opt/.scripts/VBoxShared.sh.

Stellen Sie sicher, dass dies ausgeführt werden kann. Auf Shell-Typ:

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

Nun fügen wir eine Zeile hinzu, in der dieses Skript ausgeführt wird rc.local:

sudo nano /etc/rc.local

und wir fügen diese Zeile vor der letzten Zeile hinzu ( exit 0):

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

Speichern ( CtrlO) und schließen ( CtrlX)

Zu diesem Zeitpunkt stellen wir automatisch alle freigegebenen Ordner bereit, die <SharedFolder>beim Start aufgelistet werden .

Zum Abmelden benötigen wir nur Typ:

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

#!/bin/bash

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

exit 0

Speichern ( CtrlO) und schließen ( CtrlX)

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

Und das ist alles!

Banny
quelle
2

Hier ist eine funktionierende Lösung.

Als root (IE sudo su) Wechseln Sie in den Home-Ordner (cd ~) und erstellen Sie eine Cron-Datei:
vi cronjobs
Fügen Sie die folgenden
@reboot sleep 15 hinzu; mounten Sie -t vboxsf app / mnt / app

Datei speichern

Hinweis: Ersetzen Sie die App durch den Namen Ihres freigegebenen Ordners und / mnt / app, in dem Sie sie bereitstellen möchten. In diesem Fall habe ich zuerst die Ordner-App unter mount (mkdir app) erstellt.

So aktivieren Sie Ihren Cron als Root (für den obigen Dateinamen)
crontab cronjobs

Stellen Sie sicher, dass cron aktiv ist:
crontab -l

Neustart und es wird gemountet. 15 Sekunden Schlaf lassen genug Zeit für alles, um für das Reittier bereit zu sein.

Stephen
quelle
rc.local in der akzeptierten Antwort wurde in einer aktuellen Version von Ubuntu entfernt. Diese alternative Lösung funktioniert :)
Shonky Linux Benutzer
0

Ich bin vor kurzem auf diesen Thread gestoßen, als nach dem Update auf Ubuntu LTS-18 (und ohne Änderungen an VirtualBox und nach der Neuinstallation der Erweiterungen und von blah-de-blah) die automatische Bereitstellung nicht mehr funktionierte. Die sf_xxxVerzeichnisse waren in vorhanden, /media/aber keines von ihnen wurde tatsächlich eingehängt.

Der Versuch, sie zu mounten /etc/fstab(wie in der VirtualBox-eigenen Dokumentation vorgeschlagen), schlug fehl: Der Startvorgang schlug im "Notfallmodus" fehl, selbst wenn ich die /etc/modulesDatei geändert hatte .

Was hat schließlich arbeiten - obwohl ich es als stinkin betrachten Hack - ist der crontabTrick oben beschrieben.

Bis heute habe ich keine Ahnung, "was kaputt ist".

Mike Robinson
quelle
0

Ich hatte ein Problem, bei dem ich den freigegebenen Ordner sehen konnte, aber es waren keine Dateien darin. Also habe ich einen ähnlichen Hack gemacht wie oben gezeigt:

Ich habe sichergestellt, dass sich mein Benutzer in der richtigen Gruppe (n) befindet, dass in fstab ein Eintrag zum Mounten der Freigabe vorhanden ist, dass die Berechtigungen korrekt festgelegt wurden und dass das automatische Mounten in den VirtualBox-Einstellungen aktiviert ist, aber immer noch nicht Dateien zu sehen.
Also habe ich die Startup Applications-App in der Ubuntu 18.04-GUI geöffnet und eine Aufgabe erstellt, die einfach "sudo mount -a" direkt beim Start ausführte. Aus irgendeinem Grund wurde der freigegebene Ordner nicht korrekt gemountet, als fstab beim Booten automatisch analysiert wurde. Das erneute Mounten schien also das Problem zu beheben. Jetzt kann ich die Dateien in der Freigabe sehen.

Verschroben
quelle
0

Ich habe hier alle Lösungen ausprobiert und keine hat funktioniert.

Was funktionierte war, Supervisor zu installieren und ein Python-Skript auszuführen.

Supervisor installieren

apt-get install supervisor

Python-Skript (meins war unter /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)

Konfigurationsdatei für Supervisor erstellen

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

Öffne supervisorctl

sudo supervisorctl

Konfiguration lesen

reread

Konfiguration hinzufügen

add shared_folders

Eugene Gekhter
quelle
0

(In meinem Fall ist mein Host-Betriebssystem Mac OS X und mein Gast-Betriebssystem Ubuntu.)

Keine der oben genannten Lösungen und die hier und hier genannten Lösungen haben für mich funktioniert. Bei allen gab es ein Problem.

Folgendes habe ich endlich getan, um das Problem zu lösen:

1- Ich habe in der VirtualBox-Benutzeroberfläche einen freigegebenen Ordner erstellt, der auf einen Ordner VMSharesin meinem Mac OS zeigt und diesen benenntwd

2- Dann habe ich die Ubuntu Guest Addition-Tools installiert (Neustart erforderlich)

3- Dann habe ich in meinem Gastbetriebssystem einen Ordner als Einhängepunkt angelegt (in meinem Fall war der Name /home/fashid/host)

4- Dann bin ich gelaufen:

sudo VBoxControl sharedfolder list

Mit diesem Befehl sollte sichergestellt werden, dass die Freigabe für das Gastbetriebssystem verfügbar ist. In der Zwischenzeit müssen Sie sie in Ihrem Gastbetriebssystem bereitstellen, um sie tatsächlich verfügbar zu machen.

Es wird etwas zeigen wie:

Shared Folder mappings (1):
01 - VMShares

Das ist der Trick! Es zeigt den tatsächlichen Namen, den Sie unterhalb des Befehls eingeben müssen, um es tatsächlich bereitzustellen und in Ihrem Gastbetriebssystem verfügbar zu machen:

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

Wussten Sie, worum es geht? Wd habe ich später nirgends benutzt. In Schritt 3 musste ich den tatsächlichen (Host-) Ordnernamen anstelle des im GUI-Dialogfeld zugewiesenen willkürlichen Namens übernehmen.

Über die obigen Schritte wurde mein Problem gelöst.

Farshid
quelle