Làm cách nào để gắn thư mục chia sẻ VirtualBox khi khởi động?


87

Tôi đã cài đặt Ubuntu trong Virtualbox. Tôi muốn tự động gắn thư mục chia sẻ VirtualBox của mình vào Ubuntu khi đăng nhập Ubuntu. Tôi đặt dòng sau vào ~. / Bashrc và ~ / .bash_profile:

sudo mount -t vboxsf windows_share /media/windows_share

trong đó windows_share là tên tôi đã tạo bằng Virtualbox. Nhưng mỗi khi tôi khởi động Ubuntu, nó sẽ hỏi tôi về passwd vì nó cần sudo. Có cách nào để tự động gắn Windows share mà không cần nhập mật khẩu mỗi khi tôi đăng nhập không?

Câu trả lời:


109

Để luôn gắn một "thư mục chia sẻ" Virtual Box khi khởi động máy khách Ubuntu, chúng tôi có hai tùy chọn. Tùy thuộc vào sở thích cá nhân, tùy chọn nào hoạt động tốt nhất trong cài đặt của chúng tôi.

1. Gắn kết với fstab

Để gắn kết thư mục dùng chung bằng vboxsfhệ thống tệp được cung cấp với Khách bổ sung, trước tiên chúng tôi cần đảm bảo các điều kiện tiên quyết được đáp ứng . Sau đó, chúng tôi có thể đặt dòng sau trong etc/fstabtập tin của chúng tôi :

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

Thay thế name_of_share/path/to/mountpointvới thiết lập cá nhân của bạn (thư mục cho mountpoint phải được tạo trước). Xem trang chủ để gắn kết <options>. Một khả năng là gắn kết với defaults, hoặc đưa ra các tùy chọn gắn kết cụ thể (ví dụ rw, suid, exec, auto, users).

Trên một số hệ thống, vboxsfmô-đun hạt nhân chưa được tải tại thời điểm fstabđược đọc khi khởi động. Sau đó, nó có thể giúp nối thêm vboxsfmô-đun hạt nhân vào /etc/modules.

Một số hệ thống có thể cần tùy chọn comment=systemd.automounttrong mục nhập fstab ( nguồn ) của chúng.

2. Gắn với hộp ảo "tự động gắn":

Trong các bản phát hành gần đây của Virtual Box, chúng tôi cũng có thể tự động gắn các thư mục được chia sẻ khi tạo:

nhập mô tả hình ảnh ở đây

Sau khi khởi động lại khách, thư mục dùng chung này sẽ được gắn vào thư mục khách /media/<username>/sf_<name_of_share>có thể truy cập được đối với tất cả người dùng đã là thành viên của nhóm vboxsf.


1
Làm thế nào để bạn thay đổi thư mục gắn kết và tiền tố gắn kết? Bạn có chạy một số lệnh đầu cuối trong HOST OS hoặc GUEST OS không?
CMCDragonkai

12
Tính năng này yêu cầu dịch vụ "virtualbox-guest-utils" đã bắt đầu và trên Ubuntu 14.04, dịch vụ này bắt đầu muộn hơn so với các hệ thống tập tin được gắn kết. Đây là lý do cho lỗi "không tìm thấy thiết bị" khi gắn cổ phiếu qua fstab
kolypto

1
@garromark, ý tưởng duy nhất của tôi là tạo ra một kịch bản mới, khá đơn giản. Một tùy chọn khác là đặt cùng một mục nhập fstab, nhưng thêm "noauto" để bạn chỉ cần gắn nó bằng tay.
kolypto

4
@kolypto, cảm ơn vì đã quay lại với tôi. Tôi thực sự đã tìm thấy hai giải pháp cạnh tranh, chỉ có một giải pháp phù hợp với tôi: Lựa chọn 1) (Làm việc cho tôi), như bạn đã nói, để đưa noautovào các tùy chọn fstab và sau đó gắn kết điển hình vào tập lệnh khởi động (chẳng hạn như. hồ sơ), Tùy chọn 2) vấn đề chính là vboxsf không được tải trước khi chạy fstab, nối vboxsfvào tệp /etc/modules, yêu cầu kernal tải mô-đun trước khi fstab được chạy. Có lẽ điều này sẽ giúp người khác.
garromark

6
hãy nhớ thêm người dùng của bạn vào nhóm vboxsf. Bạn có thể tham khảo tại Askubfox.com/questions/79565/add-user-to-ex hiện
group

26
  1. Biên tập /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Trước khi exit 0gõ:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Lưu lại

  4. (Tùy chọn) Tạo lối tắt đến thư mục máy tính để bàn hoặc thư mục chính:

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

