Como montar uma pasta compartilhada do VirtualBox na inicialização?

87

Eu tenho o Ubuntu instalado no Virtualbox. Quero montar minha pasta compartilhada do VirtualBox no Ubuntu automaticamente quando eu fizer o login no Ubuntu. Coloquei a seguinte linha no meu ~. / Bashrc e ~ / .bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

onde windows_share é o nome que eu criei com o Virtualbox. Mas toda vez que inicio o meu Ubuntu, ele solicita a senha, pois precisa do sudo. Existe alguma maneira de montar automaticamente o compartilhamento do Windows sem digitar a senha toda vez que eu faço login?

tonga
fonte

Respostas:

109

Para montar sempre uma "pasta compartilhada" do Virtual Box na inicialização de um convidado do Ubuntu, temos duas opções. Depende da preferência pessoal qual opção funciona melhor em nosso ambiente.

1. Monte com fstab

Para montar uma pasta compartilhada usando o vboxsfsistema de arquivos fornecido com o Guest Additions , primeiro precisamos garantir que os pré-requisitos sejam atendidos . Em seguida, podemos colocar a seguinte linha em nosso etc/fstabarquivo:

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

Substitua name_of_sharee /path/to/mountpointpor sua configuração individual (o diretório do ponto de montagem deve ser criado primeiro). Veja a página de manual para montagem <options>. Uma possibilidade é montar com defaults, ou dar opções específicas de montagem (por exemplo rw, suid, exec, auto, users).

Em alguns sistemas, o vboxsfmódulo do kernel ainda não está carregado no momento em que fstabé lido na inicialização. Pode ser útil anexar o vboxsfmódulo do kernel ao /etc/modules.

Alguns sistemas podem precisar de opção comment=systemd.automountem sua entrada fstab ( origem ).

2. Montagem com Virtual Box "montagem automática":

Nas versões recentes do Virtual Box, também podemos montar automaticamente pastas compartilhadas na criação:

insira a descrição da imagem aqui

Após uma reinicialização do convidado, essa pasta compartilhada será montada no diretório de visitantes /media/<username>/sf_<name_of_share>acessível a todos os usuários que se tornaram membros do grupo vboxsf.

Takkat
fonte
1
Como você altera o diretório de montagem e o prefixo de montagem? Você executa alguns comandos de terminal no SO HOST ou no SO GUEST?
precisa saber é o seguinte
12
Esse recurso requer que o serviço "virtualbox-guest-utils" tenha sido iniciado e no Ubuntu 14.04 esse serviço é iniciado depois que os sistemas de arquivos são montados. Esta é a razão para o "dispositivo não encontrado" erro ao montar as ações por meio fstab
kolypto
1
@garromark, minha única idéia é criar um script inicial, que é bastante simples. Outra opção é colocar a mesma entrada fstab, mas adicione "noauto" para montá-la manualmente.
Kolypto 19/05
4
@ kolypto, obrigado por voltar para mim. Na verdade, encontrei duas soluções concorrentes, apenas uma delas funcionou para mim: a opção 1) (funcionou para mim), é, como você disse, colocar noautoas opções do fstab e depois montar normalmente em um script de inicialização (como. profile), Opção 2) o principal problema é que o vboxsf não é carregado antes da execução do fstab, anexa vboxsfao arquivo /etc/modules, pedindo ao kernal para carregar o módulo antes da execução do fstab. Talvez isso ajude alguém.
garromark
6
lembre-se de adicionar seu usuário ao grupo vboxsf. Você pode consultar askubuntu.com/questions/79565/add-user-to-existing-group
chinloong
26
  1. Editar /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Antes do exit 0tipo:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Salve 

  4. (Opcional) Crie um atalho para a área de trabalho ou pasta pessoal:

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

Para inicializar sem erros, como pressionar S para pular a montagem ou pressionar M para reparar manualmente, pode ser necessário excluir sua entrada emfstab

Fred Collins
fonte
4
Esta é a única maneira que eu encontrei para trabalhar, tentei RC.Local com o comando regular mount, tentei FSTAB, tentei Crontab com script. Enorme obrigado !!
FreeSoftwareServers
2
Isso funcionou para mim também (em oposição à resposta aceita, não sei por que). Então, um grande obrigado de mim! :)
nome-de-exibição-ausente-
4
Trabalhou para mim. Eu editei /etc/rc.localcom isso mount -t vboxsf [-o OPTIONS] sharename mountpoint.
Neurite
1
Por razões de argumentos e para refletir o caso do virtualbox: eu costumava fazer isso no início sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointe acabei colocando o seguinte em /etc/rc.local para que funcionasse: mount -t vboxsf windows_share /home/dev/shared/mount_pointonde dev é meu usuário, FYI / etc / fstab também funciona!
MediaVince
1
Sua resposta funcionou para mim, mas os diretórios são montados como raiz. Mudei o mountcomando no rc.localscript para incluir o meu ID de usuário ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Se alguém estiver procurando por um tutorial sobre como ativar o rc.localUbuntu 17.04, isso funcionou para mim. PPS Não era necessário incluir o vboxsf /etc/modules.
25817 Mike Wittie
5

