Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@hana_shin

losetupコマンドの使い方

More than 1 year has passed since last update.

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を削除する。

/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を削除する。

/dev/loop0の削除
[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?

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
hana_shin
写真は淡路島SAから明石海峡大橋を撮影したものです('19夏撮影)。'20年夏も3年連続で四国、大阪に行く予定でしたが、コロナ終息しないので断念。2021はぜひ行きたい!。取得済資格:ネットワークスペシャリスト、オンライン情報処理技術者。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?