Rescue a VBox missing l_intl.nls

有人求助说一台 Windows 虚拟机坏了,启动不了。我去一看,黑屏白字,说,missing C:\Windows\System32\l_intl.nls,要我用 Windows 启动盘里的故障修复台修复。

Missing l_intl.nls
Missing l_intl.nls

怎么修复呢?没有说。我手边一时没有启动盘,自作聪明地把坏掉的虚拟机的硬盘文件 vhd 挂载到另一台虚拟机下做第二硬盘,查看 \Windows\System32\l_intl.nls 还在不在。在另一台虚拟机下看这硬盘挺健康的,\Windows\System32\l_intl.nls 也在。

我仍是复制了一份 l_intl.nls 给它,还是启动不了。

还是 Google 来一个办法,去取来 Windows 启动盘,在故障修复台命令行执行


chkdsk c: /r

30G 的硬盘,花了 1个多小时修理完毕,没提示有什么磁盘错误。重启,非常遗憾,仍是黑屏。

接着又试着把坏掉的虚拟机的硬盘文件 vhd 挂到另一台虚拟机下,直接在它的 Windows DOS 里执行


chkdsk c: /f

这跟故障修复台环境不同,chkdsk 能接受的参数也不同。这次修理快了很多,提示了一堆 Index 错误,看不懂,也不知修复了没有,看重启,仍是黑屏。

之后又尝试种种工具,无一有效。直到看到一个论坛的角落里(因为我花了几小时才看到,所以是角落)有人说,”YET ANOTHER Microsoft screw up”。一语惊醒梦中人!

那人建议试试 BIOS 重置、测试下内存(换下有问题的内存条)。我的是虚拟机,没有 BIOS 重置一说。我就新建了一个虚拟机,加载既有的 vhd,mamma mia,重见 Windows 的徽标在飘扬,舒了口气。

但是,我高兴得太早了,我很快发现此 Windows 非彼 Windows——我忘了这是虚拟机。刚才新建的虚拟机,加载的 vhd 文件,是有问题的虚拟机下的硬盘的最初状态!最初状态非常健康。这也是之前种种努力,把它挂载到其他虚拟机下尝试修复,修复时没发现问题,l_intl.nls 文件也在,而在有问题的虚拟机下真正加载的不单是这个 vhd,而是一个 Current State。修来修去,修的都不是 Current State。

明白这个道理之后,剩下的事情就很简单了。

我赶紧把 Current State 生成一个独立的 vhd 文件。在有问题的虚拟机的目录里,找到 [虚拟机名].vbox 来查看一下,从中找到 Current State 对应的文件名,我的是 {991f2a80-9fbe-48b5-9c02-27f745bdf81c}.vhd。这个 vhd 不是独立的,它是从最初状态,经过一次次 Snapshot (如果有的话),diff 得到的 Current State。

怎么把这些 diff 合并得到一个独立的 vhd 文件?VirtualBox 有个简单的命令:


VBoxManage clonehd \{991f2a80-9fbe-48b5-9c02-27f745bdf81c\}.vhd currentstate.vhd -format VHD

这命令必须在原 host machine 上运行,否则哪里去找 {991f2a80-9fbe-48b5-9c02-27f745bdf81c}.vhd 的 parent,parent 的 parent…

这次做的 currentstate.vhd,再次挂载到其他虚拟机里作第二硬盘,一看,果然,\Windows\System32\l_intl.nls is missing,赶紧,复制一个给它。

然后以 currentstate.vhd 为第一硬盘,加载到坏掉的虚拟机里,终于又见 Windows 的徽标在飘扬——这一次是真的真的真的 Windows!

Export VirtualBox snapshots

我觉得挺奇怪的 —— VirtualBox 怎么不弄个一键连同快照导出虚拟机的功能?这功能应该很有用。

