С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Loop-устройство — файл вместо диска

4 мин Ubuntu 24.04 · util-linux 2.39

Loop-устройство показывает обычный файл системе как диск: его размечают, форматируют и монтируют.

Шпаргалка

8 команд Версия для печати
  • truncate -s 512M disk.img файл на 512 МиБ
  • sudo losetup -f --show disk.img подключить: /dev/loop0
  • sudo losetup -fP --show disk.img с разделами: loop0p1…
  • losetup -l что к чему подключено
  • losetup -j disk.img какое устройство у файла
  • sudo losetup -d /dev/loop0 отключить
  • sudo mount -o loop image.iso /mnt образ сразу в каталог
  • lsblk -e 7 список дисков без loop

Обзор

Loop-устройство — блочное устройство /dev/loopN, за которым лежит обычный файл. Всё, что записано на устройство, оказывается в файле. С ним работают как с диском: размечают (fdisk-parted), создают файловую систему (mkfs), монтируют (mount).

text
student@ubuntu:~$ truncate -s 512M disk.img
student@ubuntu:~$ sudo losetup -f --show disk.img
/dev/loop0

Зачем это нужно:

  • учиться разметке и монтированию, не трогая настоящие диски — так устроены упражнения о дисках в тренажёре;
  • открыть образ: ISO, образ раздела, резервную копию ФС;
  • snap-пакеты в Ubuntu: каждый snap смонтирован с loop, поэтому в lsblk бывает много loopN.

Подключение живёт до перезагрузки или до losetup -d. Разделы на loop-устройстве ядро показывает, только если устройство подключено с -P: /dev/loop0p1, /dev/loop0p2.

Рецепты

4

Учебный диск с разделом

bash
truncate -s 512M disk.img
DEV=$(sudo losetup -fP --show disk.img)    # /dev/loop0
sudo parted -s "$DEV" mklabel gpt mkpart data ext4 1MiB 100%
sudo mkfs.ext4 -L data "${DEV}p1"
sudo mount "${DEV}p1" /mnt

Образ ФС без разделов

bash
truncate -s 256M fs.img
mkfs.ext4 -q fs.img                  # ФС прямо в файле
sudo mount fs.img /mnt               # mount сам возьмёт свободный loop
findmnt /mnt                         # SOURCE — /dev/loopN

Убрать за собой

bash
sudo umount /mnt
losetup -j disk.img          # /dev/loop0: []: (…/disk.img)
sudo losetup -d /dev/loop0
rm disk.img

Подключать образ при загрузке

text
/srv/images/data.img  /srv/data  ext4  loop,nofail  0  2

Строка /etc/fstab с опцией loop — mount подключит файл при загрузке.

Неполадки

5

failed to set up loop device: Permission denied

losetup: disk.img: failed to set up loop device: Permission denied — подключать устройства может только root. Запусти через sudo.

Раздела /dev/loop0p1 нет

Устройство подключено без -P, и ядро не читало таблицу. Перечитай её: sudo partprobe /dev/loop0 — или отключи и подключи заново с -fP.

losetup: cannot find an unused loop device

Свободных устройств нет: обычно их держат забытые подключения. Посмотри losetup -l и отключи лишние losetup -d.

Файл удалён, а место не вернулось

Файл ещё подключён к loop-устройству. Найди его в losetup -l (рядом будет (deleted)) и отключи — место освободится.

losetup -d не отключил устройство

Устройство смонтировано. losetup -d только помечает его (в losetup -l колонка AUTOCLEAR становится 1), а отключится оно после umount. Повторный losetup -d ответит detach failed: No such device or address — устройства уже нет.

Опасно

1

Один файл — два устройства

losetup -f не проверяет, подключён ли файл уже. Два устройства на один файл с двумя монтированиями портят ФС. Перед подключением проверь losetup -j файл.

См. также

  • mount — монтировать устройство или образ.
  • lsblk — loop-устройства и их разделы деревом.
  • fdisk-parted — разметить loop-устройство как диск.
  • mkfs — создать ФС на устройстве или прямо в файле.
  • blkid — UUID и метка ФС в образе.
  • qemu-img — образы дисков виртуальных машин.
Загрузка…