【问题标题】: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
  • 对我来说,以管理员身份运行是不够的,但这是我的答案:stackoverflow.com/a/60741351/470749

标签: linux windows virtual-machine file-permissions symlink


【解决方案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 支持符号链接。
      • 出于安全原因,默认情况下不允许来宾操作系统创建符号链接。

      要为共享文件夹创建符号链接,您应该这样做:

      1. 在您的主机上运行此命令(其中 {VM_name} 是 VM 的名称,{share_folder_name} 是共享目录的名称):
      $ VBoxManage setextradata "{VM_name}" VBoxInternal2/SharedFoldersEnableSymlinksCreate/{share_folder_name} 1
      

      就我而言,它看起来像:

      $ VBoxManage setextradata "ubuntu16" VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1
      
      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 提示符。

          如果您拥有标准用户帐户(或者如果您愿意切换 您的标准帐户并创建一个单独的管理员帐户), 存在解决方案。但是,您需要管理员权限才能 完成几个步骤(对于您的用户来说不是必需的 帐户)。

          1. 运行本地安全策略(Win+R,键入“secpol.msc”,确认 UAC)。然后导航到“本地策略->用户权限分配”。
          2. 找到名为“创建符号链接”的权限并双击它。将您的用户添加到具有此功能的对象列表中 允许。或者您可以添加“用户”组。注销并登录。你 可以通过在控制台中运行来检查成功:

            whoami /priv
            

            如果您看到权限 SeCreateSymbolicLinkPrivilege 已启用,那么您已经 做得很好。

          3. 确保您的用户有权访问主机系统上的共享文件夹。

          4. 如前所述,执行

            VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1
            

            在 C:\Program Files\VirtualBox 文件夹的控制台中。不要忘记 将 VM_NAME 替换为您的 VM 名称,将 SHARE_NAME 替换为 共享文件夹的名称(显示在 VM 设置中)。

          5. 你已经完成了。

          如果您碰巧拥有“较小”版本的 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 时,您将能够创建符号链接。欲了解更多信息,请查看:stackoverflow.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 或...您都必须以管理员身份运行该应用程序
          猜你喜欢
          • 2014-12-06
          • 2020-06-29
          • 1970-01-01
          • 2016-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-15
          • 2014-08-09
          相关资源
          最近更新 更多