시작할 때 VirtualBox 공유 폴더를 마운트하는 방법은 무엇입니까?


87

Virtualbox에 Ubuntu가 설치되어 있습니다. Ubuntu에 로그인하면 VirtualBox 공유 폴더를 Ubuntu에 자동으로 마운트하고 싶습니다. ~. / bashrc 및 ~ / .bash_profile에 다음 줄을 넣습니다.

sudo mount -t vboxsf windows_share /media/windows_share

여기서 windows_share는 Virtualbox로 만든 이름입니다. 그러나 우분투를 시작할 때마다 sudo가 필요하기 때문에 암호를 요구합니다. 로그인 할 때마다 비밀번호를 입력하지 않고 Windows 공유를 자동으로 마운트 할 수 있습니까?

답변:


109

Ubuntu 게스트를 부팅 할 때 항상 가상 상자 "공유 폴더"를 마운트하기 위해 두 가지 옵션이 있습니다. 우리의 환경에서 어떤 옵션이 가장 적합한지는 개인 취향에 달려 있습니다.

1. fstab으로 마운트

게스트 추가vboxsf 기능과 함께 제공된 파일 시스템을 사용하여 공유 폴더를 마운트하려면 먼저 필수 구성 요소가 충족 되는지 확인해야합니다 . 그런 다음 파일에 다음 줄을 넣을 수 있습니다.etc/fstab

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

교체 name_of_share/path/to/mountpoint개별 설치를 (마운트 지점에 대한 디렉토리를 먼저 생성해야합니다). mount에 대한 맨 페이지를 참조하십시오 <options>. 한 가지 가능성은로 마운트 defaults하거나 특정 마운트 옵션 (예 :)을 제공하는 것 rw, suid, exec, auto, users입니다.

일부 시스템에서는 부팅 vboxsf시 커널 모듈이 아직로드되지 않은 상태로로드됩니다 fstab. 그런 다음 vboxsf커널 모듈을 추가하는 데 도움이 될 수 있습니다 /etc/modules.

일부 시스템은 comment=systemd.automountfstab 항목 ( source )에 옵션이 필요할 수 있습니다 .

2. 가상 박스 "자동 마운팅"으로 마운트 :

최신 Virtual Box 릴리스에서는 생성시 공유 폴더를 자동으로 마운트 할 수도 있습니다.

여기에 이미지 설명을 입력하십시오

게스트를 재부팅 한 후이 공유 폴더는 /media/<username>/sf_<name_of_share>그룹의 구성원이 된 모든 사용자가 액세스 할 수 있는 게스트 디렉토리에 마운트됩니다 vboxsf.


1
마운트 디렉토리와 마운트 접두사는 어떻게 변경합니까? HOST OS 또는 GUEST OS에서 일부 터미널 명령을 실행합니까?
CMCDragonkai

12
이 기능을 사용하려면 "virtualbox-guest-utils"서비스가 시작되어 있어야하며 Ubuntu 14.04에서이 서비스는 파일 시스템이 마운트 된 후 늦게 시작됩니다. fstab을 통해 공유를 마운트 할 때 "장치를 찾을 수 없음"오류가 발생하는 이유
kolypto

1
@garromark, 유일한 아이디어는 upstart 스크립트를 만드는 것입니다. 이는 매우 간단합니다. 다른 옵션은 동일한 fstab 항목을 넣지 만 "noauto"를 추가하여 수동으로 마운트하는 것입니다.
kolypto

4
@kolypto, 다시 연락해 주셔서 감사합니다. 나는 실제로 두 가지 경쟁 솔루션을 찾았습니다. 옵션 1) (나를 위해 일했습니다)은 말했듯 noauto이 fstab 옵션을 넣은 다음 나중에 시작 스크립트 (예 :)에 마운트하는 것입니다. 프로필), 옵션 2) fstab을 실행하기 전에 vboxsf가로드되지 않는 주된 문제는 fstab을 실행하기 전에 커널에 모듈을로드하도록 요청하는 vboxsf파일에 추가 /etc/modules합니다. 아마도 이것은 다른 누군가를 도울 것입니다.
garromark

6
vboxsf 그룹에 사용자를 추가하십시오. askubuntu.com/questions/79565/add-user-to-existing-group을
chinloong