Để khởi động mà không gặp lỗi như nhấn S để bỏ qua mount hoặc nhấn M để sửa chữa thủ công, bạn có thể phải xóa mục nhập của mình trongfstab


4
Đây là cách DUY NHẤT tôi đã tìm thấy để làm việc, đã thử RC.Local với lệnh mount thông thường, thử FSTAB, thử Crontab w / script. Lời cảm ơn to lớn!!
FreeSoftwareServers

2
Điều này cũng làm việc cho tôi (trái ngược với câu trả lời được chấp nhận, không hoàn toàn chắc chắn tại sao). Vì vậy, một lời cảm ơn lớn từ tôi! :)
tên hiển thị bị thiếu

4
Đã làm cho tôi. Tôi đã chỉnh sửa /etc/rc.localvới điều này mount -t vboxsf [-o OPTIONS] sharename mountpoint.
thần kinh

1
Vì lợi ích của các đối số và để phản ánh trường hợp hộp ảo: tôi đã từng làm điều này khi bắt đầu sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointvà cuối cùng đưa phần sau vào /etc/rc.local để nó hoạt động: mount -t vboxsf windows_share /home/dev/shared/mount_pointtrong đó dev là người dùng của tôi, FYI / etc / fstab cũng hoạt động!
MediaVince

1
Câu trả lời của bạn đã làm việc cho tôi, nhưng các thư mục được gắn kết với quyền root. Tôi đã thay đổi mountlệnh trong rc.localtập lệnh để bao gồm id người dùng của tôi ( 2000) : mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Nếu bất cứ ai đang tìm kiếm một hướng dẫn về cách bật rc.localUbuntu 17.04 thì điều này đã làm việc cho tôi. PPS Tôi không cần đưa vboxsf vào /etc/modules.
Mike Wittie

5

Sau một buổi sáng mệt mỏi khi thử tất cả những điều trên trong Ubutntu 16.04 chạy trong Virtualbox 5.0.20 không thành công (đặc biệt thất vọng vì giải pháp RC.local không hoạt động), nó đã hoạt động bằng cách:

  1. Đăng ký từ menu Shared Folders của Virtualbox GUI thư mục cần thiết nhưng KHÔNG tự động kết nối nó hoặc gắn vĩnh viễn từ Virtualbox. Mặt khác, máy chủ lưu trữ được gắn kết bằng root và thật khó để truy cập bởi người dùng không phải root ngay cả từ nhóm quản trị viên.

  2. thêm mục đơn giản trong fstab:

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

    noautoTùy chọn lưu ý - nếu không bộ tải khởi động không thành công như đã được lưu ý.

  3. Thêm dòng tương ứng vào /etc/sudoersnhư sau bằng cách sử dụng lệnh visudo từ bên trong HĐH khách:

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

Điều này sẽ cho phép các quy trình không root có thể gắn kết cụ thể này (vì fstab không thể gắn kết với tùy chọn 'người dùng' ...)

  1. Thêm dòng tương ứng vào .profile của người dùng:

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

Bây giờ, thư mục con được chọn đã sẵn sàng cho người dùng đã chọn khi đăng nhập!


Bạn đã bao giờ tìm thấy một cách giải quyết cho noauto?
Jörgen Sigvardsson

Đây là giải pháp duy nhất làm việc cho tôi. Nhưng ngoài ra, tôi cũng phải thêm "vboxsf" vào / etc / mô-đun để đảm bảo rằng .profile không chạy các lệnh mount trước khi vboxsf sẵn sàng.
huyz

thay vì sử dụng sudo, hãy thêm 'người dùng' vào tùy chọn fstab và bất kỳ người dùng nào cũng có thể gắn kết hệ thống tập tin
Lars Nordin

xem pclosmag.com/html/issues/200709/page07.html để biết thông tin về việc cập nhật fstab, các ý kiến ​​ở đây chỉ hữu ích một phần. Cột thứ tư trong fstab là danh sách các dấu phẩy của các tùy chọn thêm người dùng (uid = xxx) vào danh sách đó, ví dụ noauto, uid = 1000, gid = 1000
qodeninja

Có một khoảng trống giữa rw, noauto dẫn đến lỗi phân tích cú pháp. không có mẫu trống làm việc cho tôi
weberjn

4

Đối với các hệ thống dựa trên hệ thống mới hơn, bạn cần các phương pháp thay thế - cách đơn giản nhất được đề cập trong câu trả lời khác cho câu hỏi khác - về cơ bản nói rằng bạn cần thêm một commenttùy chọn đặc biệt cho /etc/fstabmục nhập:

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

