Updated: 30 September 2026 · Applies to: util-linux losetup and mount on AlmaLinux and Rocky Linux 9 and 10, RHEL 9 and 10, Ubuntu 24.04 and 26.04, Debian 13
A file can hold a whole file system. Attached to a loop device, it behaves like a disk: you can format it, mount it and store files in it. This is handy for testing, for a fixed-size storage area, or for disk images. We ran the commands below on AlmaLinux 9.
1. Create the file
truncate -s 2G /srv/disk.img # sparse file: uses disk space only as it fills fallocate -l 2G /srv/disk.img # or: reserve the full 2 GB now
fallocate is the better choice when the file system inside must never run out of space because the outer disk filled up.
2. Create a file system in it
mkfs.ext4 -q /srv/disk.img
mkfs works directly on the file; you do not need to attach a loop device first.
3. Mount it
mkdir -p /mnt/disk mount -o loop /srv/disk.img /mnt/disk df -h /mnt/disk losetup -l # shows the loop device that mount attached
mount -o loop finds a free loop device and attaches the file automatically. To attach it yourself (for example to partition it), use losetup --find --show /srv/disk.img, which prints the device name such as /dev/loop0.
4. Mount it at boot
Add a line to /etc/fstab:
/srv/disk.img /mnt/disk ext4 loop,nofail 0 0
Test with umount /mnt/disk, systemctl daemon-reload and mount -a.
5. Detach it
umount /mnt/disk
A loop device attached by mount -o loop is released automatically on unmount. One you attached with losetup is released with losetup -d /dev/loop0.
Grow the image later
umount /mnt/disk truncate -s 4G /srv/disk.img e2fsck -f /srv/disk.img && resize2fs /srv/disk.img mount -o loop /srv/disk.img /mnt/disk
There is no fixed limit on the number of loop devices on current kernels; see loop devices on current Linux kernels.
Official documentation: losetup manual and mount manual (loop devices).