背景
この記事では使用しているRaspberry Piのイメージファイルを圧縮する方法について説明をします。
Raspberry PiのイメージファイルをコピーするためにはWin32DiskImagerでマイクロSDのイメージファイルを作成し、それを別のマイクロSDに書き込めばよいのですが、簡単ではありません。
イメージファイルはマイクロSDの容量と同じファイルサイズになり、とてもサイズが大きくなります。加えて、マイクロSDはそれぞれ微妙にサイズが異なっているために同じ容量のマイクロSDだと書き込みできないときがあります。
効果
私がコピーや配布したRaspberry Piのイメージファイルは16GBのマイクロSDにRasbianのliteと、必要なアプリケーションを入れています。マイクロSDの使用領域は3.8GBですが、Win32DiskImagerでマイクロSDのイメージファイルを作成すると16GBになります。以下の作業によりファイルの圧縮を行って、最終的には1GB以下にすることができました。
今回はWindows PCでの作業を前提とします。MACはClassmethodさんのMac上でPiShrinkがインストールされたDockerコンテナを使用してRaspberry PiのSDカードのバックアップを作成する方法の記事がありました。
準備するもの
Windows PC(windows 10)側アプリケーション
- VirtualBox 6.1 こちらから本体とExtention Packをダウンロードし、本体とExtension Packの両方をインストールしてください。
- VirtualBOXで動かすubuntu こちらからダウンロードしてください。記事作成時は
ubuntu-ja-20.04.1-desktop-amd64.iso
が最新版でした。
流れ
- Virtual BOXでubuntuを動かす
- Virtual BOXとwindowsで共有フォルダの設定をして、ubuntuにマイクロSDのイメージファイルを渡す
- マイクロSDの未使用領域を解放する。
- PiShrinkでマイクロSDの無駄な領域を削除して、zip圧縮する
1. Virtual BOXでubuntuを動かす
- virtual boxw立ち上げて「新規」をクリック
Ubuntuで作業しますので、適当な名称を付けてubuntuを選択します。
メモリサイズはPCのメモリの半分程度にしました
続いて仮想ハードディスクを作成する
→VDI(VirtualBox Disk Image')
→可変サイズ
→ハードディスクのサイズを設定→作成をクリックします。
- 続いて起動をクリックしてubuntuのインストールをします。
起動をクリックすると画面が開きますので、ダウンロードしたubuntuのイメージファイルを設定します。
しばらく時間がかかりますが、画面が出たらubuntuをインストール
をクリックします
何回か画面に従ってクリックしていきます。そして最後にubuntuが再起動します。
2. Virtual BOXとwindowsで共有フォルダの設定をして、ubuntuにマイクロSDのイメージファイルを渡す
VirtualBOXのマネージャ画面で「共有フォルダー」の設定をクリックして任意のフォルダ(上段)とubuntu側でのマウント先を指定します。
ubuntu側で実行してwindows側のshareフォルダを/mnt/shareにマウントします。
上段は最初の一回だけ実行してください。
下段は起動するたびに実行する必要があります。
sudo apt-get install virtualbox-guest-utils
sudo mount.vboxsf share /mnt/share
ここでWindowsに戻りWin32DiskImagerなどを利用してマイクロSDのイメージファイルをshareフォルダに保存してください。
3. マイクロSDの未使用領域を解放する。
続いて、ubuntuでファイル容量の削減をしていきます。
まず、imgファイルをubuntuにマウントします。
sudo losetup -f
でマウント先を調べます。loop7がマウント先と返されました。
sudo losetup -f
> /dev/loop6
続いて、imgファイルをマウントします。
1行目でimgファイルをマウントし、2行目でパーティションの認識、3行目でgpartedを起動します。gpartedがインストールされていないときはsudo apt-get install gparted
でインストールしてください。
sudo losetup /dev/loop6 /mnt/share/イメージファイル名.img
sudo partprobe /dev/loop6
sudo gparted /dev/loop6
gpartedを起動すると以下のようになりした。
ext4 rootfsを右クリックしてリサイズを選択、パーティションを使用領域を限界まで小さくし、✔を押して保存します。
4. PiShrinkでマイクロSDの無駄な領域を削除して、zip圧縮する
PiShrinkを利用してSDカードのイメージファイルから無駄な領域を削除します。
sudo pishrink /mnt/share/イメージファイル.img
自分が実行したときには15GBから3.1GBに圧縮できたと返ってきました。
出力されたimgファイルをzip圧縮して終了です。
zip -r zip後のファイル名 イメージファイル.img
参照したサイト
もっと良いやり方があったら教えてください。