Help us understand the problem. What is going on with this article?

losetupコマンドの使い方

1 losetupコマンドとは?

ファイルをループバックデバイスとして使えるようにするためのコマンドです。
ループバックデバイスの作成、削除等ができます。

2 環境

VMware Workstation 14 Playerでゲストマシンを作成しました。
ゲストマシンのOS版数、コマンド版数は以下のとおりです。

OS版数
[root@centos74 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@centos74 ~]# uname -r
3.10.0-693.el7.x86_64
コマンド版数
[root@centos74 ~]# losetup -V
losetup from util-linux 2.23.2

3 オプション一覧

[root@centos74 ~]# losetup -h

Usage:
 losetup [options] [<loopdev>]
 losetup [options] -f | <loopdev> <file>

オプション:
 -a, --all                     list all used devices
 -d, --detach <loopdev> [...]  detach one or more devices
 -D, --detach-all              detach all used devices
 -f, --find                    find first unused device
 -c, --set-capacity <loopdev>  resize device
 -j, --associated <file>       list all devices associated with <file>

 -l, --list                    list info about all or specified
 -o, --offset <num>            start at offset <num> into file
 -O, --output <cols>           specify columns to output for --list
     --sizelimit <num>         device limited to <num> bytes of the file
 -P, --partscan                create partitioned loop device
 -r, --read-only               setup read-only loop device
     --show                    print device name after setup (with -f)
 -v, --verbose                 verbose mode

 -h, --help     display this help and exit
 -V, --version  output version information and exit

Available --list columns:
         NAME  loop device name
    AUTOCLEAR  autoclear flag set
    BACK-FILE  device backing file
     BACK-INO  backing file inode number
 BACK-MAJ:MIN  backing file major:minor device number
      MAJ:MIN  loop device major:minor number
       OFFSET  offset from the beginning
     PARTSCAN  partscan flag set
           RO  read-only device
    SIZELIMIT  size limit of the file in bytes

For more details see losetup(8).

4 ループバックデバイスを作成する方法(-f)

ループバックデバイスを2つ作成してみます。
-fオプションを指定すると、利用可能なループバックデバイスが自動的に選択されます。
そして、そのループバックデバイスにファイルが関連付けられます。

1つ目のループバックデバイス作成
1Gサイズのファイルを作成する。このファイルをループバックデバイスとして使います。
[root@centos74 ~]# fallocate -l 1G disk1.img
[root@centos74 ~]# ls -l disk1.img
-rw-r--r--. 1 root root 1073741824  4月 16 19:10 disk1.img

disk1.imgをループバックデバイスに割り当てる。
[root@centos74 ~]# losetup -f /root/disk1.img

ループバックデバイス一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img

2つ目のループバックデバイス作成
[root@centos74 ~]# fallocate -l 1G disk2.img
[root@centos74 ~]# ls -l disk2.img
-rw-r--r--. 1 root root 1073741824  4月 16 19:26 disk2.img

disk2.imgをループバックデバイスに割り当てる。
[root@centos74 ~]# losetup -f /root/disk2.img

ループバックデバイス一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

5 ループバックデバイスを削除する方法(-d)

ループバックデバイスの一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

/dev/loop0を削除する。
[root@centos74 ~]# losetup -d /dev/loop0

ループバックデバイスの一覧を表示する。/dev/loop0が削除されたことがわかる。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop1         0      0         0  0 /root/disk2.img

/dev/loop1を削除する。
[root@centos74 ~]# losetup -d /dev/loop1

ループバックデバイスの一覧を表示する。/dev/loop1が削除されたことがわかる。
[root@centos74 ~]# losetup -l
[root@centos74 ~]#

6 ループバックデバイスを一括削除する方法(-D)

ループバックデバイスの一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

ループバックデバイスを一括削除する。
[root@centos74 ~]# losetup -D

ループバックデバイスの一覧を表示する。全てのループバックデバイスが削除されたことがわかる。
[root@centos74 ~]# losetup -l
[root@centos74 ~]#

7 使用中のループバックデバイスを表示する方法(-a)

[root@centos74 ~]# losetup -a
/dev/loop0: [2051]:35477848 (/root/disk1.img)
/dev/loop1: [2051]:35477849 (/root/disk2.img)

8 特定のループバックデバイスを表示する方法(-j)

ループバックデバイス一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img

disk1.imgに割り当てたループバックデバイスを表示する。
[root@centos74 ~]# losetup -j /root/disk1.img
/dev/loop0: [2051]:35477848 (/root/disk1.img)

disk2.imgに割り当てたループバックデバイスを表示する。
[root@centos74 ~]# losetup -j /root/disk2.img
/dev/loop1: [2051]:35477849 (/root/disk2.img)

9 特定の情報を表示する方法(-O)

9.1 指定可能なオプション一覧

Available --list columns:
         NAME  loop device name
    AUTOCLEAR  autoclear flag set
    BACK-FILE  device backing file
     BACK-INO  backing file inode number
 BACK-MAJ:MIN  backing file major:minor device number
      MAJ:MIN  loop device major:minor number
       OFFSET  offset from the beginning
     PARTSCAN  partscan flag set
           RO  read-only device
    SIZELIMIT  size limit of the file in bytes

9.2 ループバックデバイスとして使用しているファイルのinode番号の表示方法(BACK-INO)

[root@centos74 ~]# losetup -l -O NAME,BACK-INO
NAME       BACK-INO
/dev/loop0 35477848
/dev/loop2 35477849

disk1.imgファイルのinode番号は35477848であることがわかる。
[root@centos74 ~]# ls -i disk1.img
35477848 disk1.img

disk2.imgファイルのinode番号は35477849であることがわかる。
[root@centos74 ~]# ls -i disk2.img
35477849 disk2.img

9.3 ループバックデバイスのメジャー番号、マイナー番号の表示方法(MAJ:MIN)

[root@centos74 ~]# losetup -l -O NAME,MAJ:MIN
NAME       MAJ:MIN
/dev/loop0   7:0
/dev/loop2   7:2

10 ループバックデバイスのサイズを変更する方法(--set-capacity)

ループバックデバイスに使うファイルサイズを確認する。1Gであることがわかる。
[root@centos74 ~]# ls -l disk1.img
-rw-r--r--. 1 root root 1073741824  4月 16 20:39 disk1.img

利用可能なループバックデバイスを調べる。/dev/loop0が使えることがわかる。
[root@centos74 ~]# losetup -f
/dev/loop0

disk1.imgをループバックデバイスとして割り当てる。
[root@centos74 ~]# losetup /dev/loop0 /root/disk1.img

ループバックデバイス一覧を表示する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img

ループバックデバイスのサイズを確認する。1Gであることがわかる。
[root@centos74 ~]# blockdev --getsize64 /dev/loop0
1073741824

ループバックデバイスに使うファイルサイズを2Gに変更する。
[root@centos74 ~]# truncate -s 2147483648 disk1.img

ループバックデバイスのサイズを確認する。1Gであることがわかる。
[root@centos74 ~]# blockdev --getsize64 /dev/loop0
1073741824

ループバックデバイスのサイズを2Gに変更する。
[root@centos74 ~]# losetup --set-capacity /dev/loop0

ループバックデバイスのサイズを確認する。2Gに変更されたことがわかる。
[root@centos74 ~]# blockdev --getsize64 /dev/loop0
2147483648

11 オフセットを指定する方法(-o)

ループバックデバイスに使用するファイルを確認する。
[root@centos74 ~]# ls -l disk1.img
-rw-r--r--. 1 root root 1073741824  4月 16 22:14 disk1.img

ファイルをループバックデバイスに割り当てる。オフセットは512*1024(524288)を指定する。
[root@centos74 ~]# losetup -o $((512*1024)) -f /root/disk1.img
[root@centos74 ~]# echo $((512*1024))
524288

ループバックデバイスを確認する。
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0 524288         0  0 /root/disk1.img

12 その他

ループバックデバイスをマウントする手順を示します。

ループバックデバイスとして使用するファイルの作成
[root@centos74 ~]# fallocate -l 1G disk1.img
[root@centos74 ~]# fallocate -l 1G disk2.img
[root@centos74 ~]# ls -l disk*
-rw-r--r--. 1 root root 1073741824  4月 16 21:34 disk1.img
-rw-r--r--. 1 root root 1073741824  4月 16 21:35 disk2.img
ファイルをループバックデバイスに割り当てる
[root@centos74 ~]# losetup -f /root/disk1.img
[root@centos74 ~]# losetup -f /root/disk2.img
[root@centos74 ~]# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /root/disk1.img
/dev/loop1         0      0         0  0 /root/disk2.img
ファイルシステムの作成
[root@centos74 ~]# mkfs.xfs /dev/loop0
[root@centos74 ~]# mkfs.btrfs /dev/loop1
マウント
[root@centos74 ~]# mount -t xfs /dev/loop0 /mnt0/
[root@centos74 ~]# mount -t btrfs /dev/loop1 /mnt1/

[root@centos74 ~]# df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/sda3      xfs         18G  3.6G   15G   20% /
devtmpfs       devtmpfs   2.0G     0  2.0G    0% /dev
tmpfs          tmpfs      2.0G     0  2.0G    0% /dev/shm
tmpfs          tmpfs      2.0G  8.7M  2.0G    1% /run
tmpfs          tmpfs      2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda1      xfs       1014M  119M  896M   12% /boot
tmpfs          tmpfs      394M     0  394M    0% /run/user/0
/dev/loop0     xfs       1014M   33M  982M    4% /mnt0
/dev/loop1     btrfs      1.0G   17M  905M    2% /mnt1

X 参考情報

Linuxでrawディスクのimageファイルを扱うあれこれ(空ファイル作成、パーティション作成、マウントなど)
Why is my loop device not 600G in size?
【truncate】コマンド――ファイルを指定したサイズに変える
Arch Linux ARMのディスクイメージを作成する(losetup、kpartx)
How to use loop devices
How to format a partition inside of an img file?

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away