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
# 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
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