Windows で PiShrink を使用して Raspberry Pi のOSイメージを縮小する

Raspberry Pi を使用していると、様々な理由でOSのバックアップを取得したくなることがあります。

例えば、

  • データ破損やハードウェアの破損に備えたい
  • 同じ構成で複数の Raspberry Pi を構成したい
  • 現在の設定内容を保存したまま、別のOSや設定を試したい

などの理由が考えられます。

Raspberry Pi のOSイメージのバックアップには未使用領域がすべて含まれてしまい、保存されたOSイメージファイルはマイクロSDカードのサイズになります(つまり、64GBのマイクロSDカードを使用している場合は、バックアップファイルも約64GBになります)。 これだと、複数OSイメージをバックアップするとバックアップ先の容量を大量に消費してしまい、あまり好ましくありません。

この記事では、PiShrinkを使ってバックアップしたOSイメージから未使用の領域を削除することで Raspberry Pi のOSイメージバックアップファイルの容量を縮小する方法を紹介します。

例えば、4GBのデータを含む64GBのマイクロSDカードのバックアップイメージを作成すると、元のイメージファイルは約64GB になりますが、このPiShrink を実行すると、約 7GB になります。

前提条件

Raspberry Pi のOSイメージをバックアップする

Win32 Disk Imagerなどを使用して、マイクロSDカードのイメージファイルを保存します。

注意
Windowsのエクスプローラーでバックアップを取得することは出来ません。
必ず、専用ソフトを使ってバックアップしてください。

ここでは、C:\RPIというフォルダにbackpu.imgというファイル名でイメージを保存します。

WindowsdiskimagerでSDカードのイメージファイルを保存

PiShrink をインストールする

WSLのターミナルを立ち上げ、以下のコマンドでPiShrinkをインストールします。

wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin

pishrink.shの使い方は以下のとおりです。

Usage: /usr/local/bin/pishrink.sh [-adhrsvzZ] imagefile.img [newimagefile.img]

  -s         Don't expand filesystem when image is booted the first time
  -v         Be verbose
  -r         Use advanced filesystem repair option if the normal one fails
  -z         Compress image after shrinking with gzip
  -Z         Compress image after shrinking with xz
  -a         Compress image in parallel using multiple cores
  -d         Write debug messages in a debug log file

PiShrink でOSイメージを縮小する

以下のコマンドでOSイメージを縮小します。

cd /mnt/c/RPI
sudo pishrink.sh backup.img

約60GBのイメージを4GBに縮小することができました。

$ sudo pishrink.sh backup.img
pishrink.sh v0.1.3
pishrink.sh: Gathering data ...
Creating new /etc/rc.local
pishrink.sh: Checking filesystem ...
rootfs: 112142/3820160 files (0.2% non-contiguous), 1132709/15383040 blocks
resize2fs 1.45.5 (07-Jan-2020)
pishrink.sh: Shrinking filesystem ...
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/loop2 to 1006430 (4k) blocks.
Begin pass 2 (max = 62253)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 470)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 9199)
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/loop2 is now 1006430 (4k) blocks long.

pishrink.sh: Shrinking image ...
pishrink.sh: Shrunk backup.img from 59G to 4.1G ...

Raspberry Pi にOSイメージをリストアする

SDカードに何かしらのデータがある場合は、SD Memory Card Formatterを使って一度SDカードをフォーマットしておく必要があります。

バックアップしたイメージを書き込んだマイクロSDカードを Raspberry Pi に差し込んで最初の起動時に、SDカードの最大サイズまで容量が拡張されます。

おわりに

PiShrinkを使用すると、元々64GBほどのOSバックアップイメージを未使用領域を削って容量削減することができました。

PiShrink.shの中身を覗いてみたところ、parted コマンドを使って容量の縮小を行っているようですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)