网上搜了一圈,也没人给个系统的指导。没办法,只好自己摸索着做。其实,导出快照没我想的那么复杂,也就是拷贝和修改一下配置文件。具体步骤是:

  1. 从源机拷出某个虚拟机的整个目录。
  2. 在目标机器上创建跟源虚拟机一样配置的新虚拟机。
  3. 把拷出的目录里所有文件放到新虚拟机所在的目录。用源虚拟机的硬盘文件覆盖新虚拟机的硬盘文件,同时有个 Name_Of_Vbox.vbox 的文件也被覆盖。.vbox 有快照文件们的树形结构信息及所在位置的信息。快件文件在 Snapshots 子目录下, .vbox 里存储的是相对位置,在新虚拟机里仍然使用。.vbox 是个 xml 格式的文件,不妨打开来看一下,里面还有一个 machine uuid,把它拷出来。
  4. 打开 VirtualBox.xml,它是 VirtualBox 的配置文件,在 Fedora 下它保存在 ~/.VirtualBox/ 目录下,新建的虚拟机的 machine uuid 和源虚拟机的 machine uuid 通常是不匹配的,那就用刚刚从 .vbox 里拷出来的 machine uuid 替换。

这样源虚拟机连同快照文件就迁移到目标机器上了。这时尝试启动虚拟机或许会提示如虚拟网卡不存在之类的错误,一般是因为源机和目标机器环境不一致或所用 VirtualBox 版本不一致所引起的,问题不大,只要重新给虚拟机一张虚拟网卡就行了。

Solve media type differencing after VirtualBox upgrade to 3.2.8

Virtualbox Disks Inaccessible
Virtualbox Disks Inaccessible

我在 VirtualBox 升级到 3.2.8 以后发现其中的 Windows XP Guest OS 无法启动,其他 Guest OS 正常。Windows XP Guest OS 用到的两个 harddisk 文件也显示 inaccessible,而且也 release 不了它们,强行访问还给一个错误信息。

Medium type of ‘/path/to/harddiskfile’ is differencing but it is not associated with any parent medium in the media registry (‘/path/to/.VirtualBox/VirtualBox.xml’).

我也没怎么上心,觉得是 VirtualBox 升级版中的 bug,指望在后续版本中把它修复。可是好久没见 Oracle 出更新,只好 google 求帮助。

我发现跟我有同样遭遇的人还不少,原因或许是 Host OS 使用了 ext4 文件系统导致不兼容。可为什么只影响 Windows Guest OS?管不了那么多,找解决办法要紧。

解决方案众说纷纭。最后真正解决我的问题的是:

Step 1: 去下载一个 fix 工具。我下载了 for linux VBoxFixHdd-Linux.tar.gz,其他的去 http://www.virtualbox.org/download/VBoxFixHdd/ 找。

Step 2: 运行一下
VBoxFixHdd --filename /path/to/image.vdi --zeroparentuuid

其中 /path/to/image.vdi 就是 access 不了、release 不掉的问题文件,当然后缀不一定是 vdi,我的是 vmdk(不知道还有别的吗)。

Demystify 1and1 cloud server

漫天都是“云服务”,但真让我有云的感觉的服务目前只有 Google 一家。最近买了 1&1 cloud server,如果要评满意程度的话,只能是 5 out of 10 (购前期望过高)。

我原以为基于云的服务器可以一劳永逸、无限扩张,哪知 1&1 cloud server cpu core, memory, hard disk 都有上限,cpu core 最多买 4 个,其实就相当于单个 quad core cpu。

1&1 cloud server 性能也一般,或许还不如 vps,唯一优势就是比同等性能的 dedicated server 便宜一些。

hardware-configuration-page-1

Picture 1 of 5

How to remove VirtualBox 3.1.8

今天启动 VirtualBox 时提示说有 3.2.2 版可用,于是在第一时间下载了 rpm 来安装。可是安装时提示一大堆的文件冲突,我按经验就先卸载老版本

yum remove VirtualBox

