Вопрос или проблема
Чего я пытаюсь достичь:
- У меня дома есть ПК с установленной Windows 7
- Я хотел бы запустить Unix в Virtual Box, так как мне более привычно разрабатывать/скриптовать на нем
В данный момент я остановился на FreeBSD, и мне удалось установить его и настроить сеть. Следующим шагом является разделение папки между Windows и FreeBSD, чтобы я мог легко редактировать файлы как в Windows, так и в FreeBSD. К сожалению, это кажется сложной задачей.
Я поискал в интернете и нашел два разных способа:
Я установил Guest Additions в freebsd используя pkg_add -r virtualbox-ose-additions
, установка прошла достаточно быстро, и я отредактировал /etc/rc.conf
, добавив две предложенные строки: vboxguest_enable="YES"
и vboxservice_enable="YES"
и перезагрузился.
Это не сработало. Команда для монтирования системы завершилась ошибкой:
# mount -t vboxsf shared /home/myuser/shared
mount: shared : Operation not supported by device
где shared
– это имя папки, которую я настроил в настройках виртуальной машины Virtual Box для этой ВМ.
На самом деле, возможно ли использовать тип файловой системы
vboxsf
в freebsd? Некоторые комментарии предполагают, что это не поддерживается, но найти актуальную информацию сложно.
Далее я перешел к подходу с samba. В основном я следовал руководству из ссылки. К сожалению, это привело к:
# mount_smbfs -N -I 192.168.56.1 //winuser@winmachinename/Shared /mnt/shared
mount_smbfs: unable to open connection: syserr = RPC struct is bad
где Shared
– это имя общей папки, которую я настроил в Windows, доступной для winuser
очевидно. Пинг работает.
Я хотел бы отметить, что у меня нет пароля на гостевой учетной записи Windows, к которой я пытаюсь подключиться, это казалось проще, но, возможно, это как-то мешает samba.
редактировать: работая из PuTTY, я не заметил, что некоторые сообщения выводились в консоль:
smb_maperror: Unmapped error 3:31
smb_co_lock: recursive lock for object 1
оба сообщения появляются несколько раз. /конец редактирования
Если прямая передача файлов не работает, есть идеи, как заставить это сделать с помощью samba? Статья предполагает, что это уже было сделано как минимум некоторыми людьми.
Техническая информация:
- Хост: Windows 7 Домашняя версия (актуальна)
- Гость: FreeBSD 9.0-RELEASE #0: Вт Янв 3 07:15:25 UTC 2012 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
- Virtual Box: 4.1.16 r78094
Я открыт для новых предложений по поводу общего доступа. Я бы, по возможности, предпочел избежать передачи файлов туда и обратно: это не особенно эффективно и всегда является источником запутанных ошибок.
Я также открыт для смены систем. Мне нравится философия freebsd, но если это не работает, я без проблем перейду на Linux.
РЕДАКТИРОВАТЬ:
Этот вопрос теперь имеет чисто теоретический интерес. Я переключился на использование Ubuntu Server и смог настроить его без samba, так как vboxsf хорошо поддерживается.
Общие папки VirtualBox все еще не поддерживаются в FreeBSD.
Коммитер портов FreeBSD подтвердил это в списках рассылки FreeBSD (по состоянию на 2014-06-24):
Общие папки для гостевых систем FreeBSD пока не поддерживаются […] Есть какой-то черновой код и модуль ядра, но он еще не работает.
Если вы хотите следить за состоянием порта, пожалуйста, ищите в списках рассылки. Есть также IRC канал #freebsd-vbox
на Freenode. Это было опубликовано в списке рассылки freebsd-hackers в конце этого поста. Вы найдете там разработчиков.
Наконец, вот что в настоящее время поддерживает порт virtualbox-ose-additions
согласно Главе 22.2 Руководства FreeBSD на сегодняшний день:
Гостевые дополнения VirtualBox™ предоставляют поддержку:
- Совместное использование буфера обмена.
- Интеграция указателя мыши.
- Синхронизация времени с хостом.
- Масштабирование окна.
- Бесшовный режим.
Как вы видите, поддержка общих папок для FreeBSD пока отсутствует.
Глава 4.3 руководства VirtualBox гласит:
Общие папки поддерживаются гостевыми системами Windows (2000 или более поздняя версия), Linux и Solaris.
Снова нет FreeBSD. Используйте SMB-списки для обмена, следуя инструкциям, которые упоминали другие.
Убедитесь, что вы настроили общий доступ к папке windows для пользователя, которого вы хотите использовать для совместного использования с freebsd.
Мне нравится добавлять следующее в /etc/hosts для удобства использования.
<ip адрес сервера> vboxhost
например.
192.168.56.1 vboxhost
Сначала проверьте монтирование папки:
mount_smbfs -I vboxhost //username@nameofwindowsbox/foldername /mnt
Если это правильно, вам будет предложено ввести пароль пользователя windows.
Чтобы монтировать её при загрузке, добавьте следующее в /etc/fstab
//username@nameofwindowsbox/foldername /mnt smbfs rw,noauto 0 0
Она будет смонтирована каждый раз при загрузке
Если вы не хотите, чтобы вас запрашивали пароль, добавьте это в /etc/nsmb.conf:
[default]
[NAMEOFWINDOWSBOX]
addr=<ip адрес хоста>
[NAMEOFWINDOWSBOX:USERNAME]
password=<myPassword>
Я боролся с той же проблемой. Несколько вещей на стороне Windows позволили мне, наконец, заставить mount_smbfs работать в FreeBSD 9.0:
- Включите анонимный доступ для системы
Центр управления сетями и общим доступом → Изменить дополнительные параметры общего доступа → Выключить защиту паролем для общего доступа
- Включите анонимный доступ к папке через простое совместное использование
Свойства → Общий доступ → Поделиться… → Добавить ‘Все’
В свойствах общего доступа есть два способа создать общий ресурс: Простое совместное использование и Расширенное совместное использование. Я использовал Расширенное совместное использование, и по какой-то причине, которая меня на этом этапе не волнует, это не сработало; я снова добавил общий ресурс через Простое совместное использование и только тогда mount/smbclient заработали.
Проверка работы анонимного входа через smbclient:
[root@fileserv ~]# smbclient -N -I 192.168.56.1 '\\twblamer-pc\share'
Domain=[TWBLAMER-PC] OS=[Windows 7 Professional 7601 Service Pack 1] Server=[Windows 7 Professional 6.1]
smb: \> dir
. DR 0 Чт Дек 13 04:33:09 2012
.. DR 0 Чт Дек 13 04:33:09 2012
mydirectory D 0 Чт Дек 13 01:55:45 2012
Общие папки VirtualBox теперь (2025) работают на FreeBSD, хотя документация о Общих папках для Virtual Box 7.1 явно этого не утверждает. Я не думаю, что функция Automount работает, но, тем не менее, вы можете просто следовать инструкциям в документации, чтобы настроить общую папку на вашей хост-системе. Подробнее ниже о настройке на вашей гостевой системе FreeBSD.
Допустим, вы хотите разместить sharedfolder
в домашнем каталоге вашего обычного пользователя username
. Сначала решите это на хост-системе, следуя документированной процедуре, например, зайдите в настройки GUI VirtualBox для вашей гостевой системы FreeBSD и добавьте общую папку с путем к папке, установленным в подходящее место на вашей хост-системе, именем папки как sharedfolder
и точкой монтирования как /home/username/sharedfolder
.
На гостевой ВМ FreeBSD вам нужно установить и включить VirtualBox Guest Additions. Внимательно следуйте инструкциям, приведенным в virtualbox-ose-additions
– прочитайте их на FreshPorts.org. Если они включены через rc
, убедитесь, что вы перезапустили систему.
Теперь у вас должна быть команда mount_vboxvfs
. Хотя у неё нет страницы man, вы можете получить заметки по использованию, введя mount_vboxvfs -h
без указания имени или точки монтирования.
$ mount_vboxvfs -h
Usage: [OPTIONS] NAME MOUNTPOINT
Mount the VirtualBox shared folder NAME to MOUNTPOINT.
Options:
-w mount the shared folder writable
-r mount the shared folder read-only (the default)
Внутри гостевой системы FreeBSD вы можете вручную смонтировать общую папку с правами записи в домашнем каталоге пользователя, выполнив:
# mount_vboxvfs -w sharedfolder /home/username/sharedfolder
(#
это командная подсказка, указывающая, что вам нужно сделать это от имени администратора, например, используя su
или sudo
или doas
; не вводите сам знак #
.)
Если вы хотите, чтобы общая папка монтировалась автоматически при следующем запуске гостевой FreeBSD, вы можете использовать rc(8)
скрипт, задание в cron(8)
(см. также crontab(1)
и crontab(5)
) или fstab(5)
.
Если вы используете fstab
, убедитесь, что вы предоставили пользователю, которому вы хотите предоставить доступ, правильные разрешения, проверив $ id username
(см. id(1)
). Затем добавьте эту строку в таблицу в /etc/fstab
:
sharedfolder /home/username/sharedfolder vboxvfs rw,late,failok,uid=<user's user id>,gid=<user's group id> 0 0
failok
означает, что если процесс монтирования не удается, например, некоторые настройки изменились на хост-компьютере, то гостевая FreeBSD не загружается в однопользовательский режим. Более подробное обсуждение на сайте https://forums.freebsd.org/threads/how-do-i-mount-virtualbox-shared-folders-automatically.88129/
.
Ответ или решение
Для профессионального решения задачи обмена папками между Windows-хостом и гостевой ОС FreeBSD в среде VirtualBox, предлагаем рассмотреть детально все возможные подходы и нюансы, учитывая текущие ограничения и возможности.
Теория (Theory)
Обмен файлами между различными операционными системами в виртуальной среде часто требует установки дополнительных компонентов или настройки сетевых протоколов. На текущий момент (по состоянию на 2023 год), виртуальная машина VirtualBox не поддерживает напрямую функцию "общих папок" (Shared Folders) для FreeBSD, хотя эта функция поддерживается для систем Windows, Linux и Solaris. Это может обусловить необходимость использования альтернативных методом таких как Samba.
Samba — это программный набор, обеспечивающий взаимодействие между операционными системами UNIX и Windows по протоколу SMB/CIFS, что позволяет совместное использование файлов и принтеров. Однако, отсутствие пароля в учетной записи Windows может вызывать проблемы с подключением, так как большинство современных систем безопасности требуют аутентификации для установления соединения.
Пример (Example)
Допустим, у вас есть ПК с Windows 7, на котором запущен VirtualBox с гостевой ОС FreeBSD 9.0-RELEASE. Вам необходимо интегрировать папку, расположенную на Windows, чтобы одновременно работать с ней из FreeBSD. Вот последовательность действий, которую вы могли бы рассмотреть:
-
Установите и настройте дополнения гостевой ОС в FreeBSD:
pkg_add -r virtualbox-ose-additions echo 'vboxguest_enable="YES"' >> /etc/rc.conf echo 'vboxservice_enable="YES"' >> /etc/rc.conf
Перезагрузите виртуальную машину после добавления этих строк.
-
Попытка использования vboxsf (если бы режим был доступен) встречает ошибку, так как поддержка отсутствует:
mount -t vboxsf shared /home/user/shared
Ошибка:
mount: shared : Operation not supported by device
-
Переход на использование Samba:
- Настройте общий доступ к папке на Windows.
- Добавьте в файл
/etc/hosts
для упрощения доступа:192.168.56.1 vboxhost
- Попробуйте смонтировать папку с помощью команды:
mount_smbfs -I 192.168.56.1 //winuser@winmachinename/Shared /mnt/shared
Ошибка:
mount_smbfs: unable to open connection: syserr = RPC struct is bad
-
Проведение диагностики и настройка правильной конфигурации:
- Убедитесь, что общий доступ к папке настроен для всех пользователей (не установлен пароль).
- Проверьте с использованием
smbclient
:smbclient -N -I 192.168.56.1 '\\machine-name\Shared'
Применение (Application)
Проблема совместного использования папок в данной связке ОС может быть решена несколькими способами, но важна подготовительная работа: правильно настроить как Windows, так и FreeBSD. Вам необходимо убедиться, что на Windows включено анонимное подключение, а на FreeBSD установлены все необходимые пакеты.
Дополнительно рассмотрим возможность использования NFS, если Samba или vboxsf не оправдывают ожиданий. Для работы с NFS на Windows потребуется установка дополнительного программного обеспечения, например, Windows Services for UNIX (включает в себя клиент NFS). На FreeBSD можно выполнить следующие команды для установки NFS:
pkg install nfs-utils
echo 'nfs_server_enable="YES"' >> /etc/rc.conf
service nfsd start
В заключение, успешное использование общего доступа к папкам возможно при условии тщательной настройки обеих операционных систем и учета специфики используемых протоколов и программного обеспечения. Windows должна быть настроена для работы с соответствующими сетевыми протоколами, такими как NFS или Samba, а FreeBSD нужно дополнительно сконфигурировать соответствующими клиентами.