Após uma manhã exaustiva, tentando todas as opções acima no Ubutntu 16.04, executando o Virtualbox 5.0.20 sem êxito (particularmente desapontado por a solução rc.local não funcionar), ele funcionou da seguinte maneira:

  1. Registrando no menu Pastas Compartilhadas da GUI do Virtualbox o diretório necessário, mas NÃO montando automaticamente ou montando permanentemente no Virtualbox. Caso contrário, o diretório do host é montado pelo root e é difícil acessar por usuários não raiz, mesmo do grupo de administradores.

  2. adicionando entrada simples no fstab:

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

    Nota noautoopção - caso contrário, o carregador de inicialização falhará como foi observado.

  3. Adicione a linha correspondente da /etc/sudoersseguinte forma, usando o comando visudo de dentro do SO convidado:

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

Isso permitirá que processos não raiz montem isso especificamente (como o fstab não pode ser montado com a opção 'usuário' ...)

  1. Adicione a linha correspondente ao .profile do usuário:

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

Agora o subdiretor do host selecionado está pronto para o usuário selecionado no login!

Michael Moutoussis
fonte
Você já encontrou uma solução alternativa noauto?
Jörgen Sigvardsson 29/11
Esta é a única solução que funcionou para mim. Além disso, também precisei adicionar "vboxsf" ao / etc / modules para garantir que o .profile não executasse os comandos mount antes que o vboxsf estivesse pronto.
huyz
em vez de usar sudo, adicione 'user' para a opção fstab e qualquer usuário pode montar o sistema de arquivos
Lars Nordin
consulte pclosmag.com/html/issues/200709/page07.html para obter informações sobre a atualização do fstab, os comentários aqui foram apenas parcialmente úteis. A quarta coluna na fstab é uma vírgula lista de opções de setembro adicionar utilizador (uid = xxx) para que a lista por exemplo noauto, uid = 1000, GID = 1,000
qodeninja
Há um espaço em branco entre rw, noauto que resulta em um erro de análise. sem o espaço em branco da amostra trabalhou para mim
weberjn
4

Por mais recentes Systemd sistemas baseados você precisa abordagens alternativas - o mais simples de ser mencionado em outra resposta a outra pergunta - que basicamente diz que você precisa adicionar um especial commentopção para a /etc/fstabentrada:

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

No entanto, para que o procedimento acima funcione em alguns sistemas, você precisa marcar a caixa 'Montagem automática' na caixa de diálogo Pastas compartilhadas do VirtualBox-> Adicionar, o que significa que você pode acabar com algumas montagens duplicadas do diretório.

Para uma montagem mais limpa - sem diretórios duplicados nem a necessidade de 'Montagem automática' - você precisa usar as diretivas de montagem e montagem automática do systemd . Para fazer isso, crie duas entradas /usr/lib/systemd/system/nomeadas com o nome do ponto de montagem desejado, por exemplo, para corresponder ao ponto de montagem fstab acima, elas seriam nomeadas my_mount-src_host.mounte conterão:

[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

Então eles precisam ativar:

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

Agora eles serão montados na inicialização. Se você deseja montá-los imediatamente (desde que as Pastas Compartilhadas tenham sido criadas), faça isso:

sudo systemctl start  my_mount-src_host.mount

Observe que se você possui diretórios com nomes ou traços estranhos (-), use-o systemd-escapepara encontrar o nome de escape apropriado.

Pierz
fonte
No Ubuntu 18.04, sua primeira solução com comment=systemd.automountopção funciona também sem o Automount VBox marcado. Eu lutei por dias antes de encontrar sua solução, obrigado!
HubertL 02/02
É bom ouvir - atualizei minha resposta para refletir sua descoberta.
Pierz 02/02
Este funcionou no Debian 9, os outros não.
cslotty 10/10
3

Tentei a solução rc.local, mas não consegui fazê-la funcionar.
No entanto, descobri que o problema parece estar relacionado à pasta da qual você executa o comando (não faz ideia do porquê). Então, adicionei uma linha para alterar o diretório para minha pasta pessoal antes do comando mount, e agora ele funciona.

Então, meu compartilhamento do Windows é chamado Dropbox, meu ponto de montagem é /home/jamie/Dropbox, meu nome de usuário é jamie, é isso que eu coloco no rc.local:

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
DeepFried
fonte
Brilhante! obrigado. Depois de lutar com as outras soluções, isso funcionou pela primeira vez!
Norbert Norbertson
Eu tive que adicionar um sleep 2antes de montar o dispositivo.
Adriano P
2

Eu faço isso de um modo muito semelhante no foi proposto acima, mas esses scripts criam o necessário e montam ou desmontam a pasta compartilhada com o seguinte 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

Salve como /opt/.scripts/VBoxShared.sh.

Certifique-se de que isso possa ser executado. No tipo de casca:

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

Agora, adicionamos uma linha que executa esse script rc.local:

sudo nano /etc/rc.local

e adicionamos estas linhas antes da última linha ( exit 0):

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

Salvar ( CtrlO) e fechá-lo ( CtrlX)

Neste ponto, montamos automaticamente todas as pastas compartilhadas listadas <SharedFolder>na inicialização.

Para desmontá-lo, precisamos apenas do tipo:

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

#!/bin/bash

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

exit 0

Salvar ( CtrlO) e fechar ( CtrlX)

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

E isso é tudo!

Banny
fonte
2

Aqui está uma solução funcional.

Como root (IE sudo su) Vá para a pasta inicial (cd ~) e crie um arquivo cron:
vi cronjobs
Adicione o seguinte
@reboot sleep 15; mount -t aplicativo vboxsf / mnt / app

Salvar Arquivo

Nota: substitua o aplicativo pelo nome da pasta compartilhada e / mnt / app onde você deseja montá-lo. Nesse caso, criei o aplicativo de pasta sob montagem (aplicativo mkdir) primeiro.

Para habilitar seu cron como root (para o nome do arquivo acima)
crontab cronjobs

Verifique se o cron está ativo:
crontab -l

reinicie e ele será montado. Um sono de 15 segundos permite tempo suficiente para que tudo esteja pronto para a montagem.

Stephen
fonte
rc.local na resposta aceita foi removido em uma versão recente do Ubuntu. Esta solução alternativa funciona :) #
4400 shonky linux user
0

