- 1 losetupコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 ループバックデバイスを作成する方法(-f)
- 5 ループバックデバイスを全て削除する方法(-D)
- 6 ループバックデバイスを削除する方法(-d)
- 9 特定のループバックデバイスの情報を表示する方法(-j)
- 10 特定の情報を表示する方法(-O)
- 11 ループバックデバイスのサイズを変更する方法(--set-capacity)
- 12 オフセットを指定する方法(-o)
- 13 ループバックデバイスをマウントする手順
- Z 参考情報
1 losetupコマンドとは?
ファイルをループバックデバイスとして使えるようにするためのコマンドです。
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
losetupコマンドの版数は以下のとおりです。
[root@server ~]# losetup -V losetup from util-linux 2.23.2
3 オプション一覧
オプションは以下のとおりです。
[root@server ~]# 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つ作成します。
4.1 1つ目のループバックデバイス作成
まず、ループバックデバイスとして使用するファイルを作成します。ファイル名がdisk1.img、サイズが1Gのファイルを作成します。fallocateコマンドの使い方は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# fallocate -l 1G disk1.img
作成したファイルを確認します。
[root@server ~]# ls -l disk1.img -rw-r--r--. 1 root root 1073741824 2月 19 14:56 disk1.img
ファイル(disk1.img)をループバックデバイスに割り当てます。
[root@server ~]# losetup -f /root/disk1.img
ループバックデバイス一覧を確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk1.img
4.2 2つ目のループバックデバイス作成
ループバックデバイスとして使用するファイルを作成します。ファイル名がdisk2.img、サイズが1Gのファイルを作成します。
[root@server ~]# fallocate -l 1G disk2.img
作成したファイルを確認します。
[root@server ~]# ls -l disk2.img -rw-r--r--. 1 root root 1073741824 2月 19 15:01 disk2.img
ファイル(disk2.img)をループバックデバイスに割り当てます。
[root@server ~]# losetup -f /root/disk2.img
ループバックデバイス一覧を確認します。
[root@server ~]# 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)
ループバックデバイス一覧を確認します。ループバックデバイスが2つ存在することがわかります。
[root@server ~]# 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@server ~]# losetup -D
ループバックデバイス一覧を確認します。ループバックデバイスが全て削除されたことがわかります。
[root@server ~]# losetup -l [root@server ~]#
6 ループバックデバイスを削除する方法(-d)
ループバックデバイス一覧を確認します。ループバックデバイスが2つ存在することがわかります。
[root@server ~]# 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@server ~]# losetup -d /dev/loop0
ループバックデバイス一覧を確認します。/dev/loop0が削除され、/dev/loop1が残っていることがわかります。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop1 0 0 0 0 /root/disk2.img
次に、/dev/loop1を削除してみます。
[root@server ~]# losetup -d /dev/loop1
ループバックデバイス一覧を確認します。/dev/loop0、/dev/loop1ともに削除されたことがわかります。
[root@server ~]# losetup -l
9 特定のループバックデバイスの情報を表示する方法(-j)
ループバックデバイス一覧を確認します。ループバックデバイスが2つ存在することがわかります。
[root@server ~]# 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@server ~]# losetup -j /root/disk1.img /dev/loop0: [2051]:42400594 (/root/disk1.img)
/dev/loop1の情報を表示してみます。
[root@server ~]# losetup -j /root/disk2.img /dev/loop1: [2051]:42400596 (/root/disk2.img)
10 特定の情報を表示する方法(-O)
10.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
10.2 inode番号を表示する方法(BACK-INO)
ループバックとして使用しているファイルのinode番号を表示してみます。それぞれ、42400594と42400596であることがわかります。
[root@server ~]# losetup -l -O NAME,BACK-INO NAME BACK-INO /dev/loop0 42400594 /dev/loop1 42400596
次にlsコマンドでファイルのinode番号を確認してみます。disk1.imgのinode番号は42400594であることがわかります。
[root@server ~]# ls -li disk1.img 42400594 -rw-r--r--. 1 root root 1073741824 2月 19 14:56 disk1.img
disk2.imgのinode番号は42400596あることがわかります。
[root@server ~]# ls -li disk2.img 42400596 -rw-r--r--. 1 root root 1073741824 2月 19 15:01 disk2.img
10.3 メジャー番号、マイナー番号を表示する方法(MAJ:MIN)
ループバックデバイスのMAJOR、MINOR番号を表示してみます。
[root@server ~]# losetup -l -O NAME,MAJ:MIN NAME MAJ:MIN /dev/loop0 7:0 /dev/loop1 7:1
lsコマンドでMAJOR、MINOR番号を確認してみます。/dev/loop0のMAJOR、MINOR番号は、それぞれ7, 0であることがわかります。
[root@server ~]# ls -l /dev/loop0 brw-rw----. 1 root disk 7, 0 2月 19 15:28 /dev/loop0
lsコマンドでMAJOR、MINOR番号を確認してみます。/dev/loop1のMAJOR、MINOR番号は、それぞれ7, 1であることがわかります。
[root@server ~]# ls -l /dev/loop1 brw-rw----. 1 root disk 7, 1 2月 19 15:28 /dev/loop1
11 ループバックデバイスのサイズを変更する方法(--set-capacity)
ループバックデバイス一覧を確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk1.img
ループバックデバイスのサイズを確認します。1Gであることがわかります。
[root@server ~]# blockdev --getsize64 /dev/loop0 1073741824
ファイルサイズを2Gに変更します。
[root@server ~]# truncate -s 2147483648 disk1.img
ファイルのサイズを確認します。2Gに変更されたことがわかります。
[root@server ~]# ls -l disk1.img -rw-r--r--. 1 root root 2147483648 2月 19 16:22 disk1.img
ループバックデバイスのサイズを確認します。1Gであることがわかります。
[root@server ~]# blockdev --getsize64 /dev/loop0 1073741824
ループバックデバイスのサイズを変更します。
[root@server ~]# losetup --set-capacity /dev/loop0
ループバックデバイスのサイズを確認します。2Gに変更されたことがわかります。
[root@server ~]# blockdev --getsize64 /dev/loop0 2147483648
[root@server ~]# mkfs.xfs /dev/loop0
ループバックデバイスをマウントします。
[root@server ~]# mount -t xfs /dev/loop0 /mnt0/
ファイルシステムのサイズを確認します。2Gに変更されたことがわかります。
[root@server ~]# df -hT /mnt0/ ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop0 xfs 2.0G 33M 2.0G 2% /mnt0
12 オフセットを指定する方法(-o)
"-o"オプションを使うと、ファイルの指定したオフセットからループバックデバイスに割り当てることができます。
ファイルを確認します。1Gサイズのファイルであることがわかります。
[root@server ~]# ls -l disk1.img -rw-r--r--. 1 root root 1073741824 2月 19 14:56 disk1.img
オフセットは以下のように指定します。
[root@server ~]# echo $((512*1024)) 524288
ファイルのオフセット524288からをループバックデバイスに割り当てます。
[root@server ~]# losetup -o $((512*1024)) -f /root/disk1.img
オフセット524288からループバックデバイスに割り当てられていることがわかります。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 524288 0 0 /root/disk1.img
13 ループバックデバイスをマウントする手順
ループバックデバイス一覧を確認します。ループバックデバイスが2つ存在することがわかります。
[root@server ~]# 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@server ~]# mkfs.xfs /dev/loop0 [root@server ~]# mkfs.btrfs /dev/loop1
マウントするディレクトリを作成します。
[root@server ~]# mkdir /mnt0 [root@server ~]# mkdir /mnt1
ループバックデバイスをマウントします。
[root@server ~]# mount -t xfs /dev/loop0 /mnt0/ [root@server ~]# mount -t btrfs /dev/loop1 /mnt1/
/mnt0にマウントしたデバイスの情報を確認します。xfsファイルシステムであることがわかります。
[root@server ~]# df -hT /mnt0/ ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop0 xfs 1014M 33M 982M 4% /mnt0
/mnt1にマウントしたデバイスの情報を確認します。btrfsファイルシステムであることがわかります。
[root@server ~]# df -hT /mnt1/ ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop1 btrfs 1.0G 17M 905M 2% /mnt1
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