在 Oracle VirtualBox 4.3.24 上运行 Ubuntu 14.04,完全无法安装客户添加项。我花了很长时间在网上寻找解决方案,但没有任何帮助...
如下所述,我尝试手动安装并从网上下载 ISO(与 VirtualBox 匹配的版本)。同样的错误:
编辑:
现在一些文件夹变成了“只读”,这会带来很大的麻烦。即使安装全新的 Ubuntu 14.04 映像也无济于事……因此只能重新安装 VirtualBox 本身……
答案1
我能够通过重新安装 Linux 映像来解决安装问题:
sudo apt-get install --reinstall linux-image-$(uname -r)
顺便说一句,这一切都是从升级 VirtualBox 开始的。双向剪贴板停止工作,所以我尝试重新插入 Guest Additions ISO。这导致了上述问题。现在,Guest Additions 已重新安装,但剪贴板仍然不起作用……
答案2
总结 可以通过重启快速修复。不要使用 apt-get。参见底部的“只需重新启动!”。
这是怎么发生的?(之前的长答案)
如果您执行以下操作,就会出现此类问题:
- 升级内核(比如从 .66 升级到 .67)
- 运行
apt-get autoremove
并以某种方式删除正在运行的内核,或者手动删除“旧”内核,从而从 /lib/modules/kernel.66 中删除所有模块 - 不重新启动,从而使“旧”的 .66 内核保持运行。加载的模块保留在内存中,一切正常,但是无法加载新模块自此.66个模块已被删除。
- 尝试做任何需要加载尚未加载的模块的事情
安装 VirtualBox ISO 可能正是需要这样做——加载 ISO9660 支持模块。
请求的模块现在无法再自动加载,因为正在运行的内核(.66)在 /lib/modules/kernel.66 中找不到任何内容。模块存在,但它位于 /lib/modules/kernel.67 中,当前的 .66 内核对其一无所知(并且不建议加载不匹配的模块)。
重新安装未命名的内核当然会重新安装正在运行的内核模块,从而使 ../.66/.../isofs.ko 再次可用,并且无需重新启动。这是已安装内核的降级,更新问题仍将存在(见下文)。
也就是说,当您运行 Additions CD 时,它将安装跑步.66 内核,不是更新的.67 内核(仍然没有运行)。
如果你处于这种情况,你也可以当然通过重启来修复它(新的 .67 运行内核会找到它的模块),并且大概通过加载属于新内核的模块(isofs
非常稳定),除非您经历了重要的内核升级,否则它仍然是兼容的(这仍然不推荐!):
# mount /dev/cdrom /mnt
mount: unknown filesystem type 'iso9660'
以上是您收到的根错误(“未知文件系统类型”)。
# uname -a
Linux virtual 3.13.0-66-generic ...
因此我们检查安装了哪个版本的模块。它应该是 .66:
# ls /lib/modules
3.13.0-67-generic
...但是只有一个目录,它是 .67(.66 目录可能存在,但是是空的;在这种情况下du -sh /lib/modules/*
将告诉各个目录占用了多少空间,从而可以区分空目录和满目录)。
重新安装旧内核映像而不重新 grub 无法解决真正的问题
您重新安装正在运行的内核及其模块和头文件。现在您拥有两个内核,并grub
设置为加载较新的内核。
ISO CD-ROM 可以安装(因为模块现在存在)并且 VBox 模块将被编译(因为已安装标题)。
它将为正在运行的 .66 内核编译模块,并且它们将运行一段时间。
第一次重启时,你会发现你的.67 内核没有任何 VirtualBox 添加内容。
重新安装内核也无法解决真正的问题
apt-get install --reinstall linux-image-$(uname -r)
如上所述,第一次重启时,你会发现内核被降级了(或者说“未升级”)。很快,Ubuntu 就会尝试升级它……然后你又会回到原点(见下文:“降级内核”),需要重启并再次安装 Virtualbox Additions。
修补 ISO 模块也无法解决真正的问题
我们很有可能可以强制加载 ISO9660 模块,因为内核 66 和 67 之间没有进行任何工作,并且二进制文件基本上没有变化,因此我们尝试:
# insmod /lib/modules/3.13.0-67-generic/kernel/fs/isofs/isofs.ko
没有错误。成功了。内核 .66 从内核 .67 加载模块。让我们再次尝试安装 CD-ROM:
# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
嘿!成功了!
是的,但这仍然不会有任何真正的帮助,因为正在安装的 CD 是 VirtualBox Additions,它需要跑步需要安装的内核头文件。如果正在运行的内核模块不再存在,内核头文件也有可能。因此,虽然 CD-ROM 可以安装,但安装程序在启动时会失败。
而且,即使它以某种方式找到了标题并且编译没有失败,新编译的 Virtualbox 模块也无处可去,因为 .66 模块目录已被清理(这就是模块isofs
无法找到的原因!)。
但是,如果你通过恢复前一个内核的模块和头文件目录解决了所有问题,那么你现在实际上已经完成了一次昂贵的(部分)内核降级,并且新增的内容将是丢失的下次重新启动时,新安装的 .67 内核将与 .66 内核的其余部分一起启动。因为 Virtualbox Additions CD 从 .66 内核启动,并带有 .66 标头,因此会忠实地安装 .66 内核模块,而不是 .67 内核模块。
降级内核会起作用……但会持续一段时间
要是我们消除.67 内核并重新安装 .66 内核及其模块,一段时间内一切都会顺利。无需重新启动,如上面的“强制 ISO 模块”解决方案。
由于没有安装有附加问题的内核,因此重新启动不会丢失任何内容。
但这样内核还是会在“待升级”列表中,迟早会出现同样的问题(通常是后天,或者下周,取决于自动更新的频率)。
的确,你现在可以让它在你选择的更合适的时刻出现,这可能很有价值。在项目开发马拉松中途强制升级是魔鬼。
因此:只需重新启动!(然后重新运行 Additions CD)。
重新启动后,已经安装的较新的 .67 内核将被激活,并且其所有模块和标头都在那里;其中包括isofs
用于读取 ISO9660 CD 文件系统的模块。
sudo reboot
重新启动后,CD-ROM 就可以工作了,而且 Guest Additions 也可以安装。
使用附加功能更新 VirtualBox 上的内核的“最佳”顺序是:
apt-get update
apt-get upgrade (or apt-get dist-upgrade)
reboot
(re)install VirtualBox Additions on the new kernel that is now running
apt-get autoremove
(出于安全原因,次最新的旧内核可能不会被自动删除,以允许您“返回”)。
答案3
根据其他人的回答,通常可以通过重新启动来解决此问题。
不知何故“iso9660”模块未加载。depmod
扫描所有模块并创建模块依赖关系。
sudo depmod -a
sudo mount /dev/sr0 /mnt
ls -l /mnt
这将解决这个问题。
答案4
我通过升级软件包并重新启动解决了这个问题(在 Ubuntu 16.04 上):
sudo apt-get update
sudo apt-get upgrade
sudo reboot