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


39

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


1
OS Xのコマンドラインで実行したいですか?あなたはそれについて言及しますが、質問が特定のOSに固有のものである場合、明示的である方が良いかもしれません。また、どのような種類のディスクイメージですか?.iso?
-ilkkachu

回答:


42

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

fdisk -lu /path/disk.img

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

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

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


6
losetup -P一般的にこの方法よりも便利です:unix.stackexchange.com/a/316407/32558
Ciro Santilli新疆改造中心法轮功六四事件

35

最新の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

これは基本的localhostにディスクイメージの場合(ループバック!)です。
モニカとライトネスレース

2
losetupそしてmount -o loop、Linuxの固有のものです。これは、(illumosとFreeBSDが異なる構文と同等のものを持っているでしょうがHurdのように、illumosまたはkFreeBSD)別のカーネルを使用してGNUディストリビューションでは動作しません
ステファンChazelas

さらに自動化するためのいくつかの機能を次に示します。unix.stackexchange.comlosetup / a
Ciro Santilli新疆改造中心法轮功六四事件

6

試してください:

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

次の後に追加できますloop

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

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


6

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"
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.