创建符号链接:协议错误
Posted
技术标签:
【中文标题】创建符号链接:协议错误【英文标题】:creating symbolic link: Protocol error 【发布时间】:2013-07-27 13:03:33 【问题描述】:我在我的虚拟机上创建了 linux (Centos)。当我 ssh 到它并尝试创建符号链接时(在具有完全访问权限的共享文件夹上):
ln -s path/folder/example myFolder
我得到错误:
ln: creating symbolic link `myFolder': Protocol error
有什么原因或解决办法吗?
【问题讨论】:
你能解决这个问题吗?我也看到了类似的问题root@57856515e02b:/artifacts/test/install/lib# ln -s /usr/share/tcltk/tcl8.5 /artifacts/test/install/lib/ ln: failed to create symbolic link '/artifacts/test/install/lib/tcl8.5': Protocol error
对我来说,以管理员身份运行是不够的,但这是我的答案:***.com/a/60741351/470749
【参考方案1】:
我在虚拟框中观察到相同的错误(在 Windows 10 中运行的 Lubuntu)。通过使用“以管理员身份运行”选项运行“Oracle VM Virtualbox”解决了问题。
【讨论】:
【参考方案2】:基本上你需要再次告诉 VirtualBox 启用符号链接。这是完整的解决方案
在你的 vagrant 文件中有这个,
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name", "1"]
end
我建议注释掉任何同步文件夹,并让默认的 ./(at host) 在 /vagrant(at guest) 同步。这将确保您的 shared folder(Folder_Name) 名称始终为 vagrant,如 https://www.vagrantup.com/docs/synced-folders/ 所述。此外,您不会遇到 ssh 的问题
如果重启后符号链接协议错误返回或仍然持续运行
VBoxManage setextradata "VM_Name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name 1
vagrant halt
vagrant up
vagrant ssh
通常,VBoxManagee 位于 C:\Program Files\Oracle\VirtualBox\
通过转到 /vagrant 并运行来验证符号链接的工作
touch test.txt && ln -s test.txt test1.txt
PS:我已经在 Windows Home 上尝试过,它对安全设置的访问受限
【讨论】:
【参考方案3】:默认情况下,VirtualBox VM 禁止创建符号链接。
Oracle VM VirtualBox 共享文件夹在以下情况下支持符号链接:
主机操作系统必须支持符号链接。例如,需要 Mac OS X、Linux 或 Oracle Solaris 主机。 目前只有 Linux 和 Oracle Solaris Guest Additions 支持符号链接。 出于安全原因,默认情况下不允许来宾操作系统创建符号链接。要为共享文件夹创建符号链接,您应该这样做:
-
在您的主机上运行此命令(其中 VM_name 是 VM 的名称,share_folder_name 是共享目录的名称):
$ VBoxManage setextradata "VM_name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/share_folder_name 1
就我而言,它看起来像:
$ VBoxManage setextradata "ubuntu16" VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
-
重启虚拟机。
您可以在此处找到更多信息:
https://docs.oracle.com/cd/E97728_01/E97727/html/sharedfolders.html https://www.virtualbox.org/ticket/18572?cversion=0&cnum_hist=2
【讨论】:
【参考方案4】:据我了解,Windows VirtualBox 主机不支持链接(来自https://www.virtualbox.org/manual/ch04.html#sharedfolders)
从 4.0 版本开始,VirtualBox 共享文件夹也支持 符号链接(symlinks),在以下条件下:
主机操作系统必须支持符号链接(即 Mac、Linux 或 需要 Solaris 主机)。
目前只有 Linux 和 Solaris Guest Additions 支持符号链接。
出于安全原因,访客操作系统不允许通过以下方式创建符号链接 默认。如果您相信来宾操作系统不会滥用该功能,那么您 可以通过以下方式为“sharename”创建符号链接:
VBoxManage setextradata "虚拟机名称" VBoxInternal2/SharedFoldersEnableSymlinksCreate/sharename 1
【讨论】:
【参考方案5】:找到 cmd.exe 文件。 右键单击 cmd.exe 。 选择“以管理员身份运行”菜单选项。 它应该可以完美运行。
【讨论】:
你看起来很困惑;为什么你希望 CentOS 机器有一个cmd.exe
,你希望如何在 SSH 会话中执行“右键单击”?
这个答案是指主机操作系统。您错过了 OP 声明它们在 Windows 上的部分。【参考方案6】:
以下是 virtualbox.org 上的票证中的解决方案: https://www.virtualbox.org/ticket/10085#comment:32 (注意:在具有管理权限的控制台中执行“whoami /priv”)
我已经对这个错误进行了一些 Windows 研究。
如果您的用户属于管理员类型(而不是标准 帐户),没有办法运行带有符号链接的 VB UAC 提示符。
如果您拥有标准用户帐户(或者如果您愿意切换 您的标准帐户并创建一个单独的管理员帐户), 存在解决方案。但是,您需要管理员权限才能 完成几个步骤(对于您的用户来说不是必需的 帐户)。
运行本地安全策略(Win+R,键入“secpol.msc”,确认 UAC)。然后导航到“本地策略->用户权限分配”。
找到名为“创建符号链接”的权限并双击它。将您的用户添加到具有此功能的对象列表中 允许。或者您可以添加“用户”组。注销并登录。你 可以通过在控制台中运行来检查成功:
whoami /priv
如果您看到权限 SeCreateSymbolicLinkPrivilege 已启用,那么您已经 做得很好。
确保您的用户有权访问主机系统上的共享文件夹。
如前所述,执行
VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1
在 C:\Program Files\VirtualBox 文件夹的控制台中。不要忘记 将 VM_NAME 替换为您的 VM 名称,将 SHARE_NAME 替换为 共享文件夹的名称(显示在 VM 设置中)。
你已经完成了。
如果您碰巧拥有“较小”版本的 Windows 之一(例如 7 Home),您没有“secpol.msc”实用程序。看 How do I grant SeCreateSymbolicLink on Windows Vista Home edition 寻求帮助。
【讨论】:
谢谢,使用 secpol.msc 并给了自己权限。完美运行。 它有效,谢谢!不过需要注意的是:如果 whoami /priv 将您的权限列为“已禁用”-别担心,它只是意味着其他东西 (social.technet.microsoft.com/Forums/ie/en-US/…)。如果它被列出,它适用于您的用户。 谢谢。这帮助我解决了 Drupal VM 中的符号链接问题。【参考方案7】:右键单击您的命令提示符并“以管理员身份运行”(或您用来制作这些符号链接的任何程序都需要以管理员身份运行)。
【讨论】:
实际上,创建符号链接的协议错误对于运行在 Windows 上的虚拟框来说是很常见的。以管理员身份运行 shell 通常可以解决问题。 我遇到了类似的问题,但是当您以管理员身份运行 VM 时,您将能够创建符号链接。欲了解更多信息,请查看:***.com/a/28674584/1494559 您能解释一下“右键单击”需要做什么吗?这是 SSH 会话中的特定转义序列吗? @TobySpeight 他们的意思是右键单击 Windows 中启动命令提示符的图标/快捷方式/任何内容。 OP 说他们的主机操作系统是 windows 7。【参考方案8】:这是主机文件系统的问题。检查主机文件夹的权限是否足够并且主机文件系统支持符号链接。
【讨论】:
宿主系统是windows 7,有什么办法可以开启吗? 对此不好的解决方案是使用 mklink 在 Windows 7 中创建符号链接。示例:mklink /D myFolder 路径/文件夹/示例Protocol error
消息来自哪个API/层?
无论您使用什么应用程序来启动您的 VM、VBox 或 vagrant 或...您都必须以管理员身份运行该应用程序以上是关于创建符号链接:协议错误的主要内容,如果未能解决你的问题,请参考以下文章
创建 NSManagedObject 子类导致链接器错误重复符号
将弱符号和局部符号链接在一起时,可能的 GCC 链接器错误会导致错误