Bagaimana cara memasang folder bersama VirtualBox saat startup?

87

Saya sudah menginstal Ubuntu di Virtualbox. Saya ingin memasang folder bersama VirtualBox saya di Ubuntu secara otomatis ketika saya masuk Ubuntu. Saya meletakkan baris berikut di ~. / Bashrc dan ~ / .bash_profile saya:

sudo mount -t vboxsf windows_share /media/windows_share

di mana windows_share adalah nama yang saya buat dengan Virtualbox. Tetapi setiap kali saya memulai Ubuntu, ia meminta passwd karena membutuhkan sudo. Apakah ada cara untuk secara otomatis me-mount share Windows tanpa memasukkan kata sandi setiap kali saya masuk?

tonga
sumber

Jawaban:

109

Untuk selalu memasang "folder bersama" Kotak Virtual saat mem-boot tamu Ubuntu kami memiliki dua opsi. Terserah preferensi pribadi pilihan mana yang paling berhasil dalam pengaturan kami.

1. Pasang dengan fstab

Untuk memasang folder bersama menggunakan sistem vboxsffile yang disediakan dengan Penambahan Tamu, pertama-tama kita perlu memastikan prasyarat terpenuhi . Maka kita dapat meletakkan baris berikut di etc/fstabfile kita :

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

Ganti name_of_sharedan /path/to/mountpointdengan pengaturan pribadi Anda (direktori untuk mountpoint harus dibuat terlebih dahulu). Lihat halaman manual untuk mount <options>. Satu kemungkinan adalah mount dengan defaults, atau untuk memberikan opsi mount tertentu (misalnya rw, suid, exec, auto, users).

Pada beberapa sistem, vboxsfmodul kernel belum dimuat saat fstabdibaca saat boot. Kemudian dapat membantu untuk menambahkan vboxsfmodul kernel ke /etc/modules.

Beberapa sistem mungkin memerlukan opsi comment=systemd.automountdalam entri fstab mereka ( sumber ).

2. Pasang dengan Virtual Box "pemasangan otomatis":

Dalam rilis terbaru dari Virtual Box kami juga dapat secara otomatis me-mount folder bersama pada pembuatan:

masukkan deskripsi gambar di sini

Setelah reboot tamu, folder bersama ini akan dipasang ke direktori tamu yang /media/<username>/sf_<name_of_share>dapat diakses oleh semua pengguna yang telah menjadi anggota grup vboxsf.

Takkat
sumber
1
Bagaimana Anda mengubah direktori mount dan mount prefix? Apakah Anda menjalankan beberapa perintah terminal di OS HOST atau OS TAMU?
CMCDragonkai
12
Fitur ini mensyaratkan bahwa layanan "virtualbox-guest-utils" telah dimulai, dan pada Ubuntu 14.04 layanan ini dimulai lebih lambat daripada sistem file yang dipasang. Ini adalah alasan untuk kesalahan "device not found" ketika memasang saham melalui fstab
kolypto
1
@garromark, satu-satunya ide saya adalah membuat skrip pemula, yang cukup sederhana. Pilihan lain adalah dengan memasukkan entri fstab yang sama, tetapi tambahkan "noauto" sehingga Anda cukup memasangnya secara manual.
kolypto
4
@ polypto, terima kasih sudah kembali ke saya. Saya sebenarnya menemukan dua solusi yang bersaing, hanya satu di antaranya yang berhasil untuk saya: Opsi 1) (Bekerja untuk saya), adalah, seperti yang Anda katakan, untuk memasukkan noautoopsi fstab dan kemudian untuk me-mount biasanya dalam skrip startup (seperti. profil), Opsi 2) masalah utama adalah bahwa vboxsf tidak dimuat sebelum fstab berjalan, tambahkan vboxsffile /etc/modules, meminta kernal untuk memuat modul sebelum fstab dijalankan. Mungkin ini akan membantu orang lain.
garromark
6
harap ingat untuk menambahkan pengguna Anda ke grup vboxsf. Anda dapat merujuk ke askubuntu.com/questions/79565/add-user-to-existing-group
chinloong
26
  1. Sunting /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. Sebelum exit 0mengetik:

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Menyimpan

  4. (Opsional) Buat pintasan ke desktop atau folder rumah:

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