26
  1. 편집하다 /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. exit 0입력 하기 전에 :

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. 저장하기

  4. (선택 사항) 데스크탑 또는 홈 폴더에 대한 바로 가기를 만듭니다.

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

S 키 를 눌러 마운트를 건너 뛰거나 M 키 를 눌러 수동으로 복구하는 등 오류없이 부팅 하려면 항목을 삭제해야 할 수 있습니다fstab


4
이것은 내가 찾은 유일한 방법입니다. 일반 마운트 명령으로 RC.Local을 시도하고 FSTAB를 시도하고 Crontab w / script를 시도했습니다. 큰 감사합니다 !!
FreeSoftwareServers

2
이것은 나에게도 도움이되었습니다 (허용 된 답변과 반대, 이유는 확실하지 않습니다). 그래서 큰 감사합니다! :)
display-name-is-missing

4
나를 위해 일했다. 나는 이것으로 편집 /etc/rc.local했다 mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurite

1
인수를 위해 그리고 virtualbox 사례를 반영하기 위해 : 나는 이것을 시작할 때 이것을하고 / etc / sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointrc.local에 다음과 같이 넣었습니다 mount -t vboxsf windows_share /home/dev/shared/mount_point.dev는 내 사용자이며, FYI / etc / fstab도 작동합니다!
MediaVince

1
귀하의 답변은 저에게 효과적이지만 디렉토리는 루트로 마운트됩니다. 스크립트에서 사용자 아이디 ( ) 를 포함 하도록 mount명령을 변경했습니다 . 추신 : 누군가 우분투 17.04 를 켜는 방법에 대한 자습서를 찾고 있다면 이것이 효과적 입니다. PPS에 vboxsf를 포함시킬 필요가 없었습니다 . rc.local2000mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsfrc.local/etc/modules
마이크 Wittie

5

Virtualbox 5.0.20에서 실행되는 Ubutntu 16.04에서 위의 모든 것을 시도한 지친 아침 (특히 rc.local 솔루션이 작동하지 않는다는 실망)은 다음과 같이 작동했습니다.

  1. Virtualbox GUI의 공유 폴더 메뉴에서 필수 디렉토리를 등록하지만 자동 마운트 또는 Virtualbox에서 영구 마운트하지는 않습니다. 그렇지 않으면 호스트 디렉토리는 루트로 마운트되며 관리자 그룹에서도 루트가 아닌 사용자가 액세스하기가 어렵습니다.

  2. fstab에 간단한 항목 추가 :

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

    참고 noauto옵션-그렇지 않으면 언급 된대로 부트 로더가 실패합니다.

  3. /etc/sudoers게스트 OS 내에서 visudo 명령을 사용하여 다음과 같이 해당 행을 추가하십시오 .

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

이것은 루트가 아닌 프로세스가 이것을 특별히 마운트 할 수있게합니다 (fstab은 'user'옵션으로 마운트 할 수 없으므로 ...)

  1. 사용자의 .profile에 해당 라인을 추가하십시오.

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

이제 선택한 호스트 하위 디렉토리가 로그인시 선택한 사용자에 대해 준비되어 있습니다!


해결 방법을 찾으셨습니까 noauto?
Jörgen Sigvardsson

이것은 나를 위해 일한 유일한 솔루션입니다. 또한 vboxsf가 준비되기 전에 .profile이 마운트 명령을 실행하지 않도록 / etc / modules에 "vboxsf"를 추가해야했습니다.
huyz

sudo를 사용하는 대신 fstab 옵션에 'user'를 추가하면 모든 사용자가 파일 시스템을 마운트 할 수 있습니다
Lars Nordin

