¿Cómo montar una carpeta compartida VirtualBox al inicio?


87

Tengo Ubuntu instalado en Virtualbox. Quiero montar mi carpeta compartida VirtualBox en Ubuntu automáticamente cuando inicio sesión en Ubuntu. Puse la siguiente línea en mi ~. / Bashrc y ~ / .bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

donde windows_share es el nombre que creé con Virtualbox. Pero cada vez que inicio mi Ubuntu, me pide passwd ya que necesita sudo. ¿Hay alguna forma de montar automáticamente el recurso compartido de Windows sin ingresar la contraseña cada vez que inicio sesión?

Respuestas:


109

Para montar siempre una "carpeta compartida" de Virtual Box al arrancar un invitado Ubuntu, tenemos dos opciones. Depende de las preferencias personales qué opción funciona mejor en nuestro entorno.

1. Montar con fstab

Para montar una carpeta compartida utilizando el vboxsfsistema de archivos proporcionado con Guest Additions , primero debemos asegurarnos de que se cumplan los requisitos previos . Entonces podemos poner la siguiente línea en nuestro etc/fstabarchivo:

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

Reemplace name_of_sharey /path/to/mountpointcon su configuración individual (primero debe crearse el directorio para el punto de montaje). Vea la página de manual para el montaje <options>. Una posibilidad es montar con defaults, o dar opciones de montaje específicas (por ejemplo rw, suid, exec, auto, users).

En algunos sistemas, el vboxsfmódulo del kernel aún no está cargado en el momento en que fstabse lee en el arranque. Entonces puede ser útil agregar el vboxsfmódulo del núcleo a /etc/modules.

Algunos sistemas pueden necesitar una opción comment=systemd.automounten su entrada fstab ( fuente ).

2. Montar con Virtual Box "montaje automático":

En versiones recientes de Virtual Box, también podemos montar automáticamente carpetas compartidas en la creación:

ingrese la descripción de la imagen aquí

Después de reiniciar el invitado, esta carpeta compartida se montará en el directorio de invitados /media/<username>/sf_<name_of_share>accesible para todos los usuarios que se hayan hecho miembros del grupo vboxsf.


1
¿Cómo se cambia el directorio de montaje y el prefijo de montaje? ¿Ejecutas algunos comandos de terminal en el SO HOST o el SO GUEST?
CMCDragonkai

12
Esta característica requiere que el servicio "virtualbox-guest-utils" se haya iniciado, y en Ubuntu 14.04 este servicio se inicia más tarde que los sistemas de archivos montados. Esta es la razón del error "dispositivo no encontrado" al montar los
recursos

1
@garromark, mi única idea es crear un script emergente, que es bastante simple. Otra opción es poner la misma entrada fstab, pero agregue "noauto" para que simplemente la monte manualmente.
Kolypto

44
@kolypto, gracias por responderme. En realidad, encontré dos soluciones competitivas, solo una de las cuales funcionó para mí: la Opción 1) (Funcionó para mí), es, como dijiste, poner noautolas opciones de fstab y luego montarlas típicamente en un script de inicio (como. perfil), Opción 2) el problema principal es que vboxsf no se carga antes de que se ejecute fstab, agregue vboxsfal archivo /etc/modules, pidiéndole al kernel que cargue el módulo antes de que se ejecute fstab. Quizás esto ayude a alguien más.
Garromark

66
recuerde agregar su usuario al grupo vboxsf. Puede consultar askubuntu.com/questions/79565/add-user-to-existing-group
chinloong el

26
  1. Editar /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Antes de exit 0escribir:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Salvar

  4. (Opcional) Cree un acceso directo al escritorio o la carpeta de inicio:

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

Para iniciar sin errores como presionar S para omitir el montaje o presionar M para reparar manualmente, es posible que deba eliminar su entrada enfstab


44
Esta es la ÚNICA forma en que he encontrado que funciona, probé RC.Local con el comando de montaje normal, probé FSTAB, probé Crontab con script. ¡¡Muchas gracias!!
FreeSoftwareServers

2
Esto también funcionó para mí (en oposición a la respuesta aceptada, no estoy seguro de por qué). ¡Muchas gracias de mi parte! :)
display-name-is-missing

44
Trabajó para mi. Edité /etc/rc.localcon esto mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurita

1
En aras de los argumentos y para reflejar el caso de virtualbox: solía hacer esto al inicio sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointy terminé poniendo lo siguiente en /etc/rc.local para que funcione: ¡ mount -t vboxsf windows_share /home/dev/shared/mount_pointdonde dev es mi usuario, FYI / etc / fstab también funciona!
MediaVince

1
Su respuesta me ha funcionado, pero los directorios se montan como root. He cambiado el mountorden de rc.localsecuencia de comandos para incluir a mi identificador de usuario ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PD: si alguien está buscando un tutorial sobre cómo activar rc.localUbuntu 17.04, esto me ha funcionado. PPS No necesitaba incluir vboxsf en /etc/modules.
Mike Wittie

