複数パーティションを含むイメージデータをマウント
複数パーティションを含むイメージデータをマウントして中身を確認するサンプル
ここではパーティション が 2 つを含むイメージデータの二つ目のパーティションをマウントして中身を確認する例を示します。
# !/bin/sh -e
# イメージファイルのファイル名
FILENAME=$1
# マウントポイント
MOUNT_POINT=$2
# 引数で指定したイメージをループバックデバイスに関連づける。ループバックデバイス名は変数 LOOPBACK_DEVICE に割り当てる。
LOOPBACK_DEVICE=$(sudo losetup -P --show -f ${FILENAME})
# ループバックデバイス一覧を表示する
losetup -l
# 複数パーティションを含むイメージデータをマウントするときの肝
# 複数パーティションを含むイメージデータをループバックデバイスにマウントすると
# パーティション1 は /dev/loopXXXp1
# パーティション2 は /dev/loopXXXp2
# というように p数字 という suffix がついたデバイスが作られる。
LOOPBACK_DEVICE_P2=${LOOPBACK_DEVICE}p2
# 割り当てたイメージファイルの各パーティションに対応するループバックデバイス名一覧を表示する。
sudo ls -l ${LOOPBACK_DEVICE}*
# 割り当てたループバックデバイスをマウントする
sudo mount ${LOOPBACK_DEVICE_P2} ${MOUNT_POINT}
# マウントしたファイルシステムの中身を確認する
# 必要に応じて書き換えることが可能
sudo ls -l ${MOUNT_POINT}
# マウント解除する。
sudo umount ${MOUNT_POINT}
# ループバックデバイスを解放する。
sudo losetup -d ${LOOPBACK_DEVICE}
解説
losetup によるイメージファイルと loopback デバイスとの関連付け
losetup -f コマンドで指定したイメージファイルをループバックデバイスに関連付けます。
-
-P
でパーティションテーブルをスキャンします。 -
--show
で関連付けたループバックデバイスを表示します。
以下のコマンドを実行すると、イメージファイルパスのイメージをループバックデバイスに関連付けてそのデバイス名を表示します。
sudo losetup -P --show -f イメージファイルパス
例えば /dev/loop10
に関連付けたとすると、このイメージのパーティション1 は /dev/loop10p1
に関連付けられてパーティション2 は /dev/loop10p2
に関連付けられます。
最初のスクリプトでは ${LOOPBACK_DEVICE}p2
とすることで /dev/loop10p2
でパーティション2 を参照します。
ループバックデバイスの列挙
以下のコマンドを実行することですべてのループバックデバイスの情報を列挙して表示します。
losetup -l
ループバックデバイスに関連付けたイメージファイルをマウントする。
sudo mount ${LOOPBACK_DEVICE_P2} ${MOUNT_POINT}
${MOUNT_POINT} は引数で与えられたマウントポイントを指定します。ここでは /mnt/test
とします。
上記のコマンドは以下のようなコマンドになります。
sudo mount /dev/loop10p2 /mnt/test
これにより、イメージファイルとして指定したイメージのパーティション2を /mnt/test
で参照できるようになります。