web-dev-qa-db-ja.com

コマンドラインからディスクイメージをマウントする方法

/ devに対応するデバイスファイルがあるドライブをマウントする方法は知っていますが、物理デバイスを表さず、/ devに類似体がないディスクイメージ(たとえば、 ISOファイルまたはフロッピーイメージ)。 Mac OS XでFinderのディスクイメージのアイコンをダブルクリックしてこれを実行できることを知っています。これにより、ドライブが自動的にマウントされますが、ターミナルから実行できるようにしたいと考えています。これを行う一般的なUnixの方法があるかどうか、またはこれがプラットフォーム固有のものかどうかはわかりません。

43
user628544

MBRパーティションテーブルを含むハードドライブイメージの場合、マウントする必要のあるパーティションのオフセットを見つけるためにイメージをfdiskします。

fdisk -lu /path/disk.img

次に、オフセットを渡してマウントします。

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

オフセット値はバイト単位ですが、fdiskはブロック数を示すため、fdisk出力の「Begin」または「Start」列の値に512を乗算する必要があります(またはブロックサイズが何であれ)マウントするオフセットを取得します。

48
jc__

最新のGNUシステムでは、mountコマンドがそれを処理できます:

mount -o loop file.iso /mnt/dir

アンマウントするには、umountコマンドを使用するだけです

umount /mnt/dir

OSにこのオプションがない場合は、 ループデバイス を作成できます。

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

マウント解除するには、-d

umount /mnt/dir
losetup -d /dev/loop0

ファイルにHDイメージなどのパーティションがある場合は、-Pパラメータ(OSによって異なります)は、ファイルコンテンツのパーティションをマップします。

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
39
a0f3dd13

losetup -Pマルチパーティションイメージの自動化

コマンドラインからディスクイメージをマウントする方法?| Unix&Linux Stack Exchange 言及losetup -P、そしてここに、物事をさらに自動化するためのいくつかの便利なBash関数があります。使用法:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ Sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

ソース:

los() (
  img="$1"
  dev="$(Sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    echo "$dst"
    Sudo mkdir -p "$dst"
    Sudo mount "$part" "$dst"
  done
)
losd() (
  dev="/dev/loop$1"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    Sudo umount "$dst"
  done
  Sudo losetup -d "$dev"
)

試してください:

mount -o loop /path/to/file.iso /mnt

loopの後に追加します。

  • -t msdosフロッピー用
  • -t iso9660 CD-ROMイメージの場合

Linuxは通常、ファイルの種類を推測しようとします。

6
Archemar