VirtualBox paylaşımlı klasörünü başlangıçta nasıl bağlarım?


87

Virtualbox'da Ubuntu yüklü. VirtualBox paylaşılan klasörümü Ubuntu'da oturum açtığımda otomatik olarak Ubuntu'ya bağlamak istiyorum. Aşağıdaki satırı ~. / Bashrc ve ~ / .bash_profile dizinine koydum:

sudo mount -t vboxsf windows_share /media/windows_share

windows_share, Virtualbox ile yarattığım isim. Fakat Ubuntu'ma her başladığımda, sudo'ya ihtiyaç duyduğu için bana şifre soruyor. Her oturum açtığımda şifre girmeden Windows paylaşımını otomatik olarak bağlamak için yine de var mı?

Yanıtlar:


109

Bir Ubuntu konuğunun önyüklemesinde her zaman bir Sanal Kutu "paylaşılan klasör" takmak için iki seçeneğimiz var. Hangi seçeneklerin ortamımızda en iyi sonucu vereceği kişisel tercihlere bağlıdır.

1. fstab ile Dağı

Konuk Eklemelerivboxsf ile sağlanan dosya sistemini kullanarak paylaşılan bir klasörü bağlamak için önce ön koşulların sağlandığından emin olmamız gerekir . O zaman aşağıdaki satırı dosyamıza koyabiliriz :etc/fstab

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

Değiştirin name_of_shareve /path/to/mountpointbireysel kurulumunuzla (önce bağlama noktasının dizini oluşturulmalıdır). Mount için man sayfasına bakınız <options>. Bir olasılık, monte etmek defaultsveya özel montaj seçenekleri vermek (örn. rw, suid, exec, auto, users) Vermektir .

Bazı sistemlerde vboxsfçekirdek modül henüz yüklenmediyken fstabönyükleme sırasında okunur. Daha sonra vboxsfçekirdek modülünün eklenmesine yardımcı olabilir /etc/modules.

Bazı sistemler comment=systemd.automountfstab girişlerinde ( kaynak ) bir seçeneğe ihtiyaç duyabilir .

2. Sanal Kutulu "otomatik montaj" montajı:

Sanal Kutu’nun son sürümlerinde, paylaşılan klasörleri oluşturma sırasında otomatik olarak da bağlayabiliriz:

görüntü tanımını buraya girin

Konuğun yeniden başlatılmasından sonra, bu paylaşılan klasör /media/<username>/sf_<name_of_share>, grubun üyesi olan tüm kullanıcıların erişebileceği konuk dizinine monte edilecektir vboxsf.


1
Mount dizinini ve mount önekini nasıl değiştirirsiniz? HOST OS veya GUEST OS'de bazı terminal komutları çalıştırıyor musunuz?
CMCDragonkai

12
Bu özellik, "virtualbox-guest-utils" hizmetinin başlatılmasını ve Ubuntu 14.04'te bu hizmetin dosya sistemlerinden daha sonra başlatılmasını gerektirir. Bu, fstab
kolypto

1
@ garromark, benim tek fikrim, oldukça basit bir başlangıç ​​betiği oluşturmak. Başka bir seçenek de aynı fstab girişini koymak, ancak "noauto" eklemek, böylece onu sadece elle bağlamanız yeterli.
kolypto

4
@kolypto, bana geri döndüğünüz için teşekkürler. Aslında sadece biri benim için çalışan iki rakip çözüm buldum: Seçenek 1) (Benim için çalıştı), sizin de belirttiğiniz gibi noauto, fstab seçeneklerine koymak ve daha sonra tipik olarak bir başlangıç ​​betiğine (örneğin. profile), Seçenek 2) asıl mesele vboxsf'nin fstab'ın çalıştırılmasından önce yüklenmemiş vboxsfolması, dosyaya /etc/moduleseklenmesi ve çekirdeğin fstab'ın çalıştırılmasından önce modülü yüklemesini istemesidir. Belki bu başka birine yardım eder.
Garromark

6
Lütfen kullanıcıyı vboxsf grubuna eklemeyi unutmayın. Sen anlamlara gelebilir askubuntu.com/questions/79565/add-user-to-existing-group
chinloong

26
  1. Düzenle /etc/rc.local

    sudo -H gedit /etc/rc.local
    
  2. exit 0Tip öncesi :

    mount.vboxsf windows_share /media/windows_share vboxsf
    
  3. Kayıt etmek

  4. (İsteğe bağlı) Masaüstüne veya ana klasöre bir kısayol oluşturun:

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