Tuy nhiên, để các tính năng trên hoạt động trên một số hệ thống, bạn cần kiểm tra hộp 'Tự động gắn kết' trong Thư mục được chia sẻ của VirtualBox-> Thêm hội thoại, có nghĩa là bạn có thể kết thúc với một vài lần gắn kết của thư mục.

Đối với một trình dọn dẹp gắn kết - mà không có thư mục trùng lặp cũng không cần 'Auto-mount' - bạn cần phải sử dụng systemd của núiautomount chỉ thị. Để làm như vậy, hãy tạo hai mục nhập /usr/lib/systemd/system/được đặt tên theo điểm gắn kết mong muốn của bạn, ví dụ để khớp với điểm gắn kết fstab ở trên, chúng sẽ được đặt tên my_mount-src_host.mountvà chứa:

[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

Sau đó, họ cần kích hoạt:

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

Bây giờ họ sẽ gắn kết khi khởi động. Nếu bạn muốn gắn kết chúng ngay lập tức (với điều kiện Thư mục dùng chung đã được tạo), bạn có thể làm như vậy:

sudo systemctl start  my_mount-src_host.mount

Lưu ý nếu bạn có các thư mục có tên lẻ hoặc dấu gạch ngang (-) trong đó thì hãy sử dụng systemd-escapeđể tìm tên thoát thích hợp.


Trên Ubuntu 18.04, giải pháp đầu tiên của bạn với comment=systemd.automounttùy chọn cũng hoạt động mà không cần kiểm tra Automount VBox. Tôi đã vật lộn trong nhiều ngày trước khi tìm ra giải pháp của bạn, Cảm ơn!
HubertL

Thật tốt khi nghe - Tôi đã cập nhật câu trả lời của mình để phản ánh phát hiện của bạn.
Pierz

Cái này hoạt động trên Debian 9, những cái khác thì không.
cslotty

3

Tôi đã thử giải pháp RC.local nhưng không thể làm cho nó hoạt động được.
Tuy nhiên tôi phát hiện ra vấn đề dường như có liên quan đến thư mục bạn chạy lệnh từ (không biết tại sao). Vì vậy, tôi đã thêm một dòng để thay đổi thư mục vào thư mục nhà của tôi trước lệnh mount và bây giờ nó hoạt động.

Vì vậy, chia sẻ windows của tôi được gọi Dropbox, mountpoint của tôi là /home/jamie/Dropbox, tên người dùng của tôi là jamie, đây là những gì tôi đặt trong RC.local:

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

Xuất sắc! cảm ơn. Sau khi vật lộn với các giải pháp khác, lần đầu tiên làm việc này!
Norbert Norbertson

Tôi đã phải thêm một sleep 2trước khi gắn thiết bị.
Adriano P

2

Tôi thực hiện nó ở chế độ rất giống với đề xuất ở trên nhưng các tập lệnh này tạo ra yêu cầu và gắn kết hoặc ngắt kết nối thư mục dùng chung với tập lệnh sau:

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

Lưu nó như /opt/.scripts/VBoxShared.sh.

Hãy chắc chắn rằng điều này có thể được chạy. Trên loại vỏ:

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

Bây giờ, chúng tôi thêm một dòng chạy tập lệnh này trên rc.local:

sudo nano /etc/rc.local

và chúng tôi thêm các dòng này trước dòng cuối cùng ( exit 0):

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

Lưu ( CtrlO) và đóng nó ( CtrlX)

Tại thời điểm này, chúng tôi tự động gắn kết tất cả các thư mục chia sẻ được liệt kê <SharedFolder>khi khởi động.

Để ngắt kết nối, chúng ta chỉ cần loại:

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

#!/bin/bash

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

exit 0

Lưu ( CtrlO) và đóng ( CtrlX)

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

Và đó là tất cả!


2

Đây là một giải pháp làm việc.

Với quyền root (IE sudo su) Chuyển đến thư mục gốc (cd ~) và tạo tệp cron:
vi cronjobs
Thêm
@reboot sau đây ngủ 15; gắn kết -t vboxsf ứng dụng / mnt / ứng dụng

Lưu tập tin

Lưu ý: thay thế ứng dụng bằng tên thư mục dùng chung và / mnt / ứng dụng mà bạn muốn gắn kết. Trong trường hợp này, tôi đã tạo ứng dụng thư mục theo mount (ứng dụng mkdir) trước tiên.

Để kích hoạt cron của bạn dưới quyền root (đối với tên tệp ở trên)
crontab cronjobs

Đảm bảo cron đang hoạt động:
crontab -l

khởi động lại và nó sẽ được gắn kết. Giấc ngủ 15 giây cho phép đủ thời gian để mọi thứ sẵn sàng cho việc gắn kết.


RC.local trong câu trả lời được chấp nhận đã bị xóa trong bản phát hành Ubuntu gần đây. Giải pháp thay thế này hoạt động :)
người dùng linux shonky