Untuk mem-boot tanpa kesalahan seperti menekan S untuk melewati mount atau tekan M untuk memperbaiki secara manual, Anda mungkin harus menghapus entri Andafstab

Fred Collins
sumber
4
Ini adalah HANYA cara yang saya temukan untuk bekerja, mencoba RC.Local dengan perintah mount biasa, mencoba FSTAB, mencoba Crontab w / script. Terima kasih banyak !!
FreeSoftwareServers
2
Ini bekerja untuk saya juga (bertentangan dengan jawaban yang diterima, tidak yakin mengapa). Terima kasih banyak dari saya! :)
display-name-is missing
4
Bekerja untukku. Saya mengedit /etc/rc.localini mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurite
1
Demi argumen dan untuk merefleksikan kasing kotak virtual: saya terbiasa melakukan ini saat mulai sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointdan akhirnya meletakkan hal berikut ini di /etc/rc.local untuk membuatnya berfungsi: di mount -t vboxsf windows_share /home/dev/shared/mount_pointmana dev adalah pengguna saya, FYI / etc / fstab juga berfungsi!
MediaVince
1
Jawaban Anda telah berhasil untuk saya, tetapi direktori bisa dipasang sebagai root. Saya mengubah mountperintah dalam rc.localskrip untuk memasukkan user id saya ( 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. PS Jika ada yang mencari tutorial tentang cara mengaktifkan rc.localdi Ubuntu 17.04 ini berhasil bagi saya. PPS Saya tidak perlu menyertakan vboxsf di /etc/modules.
Mike Wittie
5

Setelah suatu pagi yang melelahkan mencoba semua hal di atas di Ubutntu 16.04 berjalan di Virtualbox 5.0.20 tidak berhasil (terutama kecewa bahwa solusi rc.local tidak bekerja), itu bekerja dengan:

  1. Mendaftar dari menu Shared Folders dari GUI Virtualbox direktori yang diperlukan tetapi TIDAK secara otomatis atau pemasangan permanen dari Virtualbox. Jika tidak, direktori host sudah di-mount oleh root dan sulit diakses oleh pengguna non-root bahkan dari grup admin.

  2. menambahkan entri sederhana di fstab:

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

    noautoOpsi catatan - jika boot loader gagal seperti yang telah dicatat.

  3. Tambahkan baris yang sesuai /etc/sudoerssebagai berikut dengan menggunakan perintah visudo dari dalam OS tamu:

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

Ini akan memungkinkan proses non-root untuk me-mount ini secara spesifik (karena fstab tidak dapat me-mount dengan opsi 'pengguna' ...)

  1. Tambahkan baris yang sesuai ke profil pengguna:

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

Sekarang subdirektori host yang dipilih siap dipasang untuk pengguna yang dipilih saat login!

Michael Moutoussis
sumber
Apakah Anda pernah menemukan solusinya noauto?
Jörgen Sigvardsson
Ini adalah satu-satunya solusi yang berhasil untuk saya. Tetapi di samping itu, saya juga harus menambahkan "vboxsf" ke / etc / modules untuk memastikan bahwa .profile tidak menjalankan perintah mount sebelum vboxsf siap.
huyz
alih-alih menggunakan sudo, tambahkan 'pengguna' ke opsi fstab dan setiap pengguna dapat memasang sistem berkas
Lars Nordin
lihat pclosmag.com/html/issues/200709/page07.html untuk info tentang memperbarui fstab, komentar di sini hanya membantu sebagian. Kolom keempat di fstab adalah daftar opsi koma menambahkan pengguna (uid = xxx) ke daftar itu misalnya noauto, uid = 1000, gid = 1000
qodeninja
Ada kosong di antara rw, noauto yang menghasilkan kesalahan parse. tanpa blanko contoh itu bekerja untuk saya
weberjn
4

Untuk sistem berbasis systemd baru Anda memerlukan pendekatan alternatif - yang paling sederhana yang disebutkan dalam jawaban lain untuk pertanyaan lain - yang pada dasarnya mengatakan bahwa Anda perlu menambahkan commentopsi khusus ke /etc/fstabentri:

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

Namun untuk hal di atas untuk bekerja pada beberapa sistem Anda perlu memeriksa kotak 'Auto-mount' di Folder Bersama VirtualBox-> Tambahkan dialog, yang berarti Anda dapat berakhir dengan beberapa duplikat mount direktori.

Untuk pemasangan yang lebih bersih - tanpa direktori duplikat atau kebutuhan untuk 'Pemasangan-otomatis' - Anda perlu menggunakan petunjuk pemasangan dan sistem mount . Untuk melakukannya, buat dua entri dalam /usr/lib/systemd/system/nama setelah titik mount yang Anda inginkan misalnya untuk mencocokkan titik mount fstab di atas, mereka akan dinamai my_mount-src_host.mountdan mengandung:

[Unit]
Description=VirtualBox shared "src" folder

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

dan 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

Maka mereka perlu mengaktifkan:

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

Mereka sekarang akan me-mount saat boot. Jika Anda ingin memasang mereka segera (asalkan Folder Bersama telah dibuat) Anda dapat melakukannya:

sudo systemctl start  my_mount-src_host.mount

Catatan jika Anda memiliki direktori dengan nama ganjil atau tanda hubung (-) di dalamnya kemudian gunakan systemd-escapeuntuk menemukan nama yang lolos dengan tepat.

Pierz
sumber
Pada Ubuntu 18.04, solusi pertama Anda dengan comment=systemd.automountopsi berfungsi juga tanpa Automount VBox dicentang. Saya berjuang selama berhari-hari sebelum menemukan solusi Anda, Terima kasih!
HubertL
Senang mendengar - Saya telah memperbarui jawaban saya untuk mencerminkan temuan Anda.
Pierz
Yang ini berhasil pada Debian 9, yang lain tidak.
cslotty
3

Saya mencoba solusi rc.local tetapi tidak berhasil.
Namun saya menemukan masalah tampaknya terkait dengan folder tempat Anda menjalankan perintah (tidak tahu mengapa). Jadi saya menambahkan baris untuk mengubah direktori ke folder rumah saya sebelum perintah mount, dan sekarang berfungsi.

Jadi, share windows saya disebut Dropbox, mountpoint /home/jamie/Dropboxsaya, nama pengguna saya jamie, inilah yang saya masukkan ke rc.local:

cd /home/jamie
mount.vboxsf /home/jamie/Dropbox Dropbox vboxsf
exit 0
Digoreng
sumber
Cemerlang! Terima kasih. Setelah berjuang dengan solusi lain ini berhasil pertama kali!
Norbert Norbertson
Saya harus menambahkan sleep 2sebelum memasang perangkat.
Adriano P
2

Saya melakukannya dengan mode yang sangat mirip di diusulkan di atas tetapi skrip ini membuat yang diperlukan dan me-mount atau unmount folder bersama dengan skrip berikut:

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

Simpan sebagai /opt/.scripts/VBoxShared.sh.

Pastikan ini bisa dijalankan. Pada jenis shell:

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

Sekarang, kami menambahkan baris yang menjalankan skrip ini di rc.local:

sudo nano /etc/rc.local

dan kami menambahkan baris ini sebelum baris terakhir ( exit 0):

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

Simpan ( CtrlO) dan tutup ( CtrlX)

Pada titik ini, kami memasang secara otomatis semua folder bersama yang terdaftar pada <SharedFolder>saat startup.

Untuk melepasnya, kita hanya perlu mengetik:

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

#!/bin/bash

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

exit 0

Simpan ( CtrlO) dan tutup ( CtrlX)

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

Dan itu saja!

Banny
sumber
2

Ini solusi yang bagus.

Sebagai root (IE sudo su) Buka folder home (cd ~) dan buat file cron:
vi cronjobs
Tambahkan
@reboot sleep 15 berikut ; mount -t vboxsf app / mnt / app

Menyimpan file

Catatan: ganti aplikasi dengan nama folder yang dibagikan dan / mnt / aplikasi tempat Anda ingin memasangnya. Dalam hal ini saya membuat aplikasi folder di bawah mount (aplikasi mkdir) terlebih dahulu.

Untuk mengaktifkan cron Anda sebagai root (untuk nama file di atas)
crontab cronjobs

Pastikan cron aktif:
crontab -l

reboot dan itu akan dipasang. Tidur 15 detik memungkinkan cukup waktu untuk semuanya siap untuk mount.

Stephen
sumber
rc.local dalam jawaban yang diterima telah dihapus dalam rilis terbaru dari Ubuntu. Solusi alternatif ini bekerja :)
pengguna linux shonky
0

Saya baru-baru ini menemukan utas ini ketika, setelah memperbarui ke Ubuntu LTS-18 (dan tidak membuat perubahan apa pun pada VirtualBox, dan setelah menginstal ulang ekstensi dan bla-de-bla), pemasangan otomatis berhenti berfungsi. The sf_xxxdirektori hadir dalam /media/tetapi tidak satupun dari mereka benar-benar terpasang.

Upaya untuk memasangnya /etc/fstab(seperti yang disarankan oleh dokumentasi VirtualBox sendiri) tidak berhasil: boot gagal menjadi "mode darurat," bahkan ketika saya telah memodifikasi /etc/modulesfile.

Apa itu akhirnya bekerja - meskipun saya menganggapnya sebagai stinkin sebuah hack - adalah crontabtrik yang dijelaskan di atas.

Sampai hari ini, saya tidak tahu "apa yang rusak."

Mike Robinson
sumber
0

Saya mengalami masalah di mana saya bisa melihat folder bersama, tetapi tidak ada file di dalamnya. Jadi saya melakukan peretasan yang mirip dengan yang ditunjukkan di atas:

Saya memastikan bahwa pengguna saya berada di grup yang benar, dan bahwa ada entri di fstab untuk memasang bagian, dan bahwa izin diatur dengan benar, dan bahwa auto-mount aktif di pengaturan VirtualBox, tetapi masih tidak ada file untuk dilihat.
Jadi saya membuka aplikasi Aplikasi Startup di Ubuntu 18.04 GUI dan membuat tugas yang hanya menjalankan "sudo mount -a" tepat saat startup. Untuk alasan apa pun folder bersama tidak dipasang dengan benar ketika fstab secara otomatis di-parsing saat boot, jadi menginstal ulang semuanya sepertinya memperbaiki masalah. Sekarang saya bisa melihat file di share.

