крок 1. створюємо порожній файл потрібного розміру (128 мб для прикладу):
head -c 128M /dev/zero > /path/to/file
крок 2. шукаємо першу вільну мітку пристрою (/dev/loopX):
losetup -f
крок 3. підключаємо файл file.img як пристрій (для прикладу /dev/loop1):
(sudo) losetup /dev/loop1 /path/to/file.img
крок 4. створюємо файлову систему (ext4 для прикладу):
(sudo) mkfs.ext4 /dev/loop1
крок 5. …і монтуємо пристрій куди треба (/mnt/mount_point):
(sudo) mount /dev/loop1 /mnt/mount_point
користуємося.
коли треба відмонтувати:
(sudo) umount /dev/loop1
коли треба взагалі відключити файл і звільнити мітку пристрою:
(sudo) losetup -d /dev/loop1
бонус! якщо маємо файл з уже створеною файловою системою (тобто крок 4 не потрібен) — тоді кроки 2, 3 та 5 можна об’єднати, бо mount вміє це робити сам:
(sudo) mount -o loop /path/to/file.img /mnt/mount_point
ще один бонус! команди для резервування місця під файл, в порядку спадання швидкості (для порівняння в дужках даю час, що знадобився на моєму ноутбуці з ssd):
- fallocate -l 128M /path/to/file (3 мс)
- dd if=/dev/zero of=/path/to/file (208 мс)
- head -c 128M /dev/zero > /path/to/file (324 мс)
очевидно, що fallocate не заповнює файл нулями, як це роблять дві інших команди, лише резервує місце (в більшости випадків цього досить).