Hatasız olarak önyükleme yapmak için S düğmesine basarak mount'u atlamak veya M tuşuna basarak elle onarmak için girişinizi silmek zorunda kalabilirsiniz.fstab


4
Bu çalışmayı bulduğum SADECE yol, düzenli mount komutuyla RC.Local'ı denedi, FSTAB'yi denedi, Crontab w / script'i denedi. Kocaman teşekkürler!!
FreeSoftwareServers

2
Bu benim için de işe yaradı (kabul edilen cevabın aksine, neden olduğundan emin değil). Yani benden büyük bir teşekkür ederim! :)
ekran adı-eksik 0

4
Benim için çalıştı. Ben düzenlenmiş /etc/rc.localbununla mount -t vboxsf [-o OPTIONS] sharename mountpoint.
neurite

1
Argümanlar uğruna ve sanal kutu örneğini yansıtmak için: bunu başlangıçta yaptım sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) windows_share ~/shared/mount_pointve /etc/rc.local içine şunu koymak için kullandım: çalışmasını sağlamak için: mount -t vboxsf windows_share /home/dev/shared/mount_pointdev dev benim kullanıcım, FYI / etc / fstab da çalışıyor!
MediaVince

1
Cevabınız benim için çalıştı, ancak dizinleri kök olarak monte edilir. Değiştim mountkomutunu rc.localbenim kullanıcı kimliği (içerecek şekilde komut 2000): mount.vboxsf -o rw,uid=1000 /home/mwittie/Dropbox Dropbox vboxsf. Not: Herhangi biri rc.localUbuntu 17.04'te nasıl açılacağı hakkında bir eğitici arıyorsanız, bu benim için çalıştı. PPS içine vboxsf dahil etmem gerekmiyordu /etc/modules.
Mike Wittie,

5

Virtualbox 5.0.20'de çalışan Ubutntu 16.04'te yorucu bir sabahtan sonra başarısızlıkla sonuçlandı (özellikle rc.local çözümünün işe yaramadığı hayal kırıklığına uğradı):

  1. Virtualbox GUI'nin Paylaşılan Klasörler menüsünden istenen dizine kayıt olmak, ancak bunu otomatik olarak AYIRMAYIN veya Virtualbox'dan kalıcı montaj. Aksi takdirde ana bilgisayar dir, root tarafından monte edilir ve yönetici gruptan bile root olmayan kullanıcılar tarafından erişilmesi acı vericidir.

  2. fstab içine basit girdi ekleme:

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

    Not noautoseçeneği - aksi takdirde önyükleyici belirtildiği gibi başarısız olur.

  3. /etc/sudoersKonuk işletim sisteminden visudo komutunu kullanarak aşağıdaki satırlara karşılık gelen satır ekleyin :

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

Bu, root olmayan işlemlerin bunu özel olarak monte etmesine izin verecektir (fstab 'user' seçeneğiyle monte edemediği için ...)

  1. Kullanıcının .profile dosyasına karşılık gelen satır ekleyin:

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

Şimdi seçilen host subdir, giriş yaptıktan sonra seçilen kullanıcı için hazır!


Hiç bunun için bir geçici çözüm noautobuldunuz mu?
Jörgen Sigvardsson

Bu benim için çalışan tek çözüm. Ancak ek olarak, vboxsf hazır olmadan önce .profile mount komutlarını çalıştırmadığından emin olmak için / etc / modüllerine "vboxsf" eklemek zorunda kaldım.
huyz

sudo kullanmak yerine, fstab seçeneğine 'user' ekleyin; herhangi bir kullanıcı dosya sistemini bağlayabilir
Lars Nordin

bkz pclosmag.com/html/issues/200709/page07.html fstab'ı güncelleme konusunda bilgi için, buraya yapılan yorumlar sadece kısmen yardımcı oldular. Fstab dördüncü sütun seçenekleri virgül Eylül listesi örneğin noauto, uid = 1000, gid = 1000, bu listeye kullanıcı (uid = xxx) ekleyin
qodeninja

Ayrıştırma hatasıyla sonuçlanan noauto rw arasında bir boşluk var. boşluk olmadan örnek benim için çalıştı
weberjn

4

Yeni İçin systemd tabanlı sistemlerde alternatif yaklaşımlar ihtiyaç - Başka belirtilen biri olma basit cevabı başka soruya - temelde özel bir eklemeniz gerektiğini söylüyor commentseçeneği /etc/fstabgirişi:

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

Bununla birlikte, yukarıdakilerin bazı sistemler üzerinde çalışması için, VirtualBox'un Paylaşılan Klasörleri-> Ekle diyalog kutusundaki 'Auto-mount' kutusunu işaretlemeniz gerekir;

Daha temiz bir montaj için - yinelenen dizinler veya 'Otomatik montaj' gereksinimi olmadan - sistemin montajını ve otomatik sayı direktiflerini kullanmanız gerekir . Bunu yapmak /usr/lib/systemd/system/için, istediğiniz montaj noktasından sonra adlandırılmış iki giriş oluşturun; örneğin yukarıdaki fstab montaj noktasıyla eşleşmeleri, adlandırılmış my_mount-src_host.mountve içerdikleri:

[Unit]
Description=VirtualBox shared "src" folder

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

ve 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

O zaman etkinleştirmeleri gerekir:

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

Şimdi önyüklenecekler. Onları hemen monte etmek istiyorsanız (Paylaşılan Klasörler oluşturulduysa) şunları yapabilirsiniz:

sudo systemctl start  my_mount-src_host.mount

İçinde garip isimler veya kısa çizgiler (-) bulunan dizinler varsa systemd-escape, uygun şekilde kaçan ismi bulmak için kullanın .


Ubuntu 18.04'te, comment=systemd.automountseçenekli ilk çözümünüz Automount VBox kontrol edilmeden de çalışır. Çözümünüzü bulmadan önce günlerce uğraştım, teşekkürler!
HubertL

Duyduğuma sevindim - Bulgunuzu yansıtacak şekilde cevabımı güncelledim.
Pierz

Bu, Debian 9 üzerinde çalıştı, diğeri yapmadı.
cslotty

3

Rc.local çözümünü denedim ama işe yaramadı.
Bununla birlikte, sorunun, komutu çalıştırdığınız klasörle ilgili olduğunu gördüm (nedenini bilmiyorum). Bu yüzden mount komutundan önce dizini ana klasörüme değiştirmek için bir satır ekledim ve şimdi çalışıyor.

Böylece, windows paylaşımım denir Dropbox, mountpoint'im, /home/jamie/Dropboxkullanıcı adım, jamierc.local'a yazdığım şey:

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

Parlak! Teşekkürler. Diğer çözümler ile mücadele ettikten sonra bu ilk kez çalıştı!
Norbert Norbertson

sleep 2Cihazı monte etmeden önce bir tane eklemek zorunda kaldım .
Adriano P

2

Yukarıda önerildiği gibi çok benzer bir mod yapıyorum ama bu script gerekli olanı yaratır ve paylaşılan klasörü aşağıdaki script ile bağlar veya çıkarır:

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

Olarak kaydet /opt/.scripts/VBoxShared.sh.

Bunun çalıştırılabileceğinden emin olun. Kabuk tipinde:

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

Şimdi, bu betiği çalıştıran bir satır ekliyoruz rc.local:

sudo nano /etc/rc.local

ve bu satırı son satırdan önce ekleriz ( exit 0):

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

Kaydet ( CtrlO) ve kapat ( CtrlX)

Bu noktada, <SharedFolder>başlangıçta listelenen tüm paylaşılan klasörleri otomatik olarak bağlarız.

Çıkarmak için, sadece tipe ihtiyacımız var:

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

#!/bin/bash

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

exit 0

Kaydet ( CtrlO) ve kapat ( CtrlX)

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

Ve hepsi bu!


2

İşte çalışan bir çözüm.

Kök olarak (IE sudo su) Ana klasöre (cd ~) gidin ve bir cron dosyası oluşturun:
vi cronjobs
Aşağıdakileri
ekleyin @reboot sleep 15; mount -t vboxsf uygulaması / mnt / app

Dosyayı kaydet

Not: Uygulamayı, paylaşılan klasör adınızla ve eklemek istediğiniz yere / mnt / app ile değiştirin. Bu durumda klasör uygulamasını önce mount (mkdir app) altında oluşturdum.

Cron'unuzu kök olarak etkinleştirmek için (yukarıdaki dosya adı için)
crontab cronjobs

Cron'un aktif olduğundan emin olun:
crontab -l

yeniden başlat ve monte edilecek. 15 saniye uyku, her şeyin montaj için hazır olması için yeterli zaman sağlar.


Kabul edilen yanıttaki rc.local, Ubuntu'nun son sürümünde kaldırıldı. Bu alternatif çözüm işe yarıyor :)
shonky linux kullanıcısı

0

Ubuntu LTS-18'e güncelledikten sonra (ve VirtualBox'ta ne olursa olsun hiçbir değişiklik yapmadan ve uzantıları ve filanı yeniden kurduktan sonra) bu bağlantıyla karşılaştığımda otomatik montaj çalışmayı durdurdu. sf_xxxDizinleri de hazır bulundu /media/ancak bunların hiçbiri gerçekte monte edildi.

Bunları bağlama girişimleri /etc/fstab(VirtualBox'un kendi belgeleri tarafından önerildiği gibi) işe yaramadı: önyükleme, /etc/modulesdosyayı değiştirdiğim zaman bile "acil durum" modunda başarısız oldu .

Sonunda ne işe yaradı - bir kokuşmuş hack olarak görmeme rağmen - crontabyukarıda açıklanan numara.

O gün, "ne kırdı" hakkında hiçbir fikrim yok.


0

Paylaşılan klasörü görebileceğim bir sorun yaşıyordum, ancak içinde dosya yoktu. Bu yüzden yukarıda gösterilenlere benzer bir saldırı yaptım:

Kullanıcımın doğru grup (lar) içinde olduğundan ve paylaşımın montajı için fstab'ta bir giriş olduğundan ve izinlerin doğru ayarlandığından ve otomatik montajın VirtualBox ayarlarında olduğundan emin oldum ancak yine de hayır görülmesi gereken dosyalar.
Bu yüzden Ubuntu 18.04 GUI'deki Startup Applications uygulamasını açtım ve başlangıçta sadece "sudo mount -a" yazan bir görev yarattım. Hangi nedenle olursa olsun, fstab önyükleme sırasında otomatik olarak ayrıştırıldığında paylaşılan klasör doğru bir şekilde takılmıyordu, bu yüzden her şeyi yeniden monte etmek sorunu çözdü. Şimdi paylaşımdaki dosyaları görebiliyorum.


0

Tüm çözümleri burada denedim ve hiçbiri işe yaramadı.

Amacımız süpervizör kurmak ve bir python betiği çalıştırmaktı.

gözetmen yüklemek

apt-get install supervisor

python betiği (benimki /home/ubuntu/shared_folders.py adresindeydi)

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)

gözetmen için config dosyası oluştur

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

süpervizör açın

sudo supervisorctl

konfigürasyonu oku

reread

yapılandırma ekle

add shared_folders


0

(Benim durumumda, ana bilgisayar işletim sistemim Mac OS X ve misafir işletim sistemim ubuntu)

Yukarıdaki çözümlerin hiçbiri ve burada ve burada belirtilen çözümler benim için çalıştı. Hepsinde bir sorun vardı.

Sonunda sorunu çözmek için yaptığım şey:

1- VirtualBox Kullanıcı Arabiriminde paylaşılan bir klasör oluşturdum, VMSharesMac OS'imde adlandırılmış bir klasöre işaret ederek adlandırarakwd

2- Sonra Ubuntu Misafir Ekleme araçlarını kurdum (yeniden başlatma gerekli)

3- Ardından misafir işletim sistemimde bağlantı noktası olarak bir klasör yaptım (benim adımdı /home/fashid/host)

4- sonra koştum:

sudo VBoxControl sharedfolder list

Bu, paylaşımın konuk işletim sistemi tarafından kullanılabilir olmasını sağlamak için verilen emirdir, bu arada gerçekte kullanılabilir olması için yine de işletim sisteminize eklemeniz gerekir.

Gibi bir şey gösterecektir:

Shared Folder mappings (1):
01 - VMShares

Bu hile! Gerçekten eklemek ve konuk işletim sisteminizde kullanılabilir kılmak için aşağıdaki komutu girmeniz gereken gerçek adı gösteriyor:

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

Noktayı farkettin mi? Wd'yi daha sonra hiçbir yerde kullanmadım. 3. adımda, GUI iletişim kutusunda atadığım rastgele adı yerine gerçek (ana bilgisayar) klasör adını seçmem gerekiyordu.

Yukarıdaki adımlarla sorunum çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.