kpartx を使うと HDD image の partition table を読んで /dev/mapper 以下に各パーティションを loop device として作成してくれる。
その後、例えば以下のようにすれば loop0p1 を解除出来る。
なお、英語版 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
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 等に用いるのは誤用なんだそうな。
参考:
- Wikipedia / Loop device
- stackoverflow / Cannot delete device /dev/loop0
- ITpro / ループバック・デバイスとは
追記: 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 は /dev/loop0p1 等に直接ブロックデバイスを作成するという違いがある。
losetup -P /dev/loop0 hdd.imgkpartx は /dev/dm-0 等へのシンボリックリンクを /dev/mapper/loop0p1 辺りに作るが、
losetup は /dev/loop0p1 等に直接ブロックデバイスを作成するという違いがある。
タグ
コメントをかく