可是以前管用的命令,在卸载 3.1.8 版时不管用了,提示

No Match for argument: VirtualBox
No Packages marked for removal

大概 VirtualBox 改了 package name,惭愧,我也不会用 yum 来查看已安装的 package list。Google 了一会,这条命令倒是管用:

yum remove /usr/share/applications/virtualbox.desktop

于是见到了久违了的

Loaded plugins: refresh-packagekit
Setting up Remove Process
Resolving Dependencies
–> Running transaction check
—> Package VirtualBox-3.1.x86_64 0:3.1.8_61349_fedora11-1 set to be erased
–> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package            Arch       Version                      Repository     Size
================================================================================
Removing:
VirtualBox-3.1     x86_64     3.1.8_61349_fedora11-1       installed      90 M

Transaction Summary
================================================================================

Remove        1 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]:

卸载后安装 VirtualBox 3.2.2 倒很顺利,安装后我注意到 package name 是 VirtualBox-3.2,以后如要卸载它就可以用

yum remove VirtualBox-3.2

VirtualBox 3.2.2 首次被 Oracle rebrand,但我没注意到有什么其他改动。

VirtualBox rebranded by Oracle
VirtualBox rebranded by Oracle

Upgrade VirtualBox to 3.1.x

刚从国内回来,电脑上积累了很多更新。其中 VirtualBox 有了 3.1.2 r56127,我从 3.0.x 直接升级失败,抛出一大堆的文件冲突信息。

于是
yum remove VirtualBox -y
然后再
yum localinstall -y --nogpgcheck VirtualBox-3.1-3.1.2_56127_fedora11-1.x86_64.rpm
成功!

此删除和重安装操作无须备份和恢复原有的 guest OS(but as a good practice, you should backup files before major changes)。

usb disk cannot be accessed by host and guest OS at the same time

我才知道 host OS 和 guest OS 不能同时挂载一个 usb disk,但是大错已经酿成。

当时我正在 host OS 里从 host OS 的硬盘移动一些文件到 usb disk 上,然后又在虚拟机里加载 usb disk 给 guest OS,结果,usb disk 就自动从 host OS 里卸载了。卸载时一些文件正在移动,突如其来的卸载造成这些文件未成功写入 usb disk,但源文件却已经从 host OS 的硬盘上删除了。

Host OS 是 Fedora,这教训给我一个感觉,Fedora (或者说是 GNOME,我不清楚该责怪谁) 的文件操作机制不够可靠——移动文件时,应该在收到目的文件写入成功信号后才删除源文件。

IE8 crash fix

I recently installed Windows XP in VirtualBox, and did all necessary updates, including IE 8. However, IE 8 kept crashing. At first, I thought it was a problem with VirtualBox or its Guest Additions. The same problem exists in kvm. Then I thought it was a general problem of running IE 8 in virtual machines.

But inspired by a comment of IE 8, I downloaded IE8-WindowsXP-x86-ENU.exe and re-installed IE 8. The problem has gone. I never expected I have to install IE 8 twice to get it working properly in a newly installed (clean) Windows XP.

Send Ctrl+Alt+Fn to VirtualBox guest OS

Fedora 常用到几个热键:
Ctrl+Alt+F1
Ctrl+Alt+F2
Ctrl+Alt+F3
Ctrl+Alt+F4
Ctrl+Alt+F5
Ctrl+Alt+F6

VirtualBox guest OS 有时会出现花屏,得用 Ctrl+Alt+F2 和 Ctrl+Alt+F1 刷新一下显示就好了,所有我觉得这几个热键是很重要的。但 VirtualBox 没有提到怎么发送它们到 Guest OS (菜单是只有 Ctrl+Alt+Del 和 Ctrl+Alt+Backspace),但举一反三,Host+Fn 就相当于 Ctrl+Alt+Fn。这个 Host 键真的很重要啊,我觉得 VirtualBox 设置 right Crtl 作 Host 键真是很好用。