There are multiple reasons I can think of. Probably the more common one is that something with the loop devices is not in order, e.g., there are too many loop device in use already. You can check if this is the case by setting up the loop device manually:
# losetup --find --show file.iso
/dev/loop0
# mount -o ro /dev/loop0 mountpoint/
...
# losetup --detach /dev/loop0
If the first command does not print a legal loop device (/dev/loop*
) but gives an error message then the infrastructure for loop devices themselves is somehow the issue. See if losetup -a
shows any devices. The maximum number might be reached. In that case you could try creating more via the module's max_loop
option (and reboot) or manually with mknod
as explained in this answer.
However, there is another option that is explained concisely in the mount
syscall's manpage:
ENODEV filesystemtype not configured in the kernel.
Your kernel might not support the required file system.
In the example above using a CD image this would be iso9660
.
Try loading the respective module via
# modprobe iso9660
and retry. If you get modprobe: module iso9660 not found
then you are kind of out of luck because your kernel does not support the file system at all and there is no easy way to enable it. You can verify the supported filesystems listed in /proc/filesystems
. To make it work you have to recompile the kernel or at least the respective module (matching the exact kernel version of course).
PS: The module is named isofs
in newer kernels but at least for modprobe
and friends there exists an alias iso9660
.