Recentemente, encontrei esse tópico quando, após atualizar para o Ubuntu LTS-18 (e não fazer nenhuma alteração no VirtualBox, e depois de reinstalar as extensões e o blá-de-blá), a montagem automática parou de funcionar. Os sf_xxxdiretórios estavam presentes, /media/mas nenhum deles foi realmente montado.

As tentativas de montá-las /etc/fstab(como sugerido pela documentação do VirtualBox) não funcionaram: a inicialização falhou no "modo de emergência", mesmo quando eu havia modificado o /etc/modulesarquivo.

O que acabou por funcionar - embora eu o considere um hack fedido - é o crontabtruque descrito acima.

Até hoje, eu não tenho ideia do que quebrou.

Mike Robinson
fonte
0

Eu estava com um problema em que podia ver a pasta compartilhada, mas não havia arquivos nela. Então eu fiz um hack semelhante ao que foi mostrado acima:

Verifiquei se meu usuário estava no (s) grupo (s) correto (s) e se havia uma entrada no fstab para montar o compartilhamento, que as permissões foram definidas corretamente e se a montagem automática estava nas configurações do VirtualBox, mas ainda não existe. arquivos a serem vistos.
Então, eu abri o aplicativo Startup Applications na GUI do Ubuntu 18.04 e criei uma tarefa que simplesmente executava "sudo mount -a" logo na inicialização. Por qualquer motivo, a pasta compartilhada não estava sendo montada corretamente quando o fstab foi analisado automaticamente na inicialização, portanto, remontar tudo parecia corrigir o problema. Agora eu posso ver os arquivos no compartilhamento.

Cranky
fonte
0

Eu tentei todas as soluções aqui e nenhuma funcionou.

O que funcionou foi instalar o supervisor e executar um script python.

supervisor de instalação

apt-get install supervisor

script python (o meu estava em /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)

criar arquivo de configuração 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

supervisorctl aberto

sudo supervisorctl

ler configuração

reread

adicionar configuração

add shared_folders

Eugene Gekhter
fonte
0

(No meu caso, meu sistema operacional host é o Mac OS X e o sistema operacional convidado é o ubuntu)

Nenhuma das soluções acima e as soluções mencionadas aqui e aqui funcionaram para mim. Houve um problema com todos eles.

Aqui está o que finalmente fiz para resolver o problema:

1- Criei uma pasta compartilhada na interface do VirtualBox, apontando para uma pasta nomeada VMSharesno meu Mac OS, nomeando-awd

2- Em seguida, instalei as ferramentas Ubuntu Guest Addition (é necessário reiniciar)

3- Criei uma pasta no meu sistema operacional convidado como o ponto de montagem (no meu caso, o nome era /home/fashid/host)

4- Então eu corri:

sudo VBoxControl sharedfolder list

Este foi o comando a ser assegurado de que o compartilhamento esteja disponível para o SO convidado, enquanto isso você ainda precisará montá-lo no SO convidado para torná-lo realmente disponível.

Ele mostrará algo como:

Shared Folder mappings (1):
01 - VMShares

Esse é o truque! Ele mostra o nome real que você precisa colocar abaixo do comando para montá-lo e disponibilizá-lo no sistema operacional convidado:

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

Você percebeu o ponto? Eu não usei o wd em nenhum lugar mais tarde. Na etapa 3, eu precisava selecionar o nome da pasta real (host) em vez do nome arbitrário que atribuí na caixa de diálogo da GUI.

Através das etapas acima, meu problema foi resolvido.

Farshid
fonte