0

Gần đây tôi đã gặp chủ đề này khi, sau khi cập nhật lên Ubuntu LTS-18 (và không thay đổi bất cứ điều gì với VirtualBox, và sau khi cài đặt lại các tiện ích mở rộng và blah-de-blah), tự động gắn kết ngừng hoạt động. Các sf_xxxthư mục đã có mặt /media/nhưng không ai trong số họ thực sự được gắn kết.

Nỗ lực gắn kết chúng /etc/fstab(như được đề xuất bởi tài liệu riêng của VirtualBox) đã không hoạt động: khởi động không thành "chế độ khẩn cấp", ngay cả khi tôi đã sửa đổi /etc/modulestệp.

đã cuối cùng làm việc - mặc dù tôi coi nó như là một stinkin' hack - là crontablừa được mô tả ở trên.

Cho đến hôm nay, tôi không có ý tưởng "những gì đã phá vỡ."


0

Tôi đã gặp sự cố khi tôi có thể xem thư mục dùng chung, nhưng không có tệp nào trong đó. Vì vậy, tôi đã thực hiện một hack tương tự như những gì được hiển thị ở trên:

Tôi chắc chắn rằng người dùng của tôi đã ở trong nhóm chính xác và có một mục trong fstab để gắn chia sẻ và các quyền được đặt chính xác và tự động gắn kết trong cài đặt VirtualBox, nhưng vẫn không có tập tin được nhìn thấy.
Vì vậy, tôi đã mở ứng dụng Ứng dụng khởi động trong GUI Ubuntu 18.04 và tạo một tác vụ chỉ đơn giản là chạy "sudo mount -a" ngay khi khởi động. Vì bất kỳ lý do gì, thư mục chia sẻ không được gắn chính xác khi fstab được tự động phân tích cú pháp khi khởi động, do đó, việc gắn lại mọi thứ dường như để khắc phục sự cố. Bây giờ tôi có thể xem các tập tin trong chia sẻ.


0

Tôi đã thử tất cả các giải pháp ở đây và không có giải pháp nào hiệu quả.

Điều làm việc là cài đặt trình giám sát và chạy một kịch bản python.

cài đặt giám sát

apt-get install supervisor

kịch bản python (của tôi là tại / home / ubfox / 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)

tạo tập tin cấu hình cho người giám sát

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

giám sát mở

sudo supervisorctl

đọc cấu hình

reread

thêm cấu hình

add shared_folders


0

(Trong trường hợp của tôi, HĐH máy chủ của tôi là Mac OS X và HĐH khách của tôi là Ubuntu)

Không có giải pháp nào ở trên, và các giải pháp được đề cập ở đâyở đây làm việc cho tôi. Có một vấn đề với tất cả bọn họ.

Đây là những gì tôi cuối cùng đã làm để giải quyết vấn đề:

1- Tôi đã tạo một thư mục dùng chung trong VirtualBox UI, chỉ vào thư mục có tên VMSharestrong Mac OS của tôi, đặt tên cho nówd

2- Sau đó, tôi đã cài đặt công cụ Ubuntu Guest Addition (yêu cầu khởi động lại)

3- Sau đó, tôi tạo một thư mục trong hệ điều hành khách của mình làm điểm gắn kết (trong trường hợp của tôi là tên /home/fashid/host)

4 - Sau đó tôi chạy:

sudo VBoxControl sharedfolder list

Đây là lệnh được đảm bảo rằng chia sẻ có sẵn cho hệ điều hành khách, trong khi đó bạn vẫn cần phải gắn nó vào hệ điều hành khách của mình để làm cho nó thực sự khả dụng.

Nó sẽ hiển thị một cái gì đó như:

Shared Folder mappings (1):
01 - VMShares

Đây là mẹo! Nó đang hiển thị tên thực mà bạn cần đặt dưới đây để thực sự gắn kết nó và làm cho nó có sẵn trong hệ điều hành khách của bạn:

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

Bạn đã nhận ra điểm? Tôi đã không sử dụng wd bất cứ nơi nào sau đó. Trong bước 3, tôi cần chọn tên thư mục (máy chủ) thực tế thay vì tên tùy ý tôi gán trong hộp thoại GUI.

Qua các bước trên, vấn đề của tôi đã được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.