WindowsだけでバックアップしたOSイメージを縮小

PiShrinkというツールソフトウェアを使えば 、予め丸ごとバックアップしたRaspberry Pi OSのイメージファイルを縮小することができます。なぜ縮小する必要があるかというと、どうしてもファイルサイズが巨大になり保存や取り扱いが大変になるからです。

今回用意したRaspberry Pi Compute Module 4のバックアップイメージファイルは約30GBもあります。複数のバックアップファイルになると更に多くの保存領域が必要です。別の場所に保存したとしても、ファイルを移動やコピーするのに相当の時間かかります。ファイルサイズを縮小できれば、複数のファイル保存も現実的になります。

バックアップされたOSのイメージファイルは1つのファイルで保存でき、パーティション構成からインストールしたソフトウェアや設定など、丸ごとなので書き戻せば元通りというわけです。

産業用ラズベリーパイはeMMCにOSをインストールします。(一般的なラズベリーパイはmicroSDカード)ddコマンドやWindows環境なら「Win32 Disk Manager」を使って丸ごとバックアップすることもできます。

他のメリットもあります。

OSイメージファイルを縮小しておけば、書き込む際にファイルサイズが小さくなっているため書き込み時間が短くて済みます。これはバックアップを戻す以外にも、カスタマイズされたOSのイメージファイルを配布する際にも有効です。

縮小するメリット:

• 保存容量の軽減
• OSイメージファイルの配布に軽便
• 書き込み時間の短縮

PiShrinkを使って縮小されたイメージファイルは、パーティション(区画)を縮小してサイズを小さくし、初回起動時に自動拡張される仕組みです。、OSの内容は何も変わらず、既にあるデータも失いません。
PiShrinkの処理時間も速いので、メリットを考えてバックアップ後に縮小しておきたいですね。

PiShrinkはLinuxネイティブのソフトウェア

PiShrinkはLinux上で使うツールソフトウェアです。しかし、Windows PCとは別にLinux PCを用意する必要はありません。今のWindows OSにはWSL2があります。

WSL = Windows Subsystem for Linux

WSL2ならWindows上で作業を完結できるため、Linux初心者でも心配は要りません。作業自体もコマンドをコピー&ペーストで実行する程度で進められます。
まだ使ったことのない人は、この記事の手順を順番に進めてください。

WSL2 のメリット:

  • 仮想マシンの準備が不要
  • 高速に動作する
  • ファイル共有が容易
  • Windows 11の標準機能

VirtualBoxといった仮想マシンの構築を意識せずに利用できるのもメリットです。

処理の流れと事前準備

はじめにWindows側でWSL2でUbuntu環境を手に入れます。その後はWSL2(Ubuntu)側でPiShrinkのインストールをし、バックアップしたイメージファイルを縮小させます。
大まかに3ステップで完了します。

  1. PowerShellでWSL2(Ubuntu)をインストール
  2. PiShrinkのインストール
  3. PiShrinkで縮小を実行

Windows側にバックアップしたOSイメージファイルがある前提です。
今回用意したイメージファイルはDownloadsフォルダに置いて作業しています。

例:backup-cm4-bookworm-202503.img(約30GB)

手順1:WSL2でLinux環境のインストール

PowerShellで作業します。PowerShellは管理者権限で起動してください。スタートメニューから起動できます。
次のコマンドでインストールを開始します。

wsl --install

次のようにCreate a default Unix user accountで任意のユーザー名とパスワードを設定します。パスワードは表示されませんが2回タイプします。

PS C:\WINDOWS\system32> wsl --install
ダウンロードしています: Ubuntu
インストールしています: Ubuntu
ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu' を使用して起動できます
Ubuntu を起動しています...
Provisioning the new WSL instance Ubuntu
This might take a while...
Create a default Unix user account: win11-en
New password:
Retype new password:
passwd: password updated successfully
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