Ngambek
sumber
0

Saya mencoba semua solusi di sini dan tidak ada yang berhasil.

Apa yang berhasil adalah menginstal supervisor dan menjalankan skrip python.

pasang supervisor

apt-get install supervisor

skrip python (milik saya ada di /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)

buat file config untuk 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

buka supervisorctl

sudo supervisorctl

baca konfigurasi

reread

tambahkan konfigurasi

add shared_folders

Eugene Gekhter
sumber
0

(Dalam kasus saya, OS host saya adalah Mac OS X dan OS tamu saya adalah ubuntu)

Tidak ada solusi di atas, dan solusi yang disebutkan di sini dan di sini bekerja untuk saya. Ada masalah dengan mereka semua.

Inilah yang akhirnya saya lakukan untuk menyelesaikan masalah:

1 - Saya membuat folder bersama di VirtualBox UI, menunjuk ke folder bernama VMSharesdi Mac OS saya, menamakannyawd

2 - Kemudian saya menginstal alat Penambahan Tamu Ubuntu (restart diperlukan)

3 - Kemudian saya membuat folder di OS tamu saya sebagai titik mount (dalam kasus saya namanya /home/fashid/host)

4- Lalu saya berlari:

sudo VBoxControl sharedfolder list

Ini adalah perintah untuk memastikan bahwa share tersedia untuk OS tamu, sementara itu Anda masih perlu memasangnya di OS tamu Anda untuk membuatnya benar-benar tersedia.

Ini akan menunjukkan sesuatu seperti:

Shared Folder mappings (1):
01 - VMShares

Ini triknya! Itu menunjukkan nama sebenarnya yang Anda perlu masukkan di bawah perintah untuk benar-benar me-mount dan membuatnya tersedia di OS tamu Anda:

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

Apakah Anda menyadari maksudnya? Saya tidak menggunakan wd di mana pun nanti. Pada langkah 3, saya perlu mengambil nama folder (host) yang sebenarnya alih-alih nama arbitrer yang saya cantumkan dalam kotak dialog GUI.

Melalui langkah-langkah di atas, masalah saya terpecahkan.

Farshid
sumber