・「.iso」や「.img」形式のファイルを参照したい

LINEで送る
Pocket

ディストリビューションのISOや、Raspberry Pi のイメージファイルをダウンロードした場合、CD/DVDに焼いたり、SDカードにデータをコピーして利用しているかと思います。しかし、これらのイメージファイルはデバイスに焼き込まなくても中身を参照することができます。例えば、CentOS のDVD イメージには、rpmファイルが含まれています。外部へのネットワーク環境が無いデータセンターなどで、パッケージを追加インストールしたい場合、ISOイメージ1つをサーバにコピーすれば、依存関係に困らずパッケージを追加インストールできます。

 sudo mount -t iso9660 -o loop CentOS-7-x86_64-DVD-1804.iso /mnt/
$ ls /mnt/
CentOS_BuildTag  EFI  EULA  GPL  LiveOS  Packages  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL  images  isolinux  repodata
$ ls /mnt/Packages
389-ds-base-1.3.7.5-18.el7.x86_64.rpm                                 libreport-plugin-mailx-2.1.11-40.el7.centos.x86_64.rpm
389-ds-base-libs-1.3.7.5-18.el7.x86_64.rpm                            libreport-plugin-mantisbt-2.1.11-40.el7.centos.x86_64.rpm
                                 :
アンマウントする。
$ sudo umount /mnt/

※ Ubuntu のインストーラーはCentOSと異なり deb パッケージは含まれていません。

Raspberry Pi などのイメージファイルもSDディスクに書き込まなくても参照する事ができます。image ファイル内のパーティションが1つであればISOイメージと同様にマウントします。

$ sudo mount -t ext4 -o loop filename.img /mnt/

もし複数ある場合は、パーティション情報を参照してoffsetオプションでマウントするポイントを指定します。

イメージファイルのパーティション情報を参照する。
$ fdisk -l 2018-06-27-raspbian-stretch.img
                 :
デバイス                         起動 開始位置 最後から  セクタ サイズ Id タイプ
2018-06-27-raspbian-stretch.img1          8192    96663   88472  43.2M  c W95 FAT32 (LBA)
2018-06-27-raspbian-stretch.img2         98304  9420799 9322496   4.5G 83 Linux

2018-06-27-raspbian-stretch.img2 のoffsetは、98304*512=50331648

$ sudo mount -t ext4 -o loop,offset=50331648 2018-06-27-raspbian-stretch.img /mnt/
image ファイルの中身を参照する。
$ ls /mnt/
bin  boot  debootstrap  dev  etc  home  lib  ..........
アンマウントする。
$ sudo umount /mnt/

mount先のファイルはISOファイルと異なり書き込みも行なえるので SDカードに書き込む前にイメージファイルに修正を加える事も出来ます。

イメージファイルは、自分でも作成する事もできます。

truncate コマンドで1Gの空ファイルを作成します。
$ truncate -s 1G image.img
$ ls -lh image.img
-rw-rw-r-- 1 taro taro 1.0G  9月 10 06:50 image.img
使用可能なループバックデバイスを探す。
$ losetup -f
/dev/loop12
ループバックデバイス に イメージファイルを関連付けします。
$ sudo losetup /dev/loop12 image.img
パーティションを作成します。
$ sudo parted /dev/loop12
(parted) mklabel labelname [Enter]
(parted) mkpart [Enter]
パーティションの名前?  []? [Enter]
ファイルシステムの種類?  [ext2]? ext4 [Enter]
開始? 0% [Enter]
終了? 100% [Enter]
(parted) q [Enter]
/dev/loop12p1 が作成されるのでext4ファイルシステムを作成します。
$ sudo mkfs.ext4 /dev/loop12p1
マウントします。
$ sudo mount -t ext4 -o loop /dev/loop12p1 /mnt/
$ ls /mnt/
lost+found
アンマウントする。
$ sudo umount /mnt/
ループバックデバイスを開放します。
$ sudo losetup -d /dev/loop12

※ ループバックデバイスとは、ファイルをあたかもディスクなどのブロック型デバイスであるかのように扱うためのデバイスです。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください