以前はdd
を使用してイメージファイルを作成し、mkfs
およびmount
を使用してファイルシステムをセットアップし、マウントされたパーティションとしてそれらにアクセスしていました。後で、インターネットで多くの例がlosetup
を使用して/dev
の下にループデバイスエントリを作成し、それをマウントすることを確認しました。ループデバイスとして動作し、独自の/dev
エントリを持つイメージファイルが実際に必要な理由はわかりませんが、手間をかけずに同じ動作を実現できます。
概要:実際のシナリオで、fsイメージをマウントせずにマウントできるのに、なぜ/dev/loopX
entryが必要なのですか?ループデバイスの使用は何ですか?
通常、マウントはブロックデバイスで行う必要があります。ループドライバーは、ブロックデバイスフロントエンドをデータファイルに配置します。
losetup
なしでループマウントを実行すると、OSはバックグラウンドで実行します。
例えば
$ dd if=/dev/zero of=/tmp/foo bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0798775 s, 1.3 GB/s
$ mke2fs /tmp/foo
mke2fs 1.42.9 (28-Dec-2013)
....
$ losetup
$ mount -o loop /tmp/foo /mnt1
$ losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0 0 0 1 0 /tmp/foo
$ umount /mnt1
$ losetup
$
ファイルイメージにパーティションが埋め込まれている場合は、losetup
を直接呼び出す必要がある場合があります。
たとえば、この画像がある場合:
$ fdisk -l /tmp/foo2
Disk /tmp/foo2: 104 MB, 104857600 bytes, 204800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x1f25ff39
Device Boot Start End Blocks Id System
/tmp/foo2p1 2048 204799 101376 83 Linux
直接マウントできない
$ mount -o loop /tmp/foo2 /mnt1
mount: /dev/loop0 is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
しかし、losetup
とkpartx
を使用すると、パーティションにアクセスできます。
$ losetup -f /tmp/foo2
$ losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0 0 0 0 0 /tmp/foo2
$ kpartx -a /dev/loop0
$ mount /dev/mapper/loop0p1 /mnt1
$
ファイルシステムはブロックデバイスからの読み取りとブロックデバイスへの書き込みを想定していますが、イメージファイルはブロックデバイスではありません。ループデバイスは、ファイル(またはオプションで再マッピングを伴う別のブロックデバイス)の上にブロックデバイスを提供します。
mount
がすべてを処理するので、多くの場合、イメージをマウントするときにループデバイスを考慮する必要はありません。ただし、ループデバイスはまだ関与しています。 losetup -l -a
はそれらを表示します。
mountとmount -o loopの違いは何ですか も参照してください。
Linuxを使用しているようで、Linuxはその機能に間違った名前を使用しています。
私は1988年にSunOS-4.0でその機能を発明し、その機能をfbk
と呼びます-ファイルはBlocKデバイスをエミュレートします。
背景は、デバイスドライバーがプレーンファイルの上にブロックデバイスをエミュレートすることです。これは、ファイルシステムがプレーンファイルをファイルシステムのバックグラウンドストレージとして使用できないためです。それはむしろブロックデバイスを必要とし、これがfbk
がエミュレートするものです。
しばらくの間、一部の人々はプログラムをmount
をもう少し賢くし、fbk
プログラムがそれを検出した場合にファイルのmount
インスタンスを自動的に作成するマウント実装がありますブロックデバイスであると予想される引数は、代わりにプランファイルのように見えます。
ファイルからファイルシステムをマウントするためにバックグラウンドで必要でなかったとしても、ブロックデバイスを絶対に必要とするドライバーまたはプログラムを使用するすべてのセットアップで必要になります。 nbd(ネットワークブロックデバイス)サーバー、mdraid、lvmなどの複合ブロックデバイスドライバーを考えてみてください。