TL;DR this can be quickly fixed by rebooting. DO NOT USE apt-get. See at the bottom, "Just reboot!".
How did this happen? (previous long answer)
Exactly this kind of problem will arise if you:
- upgrade the kernel (say from .66 to .67)
apt-get autoremove and somehow remove the running kernel, or manually remove the "old" kernel, thus removing all modules from /lib/modules/kernel.66
- do not reboot, thereby keeping the "old" .66 kernel running. The loaded modules remain in memory and everything works, but no new modules can be loaded since .66 modules have been deleted.
- try to do anything that requires loading a module that was not yet loaded
And installing the VirtualBox ISO may require exactly that -- loading the ISO9660 support module.
The requested module now can no longer be autoloaded, because the running kernel (.66) does not find anything in /lib/modules/kernel.66 . The module exists, but it is in /lib/modules/kernel.67, of which the current .66 kernel knows nothing about (and it's not recommended to load a mismatching module).
Reinstalling the uname'd kernel will of course reinstall the running kernel modules, thereby making ../.66/.../isofs.ko available again and making a reboot unnecessary. This is a downgrade of the installed kernel and the update issue will remain (see below).
That is, when you run Additions CD, it will install for the running .66 kernel, not the updated .67 kernel (which still isn't running).
If you are in such a situation you can also certainly fix it by rebooting (the new .67 running kernel will find its modules), and probably by loading the module belonging to the new kernel (
isofs is pretty stable), which unless you've underwent an important kernel upgrade will still be compatible (this is still not recommended!):
# mount /dev/cdrom /mnt
mount: unknown filesystem type 'iso9660'
This above is the root error you're getting ("unknown filesystem type").
# uname -a
Linux virtual 3.13.0-66-generic ...
So we check which version of the modules is installed. It should be .66:
# ls /lib/modules
...but there's only one directory and it's .67 (the .66 directory might be there, but empty; in this case
du -sh /lib/modules/* will tell how much space is taken by the various directories, allowing to tell between empty ones and full ones).
Reinstalling the old kernel image with no re-grub will not fix the real problem
You reinstall the running kernel with its modules and headers. Now you have both kernels, with
grub set to load the newer kernel.
The ISO CD-ROM can be mounted (because the module is now present) and the VBox modules will compile (because the headers have been installed).
It will compile modules for the running .66 kernel, and they will work... for a while.
At the first reboot, you will find yourself with a .67 kernel with no VirtualBox additions at all.
Reinstalling the kernel will also not fix the real problem
apt-get install --reinstall linux-image-$(uname -r)
As above, at the first reboot you will find yourself with a downgraded (or better "not upgraded") kernel. Very soon, Ubuntu will try to upgrade it... and you'll be back where you started (see below: "downgrading kernel"), and need to reboot and install Virtualbox Additions again.
Patching in the ISO module will also not fix the real problem
Chances are we can force load the ISO9660 module all the same, since no work was done between kernels 66 and 67 and the binary is essentially unchanged, so we try:
# insmod /lib/modules/3.13.0-67-generic/kernel/fs/isofs/isofs.ko
No errors. It worked. Kernel .66 loaded module from kernel .67. Let's try again to mount the CD-ROM:
# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
Hey! It worked!
Yes, but this still won't be any real help, because the CD being installed is VirtualBox Additions, which requires the running kernel headers to be installed. If the running kernel modules are no longer there, chances are that neither will the kernel headers. So the CD-ROM may be mounted, but the installer will fail upon launch.
Also, even if it somehow found the headers and the compilation did not fail, the newly compiled Virtualbox modules won't have anywhere to go, since the .66 modules directory has been cleaned (that's the reason the
isofs module was not found in the first place!).
But say you fix all that, by restoring the modules and headers directories for the previous kernel: you've now essentially done an expensive (and partial) kernel downgrade, and the additions will be lost at the next reboot, together with the rest of .66 kernel, when the newly installed .67 kernel comes alive. Because the Virtualbox Additions CD launched from .66 kernel with the .66 headers dutifully installed the .66 kernel modules, not the .67's.
Downgrading the kernel will work... for a while
If we remove the .67 kernel and reinstall the .66 kernel with modules in its stead, things will be hunky dory for a while. No reboot necessary, as in the "force ISO module" solution above.
And a reboot will not lose anything, since no Additions-challenged kernel is installed.
But this way the kernel will still be in the "to be upgraded" list, and this same problem is bound to arise sooner or later (usually the day after, or the next week, depending on the frequency of the automatic updates).
Granted, you can now have it arise in some more appropriate moment of your choice, which might be worth quite a lot. A forced upgrade in the middle of a coding marathon for a project which is running late is the devil.
So: just reboot! (and re-run the Additions CD).
Rebooting, the already installed and more recent .67 kernel will be activated and all its modules and headers are there; among these, the
isofs module for reading ISO9660 CD filesystems.
After the reboot, the CD-ROM will work and the Guest Additions will be installable.
The "best" sequence to update the kernel on VirtualBox with Additions is:
apt-get upgrade (or apt-get dist-upgrade)
(re)install VirtualBox Additions on the new kernel that is now running
(The next-to-latest old kernel might not be auto-removed for security reasons, to allow you to "go back").