ディストリビューションの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
※ ループバックデバイスとは、ファイルをあたかもディスクなどのブロック型デバイスであるかのように扱うためのデバイスです。