ディスクイメージファイルをマウントする anchor.png

PCで作業している際,たまにCD/DVDなどのISOイメージやHDDイメージファイルの中からファイルを抜き出したくなることがある。

Linuxではループバックデバイス機能を使うと,これらのイメージファイルをディスク*1としてマウントすることが出来る。
これによりイメージファイルの中身を編集したりすることも出来るようになる。

Page Top

実際の方法 anchor.png

mountコマンドで-o loopオプション付きでを実行すれば,イメージファイルをマウントすることが出来る。

試してみたいのだが,マウントしてみるイメージファイルが必要。
DDコマンドを使って試しにイメージファイルを作成して,これをマウントしてみることにした。

  • イメージファイルの作成
    100MB,ext4フォーマットのイメージファイルを作成する。
    $ dd if=/dev/zero of=./100m.img bs=1M count=100
    $ mkfs.ext4 100m.img
    これで,約100MBのイメージファイルが出来ました。中身は空っぽ。
  • イメージファイルのマウント
    上記ので作成したイメージファイルをマウントする。
    # mount -t ext4 -o loop 100m.img /mnt/任意のディレクトリ
    このようにすると,/mnt/任意のディレクトリに,イメージファイルがマウントされる。
    読み込みはもちろん,書き込みも可能。
Page Top

CD/DVDイメージのマウント(ISOイメージ) anchor.png

CD/DVDのISOイメージを同様にマウントしてみる。
例として,Ubuntu 16.04 LTSのインストールディスクイメージ ubuntu-ja-16.04-desktop-amd64.iso をマウントしてみる。

# mount -t iso9660 -o loop ubuntu-ja-16.04-desktop-amd64.iso /mnt/任意のディレクトリ

書き込み禁止だという警告が出るけど,マウントはされる。(読み込み専用)

$ ls /mnt/任意のディレクトリ
EFI  README.diskdefines  boot  casper  dists  isolinux  md5sum.txt  pool  preseed
Page Top

SDカードのイメージのマウント anchor.png

Raspberry PiにインストールするOSのイメージファイルをマウントしてみる。

Raspbian Stretch Lite を使ってみる。

# mount -t ext4 -o loop 2018-04-18-raspbian-stretch-lite.img /mnt/任意のディレクトリ

しかし,以下のようなメッセージが表示されてうまくいかない。

mount: 何らかのエラーにより、マウントが失敗しました。
       ファイルシステムタイプ, オプション, /dev/loop0 上のスーパー
       ブロック, 必要なコードページ指定/ヘルパープログラム
       など、何らかの設定が間違っているものと思われます。
       syslog 内に記録された情報が手助けになるものと思います - 
       dmesg | tail などを実行してお読みください

これは,このイメージファイルにパーティションが複数あるから。
複数のパーティションが含まれるディスクイメージの場合,パーティションを指定してマウントする必要がある。

これをどうするかと言うと,offsetオプションを使ってマウントすることが出来る。

offsetに指定する値を調べるために,fdisk -l -u として,ディスクイメージの情報を見てみる。

$ fdisk -l -u 2018-04-18-raspbian-stretch-lite.img
ディスク 2018-04-18-raspbian-stretch-lite.img: 1.8 GiB, 1862270976 バイト, 3637248 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc7cb7e34

デバイス                              起動 開始位置 最後から  セクタ サイズ Id タイプ
2018-04-18-raspbian-stretch-lite.img1          8192    96453   88262  43.1M  c W95 FAT32 (LBA)
2018-04-18-raspbian-stretch-lite.img2         98304  3637247 3538944   1.7G 83 Linux 

offsetオプションに指定する値は,セクタサイズ×マウントしたいパーティションの始点になる。
例えば,上記の二つ目のパーティションをマウントする場合,512*98304=50331648 が指定値になる。

# mount -t ext4 -o loop,offset=50331648 2018-04-18-raspbian-stretch-lite.img /mnt/任意のディレクトリ

今度は,マウント出来ました。

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

ちなみに,以下のようにoffset指定することも可能。

# mount -t ext4 -o loop,offset=$((98304*512)) 2018-04-18-raspbian-stretch-lite.img /mnt/任意のディレクトリ

*1 正確にはブロックデバイス

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 169, today: 1, yesterday: 0
最終更新: 2023-05-02 (火) 12:09:01 (JST) (360d) by yuji