VirtualBox: mount.vboxsf: монтирование не удалось с ошибкой: нет такого устройства
Я использую VirtualBox с OS X в качестве хоста и CentOS на гостевой виртуальной машине.
В OS X I создана папка myfolder
, добавил его как общую папку в виртуальную машину, включил виртуальную машину, в папке, созданной CentOS /home/user/myfolder
и набрав:
sudo mount -t vboxsf myfolder /home/user/myfolder
и иметь вывод:
/sbin/mount.vboxsf: mounting failed with the error: No such device
Что я делаю не так?
ОБНОВЛЕНО:
Guest Additions
установлены.
21 ответ
Это было решено путем:
yum install gcc kernel-devel make
Обходной путь здесь: https://gist.github.com/larsar/1687725
Моя общая папка / буфер обмена по какой-то причине перестали работать (возможно, из-за установки исправления на моей виртуальной машине).
sudo mount -t vboxsf Shared_Folder ~/SF/
Дал следующий результат:
VirtualBox: mount.vboxsf: mounting failed with the error: No such device
Решением для меня было остановить vboxadd и выполнить настройку после этого:
cd /opt/VBoxGuestAdditions-*/init
sudo ./vboxadd setup
Вы используете общие папки, поэтому вам нужно установить VirtualBox Guest Additions внутри вашей виртуальной машины для поддержки этой функции.
бродяга
Если вы используете Vagrant (OS X: brew cask install vagrant
), бежать:
vagrant plugin install vagrant-vbguest
vagrant vbguest
В случае сбоя проверьте журналы, например,
vagrant ssh -c "cat /var/log/vboxadd-install.log"
Возможно, вам просто не хватает заголовочных файлов ядра.
В.М.
Внутри ВМ вы должны установить гостевые дополнения, заголовки ядра и запустить службу, а также дважды проверить, работает ли расширение ядра.
Это зависит от гостевой операционной системы, поэтому вот краткие шаги:
Установить ядро, включить заголовки (требуется VBoxLinuxAdditions).
- RHEL:
sudo apt-get update && sudo apt-get install kernel-devel
- CentOS:
sudo yum update && sudo yum -y install kernel-headers kernel-devel
- RHEL:
Установите гостевые дополнения (это зависит от операционной системы).
Ubuntu:
sudo apt-get -y install dkms build-essential linux-headers-$(uname -r) virtualbox-guest-additions-iso
Если вы не можете найти его, проверьте
aptitude search virtualbox
,Debian:
sudo apt-get -y install build-essential module-assistant virtualbox-ose-guest-utils
Если вы не можете найти его, проверьте
dpkg -l | grep virtualbox
,вручную, загрузив ISO-файл внутри виртуальной машины (например,
wget
) и его установка, напримерwget http://download.virtualbox.org/virtualbox/5.0.16/VBoxGuestAdditions_5.0.16.iso -P /tmp
sudo mount -o loop /tmp/VBoxGuestAdditions_5.0.16.iso /mnt
sudo sh -x /mnt/VBoxLinuxAdditions.run # --keep
Дополнительная отладка:
cd ~/install && sh -x ./install.sh /mnt/VBoxLinuxAdditions.run
Дважды проверьте, работают ли расширения ядра:
sudo modprobe vboxsf
Запустите / перезапустите сервис:
- вручную:
sudo /opt/VBoxGuestAdditions*/init/vboxadd setup
(добавлятьsudo sh -x
отлаживать) - Debian:
sudo /etc/init.d/vboxadd-service start
- Fedora:
sudo /etc/init.d/vboxdrv setup
- CentOS:
sudo service VBoxService start
- вручную:
Сборка основного модуля Guest Additions
Если выше не сработало, вот более сложные шаги, чтобы исправить это. Это предполагает, что вы уже установили VBoxGuestAdditions (как показано выше).
Самая распространенная причина, по которой монтирование общей папки не работает, может быть связана со сборкой гостевого модуля Additions, который не удался. Если в /var/log/vboxadd-install.log
у вас следующая ошибка:
Заголовки для текущего запущенного ядра не найдены.
это означает, что либо вы не установили исходные коды ядра, либо они не могут быть найдены.
Если вы уже установили их, как указано выше, выполните эту команду:
$ sudo sh -x /opt/VBoxGuestAdditions-5.0.16/init/vboxadd setup 2>&1 | grep KERN
+ KERN_VER=2.6.32-573.18.1.el6.x86_64
+ KERN_DIR=/lib/modules/2.6.32-573.18.1.el6.x86_64/build
Так в основном vboxadd
скрипт ожидает, что ваши исходные коды ядра будут доступны в следующем каталоге:
ls -la /lib/modules/$(uname -r)/build
Проверьте, существует ли каталог dir (символическая ссылка указывает на существующую папку). Если это не так, пожалуйста, установите их в нужную папку (например, в /usr/src/kernels
).
Так vboxadd
скрипт может войти в исходный каталог вашего ядра и запустить make kernelrelease
, получите значение и сравните с текущей версией ядра.
Вот логика:
KERN_VER=`uname -r`
KERN_DIR="/lib/modules/$KERN_VER/build"
if [ -d "$KERN_DIR" ]; then
KERN_REL=`make -sC $KERN_DIR --no-print-directory kernelrelease 2>/dev/null || true`
if [ -z "$KERN_REL" -o "x$KERN_REL" = "x$KERN_VER" ]; then
return 0
fi
fi
Если версия ядра не совпадает с исходными текстами, возможно, вам нужно обновить ядро Linux (если исходные коды новее вашего ядра).
CentOS
Пример исправления шагов для CentOS:
$ sudo yum update
$ sudo yum install kernel-$(uname -r) kernel-devel kernel-headers # or: reinstall
$ rpm -qf /lib/modules/$(uname -r)/build
kernel-2.6.32-573.18.1.el6.x86_64
$ ls -la /lib/modules/$(uname -r)/build
$ sudo reboot # and re-login
$ sudo ln -sv /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build
$ sudo /opt/VBoxGuestAdditions-*/init/vboxadd setup
Я могу решить эту проблему, запустив ниже команды
modprobe -a vboxguest vboxsf vboxvideo
В дополнение к ответу @Mats я добавляю дополнительную информацию (это помогло мне в Debian 8).
Моя общая папка / буфер обмена по какой-то причине перестали работать (возможно, из-за установки исправления на моей виртуальной машине).
sudo mount -t vboxsf Shared_Folder ~/SF/
Дал мне следующий результат:
VirtualBox: mount.vboxsf: mounting failed with the error: No such device
Решением для меня было остановить vboxadd и выполнить настройку после этого:
cd /opt/VBoxGuestAdditions-*/init
sudo ./vboxadd setup
На данный момент, если вы все еще получаете следующую ошибку:
Нет такого устройства. Возможно, установка гостевых дополнений не удалась. Ошибка вошла в систему
/var/log/vboxadd-install.log
Вам необходимо установить заголовки Linux:
apt-get install linux-headers-$(uname -r)
тогда вы можете установить гостевые дополнения:
sh /media/cdrom/VBoxLinuxAdditions.run --nox11
и перезапустите ваш Linux:
reboot
тогда вы сможете смонтировать вашу общую папку!
mount -t vboxsf Shared_Folder ~/SF/
Больше информации (на французском), проверьте эту страницу.
Это было единственное решение, которое работало для меня:
Установите плагин Vagrant: vagrant-vbguest, который может поддерживать ваши гостевые дополнения VirtualBox в актуальном состоянии.
vagrant plugin install vagrant-vbguest
Источник: https://github.com/aidanns/vagrant-reload/issues/4
У меня ранее работала общая папка, но внезапно она перестала работать (Virualbox - хост был Windows 7, гость был OpenSuSe)
modprobe -a vboxguest vboxsf vboxvideo
затем mount -t vboxsf testsf /opt/tsf
(testsf
была папка на диске Windows C, которая была добавлена в общую папку Virtualbox --- и /opt/tsf
это папка в OpenSuse
Мой хост - Windows10, мой виртуальный гость - сборка Ubuntu от vagrant. Это сработало для меня:
vagrant plugin install vagrant-winnfsd
Решением для меня было обновить гостевые дополнения
(нажмите "Устройства" -> "Вставить образ гостевого дополнения")
Я использую VirtualBox 5.1.20, и у меня была похожая проблема. Вот URL, где я нашел исправление, и исправление, которое я реализовал:
# https://dsin.wordpress.com/2016/08/17/ubuntu-wrong-fs-type-bad-option-bad-superblock/
if [ "5.1.20" == "${VBOXVER}" ]; then
rm /sbin/mount.vboxsf
ln -s /usr/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf
fi
В ссылке было что-то похожее на /usr/lib/VBoxGuestAdditions/other/mount.vboxsf, а не то, что у меня есть в выдержке из скрипта.
Для сценария сборки я использую vagrant для дополнений:
https://github.com/rburkholder/vagrant/blob/master/scripts/additions.sh
Кажется, это исправить на https://www.virtualbox.org/ticket/16670
У меня также была рабочая система, которая внезапно перестала работать с описанной ошибкой.
После того, как я покопался в моих /lib/modules, кажется, что vboxvfs
модуля больше нет Вместо modprobe vboxsf
было необходимое заклинание, чтобы перезапустить вещи.
Не уверен, когда это изменение произошло, но оно застало меня врасплох.
Для меня на Mac оказалось, что на моем компьютере хранится старое изображение VirtualBox, в котором не было метаданных, поэтому оно не обновлялось до последней версии.
В том старом образе была установлена более старая версия плагина vbguest, с которой не мог работать более новый плагин vbguest на моей машине.
Чтобы исправить это, я просто удалил образ, на котором был основан мой Vagrant, а затем Vagrant загрузил более новую версию, и она работала нормально.
# Remove an old version of the virtual box image that my vagrant was using
$ vagrant box remove centos/7
Вы можете узнать, какие ящики были кэшированы на вашем компьютере, запустив:
$ vagrant box list
Я также обновил свой плагин vbguest в моих предыдущих попытках заставить это работать, используя следующий процесс, но я не думаю, что это помогло. К вашему сведению!
# Get rid of old plugins
vagrant plugin expunge
# Globally install the latest version of the vbguest plugin`
vagrant plugin install vagrant-vbguest
Могут быть ошибки / неправильный подход в двух сценариях. Проверьте оба из них и выясните это
СЦЕНАРИЙ 1:
После запуска VBoxLinuxAdditions.run или VBoxSolarisAdditions.pkg или VBoxWindowsAdditions.exe проверьте, правильно ли установлены все модули.
1.1.a. В случае VBoxLinuxAdditions, если
Сборка модулей ядра VirtualBox Guest Additions не удалась,
проверьте файл журнала в /var/log/vboxadd-install.log. Если ошибка связана с версией ядра, обновите ядро и перезагрузите виртуальную машину. В случае Fedora,
1.1.b. ням обновить ядро *
1.1.c. перезагружать
1.2. Если ничего не получится, то все в порядке. У вас уже есть ожидаемая версия ядра
СЦЕНАРИЙ 2:
Если VBoxGuestAdditions установлен (проверьте наличие папки /opt/VBoxGuestAdditions-*.... * представляет версию), вам необходимо запустить ее перед монтированием.
2.1. cd / opt / VBoxGuestAdditions - * / init &&./vboxadd start
Вам необходимо указать идентификатор пользователя и идентификатор группы вашего пользователя vm в качестве параметров команды mount.
2.2.а. Получение идентификатора пользователя:
id -u <'пользователь'>
id -g <'пользователь'>
2.2.b. Установка uid и gid в настройках команды монтирования:
mount -t vboxsf -o uid = x, gid = x shared_folder_name guest_folder
Я добавил как пользователь root
/etc/rc.d/rc.local
/root/mount-vboxsf.sh
затем
chmod +x /etc/rc.d/rc.local
и образец сценария /root/mount-vboxsf.sh
(установите свои собственные параметры uid и gid)
modprobe -a vboxguest vboxsf vboxvideo
mount -t vboxsf NAME_SHARED_DIRECTORY /media/sf_NAME_SHARED_DIRECTORY -o rw,uid=0,gid=0
вам нужно добавить
chmod + /root/mount-vboxsf.sh
Была такая же проблема с VirtualBox 5.0.16/rXXX
Установил последнюю версию VirtualBox 5.0.18 и установил последнюю версию Vagrant 1.9.3, проблема вышла из строя.
На Ubuntu это сработало:
sudo apt-get install build-essential linux-headers-`uname -r` dkms
У меня похожая проблема, проверьте заголовок, если он не совпадает, затем запустите команду ниже
CentOS: sudo yum update && sudo yum -y установить kernel-headers kernel-devel
Обновление помогло мне!
$ vagrant box update
$ vagrant plugin install vagrant-vbguest
Если вы используете Debian:
1) удалить все установленные пакеты через ISO-файл Virtualbox Guest Additions:
sh /media/cdrom/VBoxLinuxAdditions.run uninstall
2) установить пакеты Virtualbox:
apt-get install build-essential module-assistant virtualbox-guest-dkms virtualbox-guest-utils
Обратите внимание, что даже с modprobe vboxsf
ничего не возвращая (поэтому модуль правильно загружен), vboxsf.so
вызовет исполняемый файл с именем mount.vboxsf
, который предоставляется virtualbox-guest-utils
, Игнорирование этого не даст вам понять истинную причину ошибки.
strace mount /your-directory
была большая помощь (нет такого файла или каталога на /sbin/mount.vboxsf
).
Ниже у меня работает две команды.
vagrant ssh
sudo mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
Хорошо, все упускают основной факт.
mkdir /test
- Создает подкаталог в текущем каталоге.
sudo mkdir /test
- сделать каталог в Root.
Так что если ваше имя общего каталога shared
и вы делаете следующее:
mkdir /test
sudo mount -t vboxsf shared /test
Это генерирует эту ошибку:
sbin/mount.vboxsf: mounting failed with the error: No such file or directory
Потому что каталог находится не в том месте! Да, это то, что говорит эта ошибка. Ошибка не говорит перезагрузить гостевые опции VBOX.
Но если вы сделаете это:
sudo mkdir ~/test
sudo mount -t vboxsf shared ~/test
Тогда все работает нормально.
Меня действительно удивляет, как много людей предлагают перезагрузить гостевые дополнения Vbox, чтобы решить эту ошибку, или написать сложную программу для решения каталога, созданного в неправильном месте.