hack のためのネタ帳, etc,,,

kpartx を使うと HDD image の partition table を読んで /dev/mapper 以下に各パーティションを loop device として作成してくれる。
kpartx -va hdd.img # 作成
kpartx -vd hdd.img # 削除
きちんと消えたかどうかは /dev/mapper 以下を確認すると共に、losetup でも確認する。
losetup -a
たまに /dev/loop* から消せなくなってる場合があるがその時は dmsetup も確認
dmsetup info
/dev/mapper 上のパーティションが解除出来なくなっている場合、まず、以下のように fuser を用いて loop device が使用中でないことを確認する。
fuser /dev/loop0
fuser /dev/mapper/loop0p1
使用中のプロセスがあれば、まずそのプロセスを kill しておく。
その後、例えば以下のようにすれば loop0p1 を解除出来る。
dmsetup remove loop0p1
最終的には losetup で loop0 等も解除すれば良い。
losetup -d /dev/loop0

なお、英語版 wikipedia によると loopback device は OS 内のネットワーク用に予約されている用語なので HDD image 等に用いるのは誤用なんだそうな。

参考:
追記: 2015-02-26
fuser や lsof で使用されてない状態でありながら、
kpartx -d に device or resource busy で失敗し、
dmsetup remove でも同様に device or resource busy で失敗した。
結局 losetup -d /dev/mapper/loop0p2 みたいにしたら外れた。

と思ったけど、dmsetup info には情報が残ってしまって、
再度 kpartx -a した際に busy 扱いされてしまう
どうしろとorz
以下のように losetup に -P オプションを用いると、パーティション切ったディスクのイメージを loop にぶら下げることが出来る。
losetup -P /dev/loop0 hdd.img
kpartx は /dev/dm-0 等へのシンボリックリンクを /dev/mapper/loop0p1 辺りに作るが、
losetup は /dev/loop0p1 等に直接ブロックデバイスを作成するという違いがある。

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます