Man On a Mission

システム運用屋が、日々のあれこれを記録していくブログです。情報処理技術者試験の話題多し。高度試験の攻略なども。最近はやや歴史づいてます…。

【Linux】kpartxでループバックデバイスを簡単にマウントする

前回、HDDイメージやISOイメージをマウントするやり方についての記事を書きました。

oplern.hatenablog.com

しかし、パーティションが複数あるイメージファイルをマウントする場合、いちいちfdiskコマンドでセクタサイズやパーティション始点などを調べて、offset指定する必要がありましたね。
やり方を書いといてなんですが、すごく面倒くさいので、offset値を調べなくて済むようになるkpartxを使いましょう。

 なお、いつもの通り、この記事での例はUbuntuによるものです。

kpartxのインストー

まずはkpartxをインストー
以下でインストールします。普通。

sudo apt-get install kpartx

使い方

kpartxは、ディスクイメージのパーティションテーブルを読み取り、パーティションごとにデバイスマップを作成します。
/dev/mapper/の下にパーティションごとのブロックデバイスファイルが生成されるので、後はそれをマウントするだけです。
以下、前回記事でoffsetを調べてマウントする羽目になった、シングルボード コンピュータRaspberry Pi(ラズベリー パイ)のSDカードイメージ「Raspbian Jessie Lite」を使って、例を挙げます。

パーティションごとにマッピングするためには、-aオプション付きでkpartxを実行します。例では-vも付けてますが、これは冗長メッセージ出力なので省略可能です。

# kpartx -av 2017-04-10-raspbian-jessie-lite.img
add map loop0p1 (252:0): 0 83968 linear /dev/loop0 8192
add map loop0p2 (252:1): 0 2442728 linear /dev/loop0 92160 $ ls /dev/mapper/
control  loop0p1  loop0p2

上記の/dev/mapper/下のloop0p1、loop0p2がkpartxによって作成されたブロックデバイスファイルです。
これをマウントします。
前回と同様、2つ目のパーティションをマウントしてみます。

# mount /dev/mapper/loop0p2 /mnt/任意のディレクト
$ ls /mnt/任意のディレクト
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

かなり楽になりました。

なお、使い終わったらアンマウントし、デバイスマップを消去します。
やり方は以下。

# umount /mnt/任意のディレクト
# kpartx -d 2017-04-10-raspbian-jessie-lite.img