|
現: 2023-05-02 (火) 12:09:01 yuji  |
| + | * ディスクイメージファイルをマウントする [#o96ce30a] |
| + | PCで作業している際,たまにCD/DVDなどのISOイメージやHDDイメージファイルの中からファイルを抜き出したくなることがある。 |
| | | |
| + | Linuxではループバックデバイス機能を使うと,これらのイメージファイルをディスク((正確にはブロックデバイス))としてマウントすることが出来る。~ |
| + | これによりイメージファイルの中身を編集したりすることも出来るようになる。 |
| + | |
| + | ** 実際の方法 [#p0618aad] |
| + | 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/任意のディレクトリに,イメージファイルがマウントされる。~ |
| + | 読み込みはもちろん,書き込みも可能。 |
| + | |
| + | ** CD/DVDイメージのマウント(ISOイメージ) [#f6de7a7a] |
| + | 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 |
| + | |
| + | ** SDカードのイメージのマウント [#c457e8a5] |
| + | 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/任意のディレクトリ |