PCで作業している際,たまにCD/DVDなどのISOイメージやHDDイメージファイルの中からファイルを抜き出したくなることがある。
Linuxではループバックデバイス機能を使うと,これらのイメージファイルをディスク*1としてマウントすることが出来る。
これによりイメージファイルの中身を編集したりすることも出来るようになる。
mountコマンドで-o loopオプション付きでを実行すれば,イメージファイルをマウントすることが出来る。
試してみたいのだが,マウントしてみるイメージファイルが必要。
DDコマンドを使って試しにイメージファイルを作成して,これをマウントしてみることにした。
$ dd if=/dev/zero of=./100m.img bs=1M count=100 $ mkfs.ext4 100m.img
# mount -t ext4 -o loop 100m.img /mnt/任意のディレクトリ
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
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/任意のディレクトリ
新しくコメントをつける