5

Después de una mañana agotadora probando todo lo anterior en Ubutntu 16.04 ejecutándose en Virtualbox 5.0.20 sin éxito (particularmente decepcionado de que la solución rc.local no funcionara), funcionó de la siguiente manera:

  1. Registrando desde el menú Carpetas compartidas de Virtualbox GUI el directorio requerido pero NO montando automáticamente o montando permanentemente desde Virtualbox. De lo contrario, el directorio host está montado por root y es difícil acceder a ellos por usuarios no root, incluso desde el grupo de administración.

  2. agregando una entrada simple en fstab:

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

    noautoOpción de nota : de lo contrario, el cargador de arranque falla como se ha señalado.

  3. Agregue la línea correspondiente de la /etc/sudoerssiguiente manera utilizando el comando visudo desde el SO huésped:

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

Esto permitirá que los procesos no root lo monten específicamente (ya que fstab no se puede montar con la opción 'usuario' ...)

  1. Agregue la línea correspondiente al perfil del usuario:

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

¡Ahora el subdirectorio seleccionado está listo para el usuario seleccionado al iniciar sesión!


¿Alguna vez encontraste una solución noauto?
Jörgen Sigvardsson

Esta es la única solución que funcionó para mí. Pero además, también tuve que agregar "vboxsf" a / etc / modules para asegurarme de que .profile no ejecutara los comandos de montaje antes de que vboxsf esté listo.
huyz

en lugar de usar sudo, agregue 'usuario' a la opción fstab y cualquier usuario puede montar el sistema de archivos
Lars Nordin

visite pclosmag.com/html/issues/200709/page07.html para obtener información sobre la actualización de fstab, los comentarios aquí fueron solo parcialmente útiles. La cuarta columna en fstab es una lista de opciones de comas sep agregar usuario (uid = xxx) a esa lista, por ejemplo, noauto, uid = 1000, gid = 1000
qodeninja

Hay un espacio en blanco entre rw, noauto que da como resultado un error de análisis. sin el espacio en blanco la muestra funcionó para mí
weberjn

4

Para los sistemas basados ​​en systemd más nuevos , necesita enfoques alternativos, el más simple es uno mencionado en otra respuesta a otra pregunta, que básicamente dice que debe agregar una commentopción especial a la /etc/fstabentrada:

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

Sin embargo, para que lo anterior funcione en algunos sistemas, debe marcar la casilla 'Montaje automático' en Carpetas compartidas de VirtualBox-> Agregar diálogo, lo que significa que puede terminar con algunos montajes duplicados del directorio.

Para montar un limpiador - sin directorios duplicados ni la necesidad de 'auto-montaje' - es necesario utilizar systemd de montaje y montaje automático directivas. Para hacerlo, cree dos entradas con el /usr/lib/systemd/system/nombre del punto de montaje deseado, por ejemplo, para que coincida con el punto de montaje fstab anterior, se nombrarán my_mount-src_host.mounty contendrán:

[Unit]
Description=VirtualBox shared "src" folder

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

y 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

Entonces necesitan habilitar:

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

Ahora se montarán en el arranque. Si desea montarlos de inmediato (siempre que se hayan creado las carpetas compartidas), puede hacerlo:

sudo systemctl start  my_mount-src_host.mount

Tenga en cuenta que si tiene directorios con nombres impares o guiones (-) en ellos, úselos systemd-escapepara encontrar el nombre que se escapó correctamente.


En Ubuntu 18.04, su primera solución con comment=systemd.automountopción funciona también sin el Automount VBox marcado. Luché durante días antes de encontrar tu solución, ¡Gracias!
HubertL

Es bueno saberlo: he actualizado mi respuesta para reflejar su hallazgo.
Pierz

Este funcionó en Debian 9, los otros no.
cslotty

3

Probé la solución rc.local pero no pude hacer que funcionara.
Sin embargo, descubrí que el problema parece estar relacionado con la carpeta desde la que ejecuta el comando (no tengo idea de por qué). Así que agregué una línea para cambiar el directorio a mi carpeta de inicio antes del comando de montaje, y ahora funciona.

Entonces, mi recurso compartido de Windows se llama Dropbox, mi punto de montaje es /home/jamie/Dropbox, mi nombre de usuario es jamie, esto es lo que puse en rc.local:

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

¡Brillante! Gracias. ¡Después de luchar con las otras soluciones, esto funcionó por primera vez!
Norbert Norbertson el

Tuve que agregar un sleep 2antes de montar el dispositivo.
Adriano P

2

Lo hago de un modo muy similar al propuesto anteriormente, pero estas secuencias de comandos crean lo requerido y montan o desmontan la carpeta compartida con la siguiente secuencia de comandos:

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

Guárdalo como /opt/.scripts/VBoxShared.sh.

Asegúrese de que esto se pueda ejecutar. En tipo de carcasa:

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

Ahora, agregamos una línea que ejecuta este script en rc.local:

sudo nano /etc/rc.local

y agregamos estas líneas antes de la última línea ( exit 0):

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

Guardar ( CtrlO) y cerrarlo ( CtrlX)

En este punto, montamos automáticamente todas las carpetas compartidas enumeradas <SharedFolder>en el inicio.

Para desmontarlo, solo necesitamos escribir:

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

#!/bin/bash

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

exit 0

Guardar ( CtrlO) y cerrar ( CtrlX)

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

¡Y eso es todo!


2

Aquí hay una solución de trabajo.

Como root (IE sudo su) Vaya a la carpeta de inicio (cd ~) y cree un archivo cron:
vi cronjobs
Agregue lo siguiente
@reboot sleep 15; mount -t vboxsf app / mnt / app

Guardar el archivo

Nota: reemplace la aplicación con el nombre de su carpeta compartida y / mnt / app donde desea montarla. En este caso, primero creé la aplicación de carpeta bajo mount (aplicación mkdir).

Para habilitar su cron como root (para el nombre de archivo anterior)
crontab cronjobs

Asegúrese de que cron esté activo:
crontab -l

reiniciar y se montará. El reposo de 15 segundos permite suficiente tiempo para que todo esté listo para el montaje.


rc.local en la respuesta aceptada se eliminó en una versión reciente de Ubuntu. Esta solución alternativa funciona :)
shonky linux user

0

Recientemente encontré este hilo cuando, después de actualizar a Ubuntu LTS-18 (y sin hacer cambios en VirtualBox, y después de reinstalar las extensiones y bla-de-bla), el montaje automático dejó de funcionar. Los sf_xxxdirectorios estaban presentes /media/pero ninguno de ellos estaba realmente montado.

Los intentos de montarlos /etc/fstab(como sugiere la propia documentación de VirtualBox) no funcionaron: el arranque falló en "modo de emergencia", incluso cuando modifiqué el /etc/modulesarchivo.

Lo que finalmente funcionó, aunque lo considero un truco apestoso, es el crontabtruco descrito anteriormente.

Hasta el día de hoy, no tengo idea de "qué se rompió".


0

Estaba teniendo un problema donde podía ver la carpeta compartida, pero no había archivos en ella. Entonces hice un truco similar a lo que se muestra arriba:

Me aseguré de que mi usuario estaba en los grupos correctos, y que había una entrada en fstab para montar el recurso compartido, y que los permisos estaban configurados correctamente, y que el montaje automático estaba activado en la configuración de VirtualBox, pero aún no archivos para ser vistos.
Entonces abrí la aplicación Startup Applications en la GUI de Ubuntu 18.04 y creé una tarea que simplemente ejecutó "sudo mount -a" justo en el inicio. Por alguna razón, la carpeta compartida no se estaba montando correctamente cuando fstab se analizaba automáticamente en el arranque, por lo que volver a montar todo parecía solucionar el problema. Ahora puedo ver los archivos en el recurso compartido.


0

Intenté todas las soluciones aquí y ninguna funcionó.

Lo que funcionó fue instalar el supervisor y ejecutar un script de Python.

instalar supervisor

apt-get install supervisor

script de Python (el mío estaba en /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)

crear archivo de configuración para supervisor

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 abierto

sudo supervisorctl

leer configuración

reread

agregar configuración

add shared_folders


0

(En mi caso, mi sistema operativo host es Mac OS X y mi sistema operativo invitado es ubuntu)

Ninguna de las soluciones anteriores, y las soluciones mencionadas aquí y aquí funcionaron para mí. Hubo un problema con todos ellos.

Esto es lo que finalmente hice para resolver el problema:

1- Creé una carpeta compartida en la interfaz de usuario de VirtualBox, apuntando a una carpeta nombrada VMSharesen mi Mac OS, nombrándolawd

2- Luego instalé las herramientas de Ubuntu Guest Addition (se requiere reiniciar)

3- Luego hice una carpeta en mi SO huésped como punto de montaje (en mi caso el nombre era /home/fashid/host)

4- Entonces corrí:

sudo VBoxControl sharedfolder list

Este fue el comando para garantizar que el recurso compartido esté disponible para el sistema operativo invitado, mientras que aún necesita montarlo en su sistema operativo invitado para que esté realmente disponible.

Mostrará algo como:

Shared Folder mappings (1):
01 - VMShares

Este es el truco! Muestra el nombre real que necesita poner en el siguiente comando para montarlo y hacerlo disponible en su sistema operativo invitado:

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

¿Te diste cuenta del punto? No usé wd en ningún lado más tarde. En el paso 3, necesitaba recoger el nombre real de la carpeta (host) en lugar del nombre arbitrario que asigné en el cuadro de diálogo GUI.

A través de los pasos anteriores, mi problema se resolvió.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.