WSL2(Ubuntu)のインストールが完了すると、プロンプト名が変わります。

設定したアカウント名@Windowsのマシン名:~$ 

念のためここでWindowsを再起動してください。
再起動後はスタートメニューからUbuntu(またはWSL)を選びます。

次のような画面で作業を進めていきます。(PowerShellと似ていますがWSLの画面です)

手順2:PiShrinkのインストール

WSL2(Ubuntu)での作業は、同じくコマンドを実行していくだけです。
PiShrinkをインストールする前に、カレントディレクトリへ移動(cd)、updateコマンド、そしてPiShrinkのインストールコマンドです。

cd
sudo apt update
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh

‘pishrink.sh’ saved [12034/12034]と表示されたら完了です。

実行権を付与する

最後にPiShrinkへ実行権を与えます。

sudo chmod +x pishrink.sh

これで準備が整いました。

手順3:PiShrinkでイメージファイルを縮小

ここからイメージファイルの縮小に移ります。

PiShrinkはcdコマンドでカレントディレクトリへ保存しましたので、以下のようなコマンドで実行します。
<Windowsユーザー名>と<イメージファイル名>.imgはそれぞれ置き換えてください。

sudo ~/pishrink.sh /mnt/c/Users/<Windowsユーザー名>/Downloads/<イメージファイル名>.img

Windows上にあるDownloadsフォルダは、次のように表します。Downloadsフォルダ以外も同じようにフルパス(絶対パス)で指定してください。

/mnt/c/Users/<Windowsユーザー名>/Downloads

しばらくすると、進捗バーのようなXXXXが表示されながらWSL2(Ubuntu)画面に文字が流れていきます。

最後にファイルサイズがどうなったのか表示されて終了します。
指定したイメージファイルは縮小されたイメージファイルに置き換わっています。

(......)
rootfs: ***** FILE SYSTEM WAS MODIFIED *****
rootfs: 190466/1846656 files (0.2% non-contiguous), 1873575/7501824 blocks
resize2fs 1.47.0 (5-Feb-2023)
pishrink.sh: Shrinking filesystem
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/loop0 to 2062762 (4k) blocks.
Begin pass 2 (max = 87581)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 229)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 17486)
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/loop0 is now 2062762 (4k) blocks long.

pishrink.sh: Zeroing any free space left
pishrink.sh: Zeroed 1.1G
pishrink.sh: Shrinking partition
pishrink.sh: Truncating image
pishrink.sh: Shrunk /mnt/c/Users/win11-en/Downloads/backup-cm4-bookworm-202503.img from 30G to 8.4G

最後の行にあるように、ファイルサイズは30GB→8.4GBへとだいぶ縮小されたのが分かります。
これで保存領域の圧迫が軽減され、複数のバックアップを保存することも楽になりました。

あとは、縮小されたファイルイメージを別の場所で保存したり、microSDカードへ書き込むために使用してください。

WSLは比較的に容易

Windowsの場合はWSLを使用してPiShrinkを使えました。PiShrinkはmacOSでもLinuxでも使えます。
macOSの場合はdocker経由となり、LinuxはそもそもLinux用のツールアプリですから何も環境は変えずにそのまま実行できます。

Windowsユーザーであれば、WSLでLinux環境が手に入るためmacOSよりも敷居は低い印象です。
もし別にLinux環境があればそれに越したことはありませんが、WSLでも同じように動作するため、このくらいのツールソフトなら何も問題もなく実行できます。

今回はインストールするところからでしたから、実行に3ステップが必要でした。
2回目からはWSLを起動してPiShrinkのコマンドを1行実行すれば、直ぐにイメージファイルの縮小が行えます。

別途でLinux搭載PCを用意しなくて良く、OS仮想化ソフトウェアとは異なり、Windows環境でLinuxアプリがネイティブで動作しますのでお薦めです。


記事寄稿:ラズパイダ

非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。