fstab 업데이트에 대한 정보는 pclosmag.com/html/issues/200709/page07.html 을 참조하십시오 . 여기에있는 의견은 부분적으로 만 도움이되었습니다. fstab의 네 번째 열은 쉼표로 구분 된 옵션 목록입니다 (예 : noauto, uid = 1000, gid = 1000
qodeninja

rw, noauto 사이에 공백이있어 구문 분석 오류가 발생합니다. 공백없이 샘플은 나를 위해 일했다
weberjn

4

새로운 들어 systemd 기반 시스템 당신은 다른 접근 방식이 필요 - 다른 언급 한있는 가장 간단한 대답은 다른 질문 - 기본적으로 당신은 특별한 추가 할 필요가 있다고 comment받는 옵션 /etc/fstab항목을 :

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

그러나 일부 시스템에서 위의 작업을 수행하려면 VirtualBox의 공유 폴더-> 추가 대화 상자에서 '자동 마운트'상자를 선택해야합니다. 즉, 디렉토리의 몇 개의 중복 마운트로 끝날 수 있습니다.

중복 디렉토리가없고 '자동 마운트'가 필요없는 깔끔한 마운트의 경우 systemd의 mountautomount 지시문 을 사용해야 합니다. 이렇게하려면 /usr/lib/systemd/system/원하는 마운트 포인트 이름을 따서 명명 된 두 개의 항목을 작성 하십시오. 예를 들어 fstab 마운트 포인트를 일치 시키려면 다음 my_mount-src_host.mount을 포함하십시오.

[Unit]
Description=VirtualBox shared "src" folder

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

그리고 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

그런 다음 활성화해야합니다.

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

이제 부팅시 마운트됩니다. 공유 폴더를 만든 경우 즉시 마운트하려면 다음과 같이하십시오.

sudo systemctl start  my_mount-src_host.mount

홀수 이름 또는 대시 (-)가있는 디렉토리가 있으면 systemd-escape이스케이프 된 이름을 찾는 데 사용 하십시오.


Ubuntu 18.04에서 comment=systemd.automount옵션이있는 첫 번째 솔루션 은 Automount VBox를 선택하지 않아도 작동합니다. 솔루션을 찾기 전에 며칠 동안 고생했습니다. 감사합니다!
HubertL

잘 들었습니다-귀하의 발견을 반영하여 답변을 업데이트했습니다.
Pierz

이것은 데비안 9에서 작동했지만 다른 것은 그렇지 않았습니다.
cslotty

3

rc.local 솔루션을 시도했지만 작동하지 못했습니다.
그러나 문제가 명령을 실행하는 폴더와 관련이있는 것으로 나타났습니다 (이유 이유 없음). 그래서 mount 명령 전에 디렉토리를 내 홈 폴더로 변경하는 줄을 추가했는데 이제는 작동합니다.

따라서 내 Windows 공유는 Dropbox이며 내 마운트 포인트는 /home/jamie/Dropbox이며 내 사용자 이름은 jamierc.local에 넣은 것입니다.

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

훌륭한! 감사. 다른 솔루션으로 어려움을 겪은 후 처음으로 작동했습니다!
Norbert Norbertson

sleep 2장치를 장착하기 전에 를 추가해야했습니다 .
Adriano P

2

위에서 제안한 것과 매우 유사한 모드를 사용하지만이 스크립트는 필요한 스크립트를 만들고 다음 스크립트를 사용하여 공유 폴더를 마운트하거나 마운트 해제합니다.

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

로 저장하십시오 /opt/.scripts/VBoxShared.sh.

이것을 실행할 수 있는지 확인하십시오. 쉘 유형 :

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

이제이 스크립트를 실행하는 줄을 추가합니다 rc.local:

sudo nano /etc/rc.local

마지막 줄 ( exit 0) 앞에 다음 줄을 추가합니다 .

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

저장 ( CtrlO)하고 닫습니다 ( CtrlX)

이 시점 <SharedFolder>에서 시작시 나열된 모든 공유 폴더를 자동으로 마운트합니다 .

마운트 해제하려면 다음 유형 만 필요합니다.

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

#!/bin/bash

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

exit 0

저장 ( CtrlO) 및 닫기 ( CtrlX)

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

그리고 그게 전부입니다!


2

다음은 작동하는 솔루션입니다.

루트 (IE sudo su)로 홈 폴더 (cd ~)로 이동하여 cron 파일을 작성하십시오.
vi cronjobs
다음
@reboot sleep 15; mount -t vboxsf app / mnt / app

파일을 저장

참고 : app을 공유 폴더 이름 및 마운트하려는 / mnt / app로 바꾸십시오. 이 경우 먼저 마운트 (mkdir app) 아래에 폴더 응용 프로그램을 만들었습니다.

cron을 루트 (위의 파일 이름)로 활성화하려면
crontab cronjobs

cron이 활성화되어 있는지 확인하십시오.
crontab -l

재부팅하면 마운트됩니다. 15 초의 절전 모드는 모든 것이 마운트 준비를하기에 충분한 시간을 허용합니다.


승인 된 답변의 rc.local은 최근 Ubuntu 릴리스에서 제거되었습니다. 이 대안 솔루션 작동 :)
shonky linux user

0

Ubuntu LTS-18로 업데이트 한 후 (VirtualBox를 변경하지 않고 확장 및 blah-de-blah를 다시 설치 한 후) 자동 마운트가 작동을 멈출 때 최근 에이 스레드가 발생 했습니다. sf_xxx디렉토리에 존재 /media/하지만, 그들 중 누구도 실제로 설치되지 않았다.

/etc/fstabVirtualBox 자체 문서에서 제안한대로 마운트 시도 는 작동하지 않습니다 /etc/modules. 파일을 수정 한 경우에도 부팅이 "비상 모드"로 실패했습니다 .

무엇 않았다 결국 일 - 나는 악취로 간주하지만, '해킹 -는 IS crontab위에서 설명한 트릭.

오늘날까지 나는 "무슨 일이 일어 났는지"모른다.


0

공유 폴더를 볼 수있는 문제가 있었지만 파일이 없습니다. 그래서 위에 표시된 것과 비슷한 해킹을했습니다.

사용자가 올바른 그룹에 있는지 확인하고 공유를 마운트하기위한 fstab에 항목이 있고 권한이 올바르게 설정되었으며 VirtualBox 설정에서 자동 마운트가 설정되어 있는지 확인합니다. 볼 파일.
그래서 Ubuntu 18.04 GUI에서 Startup Applications 앱을 열고 시작시 바로 "sudo mount -a"를 실행하는 작업을 만들었습니다. 어떤 이유로 든 부팅시 fstab이 자동으로 구문 분석 될 때 공유 폴더가 올바르게 마운트되지 않았으므로 모든 것을 다시 마운트하면 문제가 해결 된 것으로 보입니다. 이제 공유에서 파일을 볼 수 있습니다.


0

나는 여기서 모든 해결책을 시도했지만 아무도 효과가 없었다.

효과는 수퍼바이저를 설치하고 파이썬 스크립트를 실행하는 것이 었습니다.

감독자 설치

apt-get install supervisor

파이썬 스크립트 (내 /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)

감독자를위한 구성 파일 생성

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

열린 감독관

sudo supervisorctl

구성 읽기

reread

구성 추가

add shared_folders


0

(필자의 경우 호스트 OS는 Mac OS X이고 게스트 OS는 우분투입니다)

위의 방법 중 어느 것도, 그리고 언급 된 솔루션 여기여기이 나를 위해 일하지 않는다. 그들 모두에 문제가있었습니다.

마지막으로 문제를 해결하기 위해 수행 한 작업은 다음과 같습니다

1- VirtualBox UI에서 공유 폴더를 만들어 VMShares내 Mac OS에서 이름이 지정된 폴더를 가리키고 이름 을 지정했습니다.wd

2- 그런 다음 Ubuntu Guest Addition 도구를 설치했습니다 (다시 시작해야 함)

3- 그런 다음 게스트 OS에 폴더를 마운트 지점으로 만들었습니다 (제 경우에는 이름이 /home/fashid/host)

4- 그리고 나서 나는 달렸다 :

sudo VBoxControl sharedfolder list

이것은 게스트 OS에서 공유를 사용할 수 있도록하는 명령이었습니다. 한편 실제로 사용 가능하게하려면 게스트 OS에 공유를 마운트해야합니다.

다음과 같이 표시됩니다.

Shared Folder mappings (1):
01 - VMShares

이것은 속임수입니다! 실제로 마운트하고 게스트 OS에서 사용 가능하게하려면 아래 명령에 입력해야하는 실제 이름이 표시됩니다.

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

요점을 깨달았습니까? 나중에 어디서나 wd를 사용하지 않았습니다. 3 단계에서 GUI 대화 상자에서 지정한 임의의 이름 대신 실제 (호스트) 폴더 이름을 선택해야했습니다.

위의 단계를 통해 내 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.