创建符号链接:协议错误

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 或...您都必须以管理员身份运行该应用程序

以上是关于创建符号链接:协议错误的主要内容,如果未能解决你的问题,请参考以下文章

如何通过覆盖现有符号链接来强制创建符号链接?

NGINX 在创建符号链接后给出 404 错误

创建 NSManagedObject 子类导致链接器错误重复符号

将弱符号和局部符号链接在一起时,可能的 GCC 链接器错误会导致错误

NSFileManager 中的错误(实例方法是遍历符号链接)

错误:无法创建符号链接,致命:无法将索引文件重置为修订版“HEAD”