Raspberry Piプロジェクトに熱心に取り組んでいる場合は、コードだけでなく、OSとソフトウェア全体の完全なディスクバックアップを作成することをお勧めします。最高のRaspberry Pi microSDカードでも故障したり紛失したりする可能性があり、プロジェクトを別のカードで再利用したり、他の人と共有したりしたい場合もあるでしょう。例えば、Tom's Hardwareでは、バッテリーテストに使用するRaspberry Piウェブサーバーを所有しており、複数のRaspberry Piには全く同じイメージが入っています。
幸いなことに、バックアップ元のmicroSDカードの使用容量よりもさらに小さい圧縮ディスクイメージを作成する方法があります。ディスクイメージを作成するには、Raspberry Piに接続して書き込みを行う外付けUSBドライブが必要です。USBドライブの容量が元のmicroSDカードよりも大きい場合(例:16GBのカードに32GBのUSBドライブを使用)、縮小する前にカード全体をバックアップできます。ただし、十分な容量のUSBドライブがない場合は、この記事の下部にあるrootfsパーティションの縮小に関するセクションをご覧ください。
Raspberry Piのディスクイメージを作成する方法
1. USBフラッシュドライブまたはハードドライブ をNTFS(Windows PCで使用していて、このドライブをPCで読み取る予定の場合)またはEXT4(Linuxの場合)でフォーマットします。フラッシュドライブの容量が使用領域よりも大きいことを確認してください。ドライブには覚えやすいボリューム名(例:今回の場合は「pibkup」)を付けてください。必要に応じて、Raspberry Piで直接ドライブをフォーマットすることもできます。
2. USB ドライブを Raspberry Pi に接続します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
3. Raspberry Pi に pishrink.sh をインストールし、次のように入力して/usr/local/binフォルダーにコピーします。
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
sudo chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin
4.USBドライブの マウントポイントパスを確認するには、次のように入力します。
lsblk
Raspberry Piに接続されているドライブのリストと、それぞれのマウントポイント名が表示されます。USBドライブはおそらく/media/pi/[ボリューム名]にマウントされているはずです。今回の場合は/media/pi/pibkupでした。ドライブがマウントされていない場合は、USBドライブを接続した状態で再起動するか、sudo mkdir /dev/mysubと入力してディレクトリを作成し、sudo mount /dev/sda1 /dev/myusbと入力して手動でマウントすることもできます。ただし、既にマウントされている場合は、この操作は実行できません。また、実行すべきではありません。
5. dd コマンドを使用して、 すべてのデータを img ファイルにコピーします。
sudo dd if=/dev/mmcblk0 of=[mount point]/myimg.img bs=1M
ただし、コピー元のmicroSDカードのパーティションを縮小した場合は、count属性を使用して、使用中のMB数だけコピーするように指示する必要があります。例えば、今回のケースでは16GBのカードを使用していましたが、rootfsを6.5GBに縮小した後、カードの使用容量は約6.8GBになりました(/bootパーティションを含めた場合)。そこで、安全策として(コピーするデータが少なすぎるより多すぎる方が良いため)、count=7000を使用して、ddに7GBのデータをコピーするように設定しました。データ量はcount * ブロックサイズ(bs)に等しいため、7000 * 1MBは7GBを意味します。
sudo dd if=/dev/mmcblk0 of=[mount point]/myimg.img bs=1M count=7000
パーティションを縮小したことがある場合にのみ、この操作を行ってください。countコマンドを使用してパーティション全体より少ないサイズでコピーした場合、データが欠落していたり、起動しない不完全なイメージが作成される可能性があります。
6. USBドライブのルートディレクトリに移動します。
cd /media/pi/pickup
7. -z パラメータを指定した pishrink を使用し、イメージを gzip で圧縮します。
sudo pishrink.sh -z myimg.img
この処理にも数分かかる場合がありますが、完了すると「myimg.img.gz」という適度なサイズの画像ファイルが作成されます。このファイルをPCにコピーしたり、クラウドにアップロードしたり、友人に送信したりすることも可能です。
Raspberry Piのパーティションを縮小する方法
microSDカードのディスクイメージを作成したいのに、大容量の外付けUSBドライブを持っていないと、問題が発生します。上記のチュートリアルで最終的に作成する.img.gzファイルは、元のカードよりもはるかに小さくなるはずですが、それでもプロセスの一部として、圧縮されていない.imgファイルを保存するための十分な空き容量が必要です。
特に面倒なのは、ddファイルのコピー処理がデフォルトでmicroSDカードの全容量、つまり未使用領域も含めてイメージを作成してしまうことです。例えば、64GBのmicroSDカードを持っているのに、実際に使用しているのは6GBだけだとします。rootfsパーティションを縮小しないと、64GBすべてを外付けドライブにコピーすることになり、完了までに非常に時間がかかり、少なくとも65GBの空き容量が必要になります。
解決策としては、microSDカードのrootfsパーティションを、使用容量より少しだけ大きいサイズに縮小することです。その後、パーティションだけをUSBドライブにコピーします。
縮小するには、USB microSD カード リーダーと、Raspberry Pi OS が入った 2 枚目の microSD カードが必要になります。
1.ソース microSD カード(コピーしたいカード)をリーダーに挿入し、Raspberry Pi に接続します。
2.別の microSD カードからRaspberry Pi を起動します。
3. Raspberry Pi にgparted をインストールします。
sudo apt-get install gparted -y
4. Raspberry Pi OS GUIから gpartedを起動します。スタートメニューの「システムツール」セクションにあります。
5. gparted ウィンドウの右上隅にあるプルダウン メニューから 外部 microSD カードを選択します。
6.ルートファイルシステムパーティションがマウントされている場合(横に鍵アイコンが表示されている場合)、右クリックしてメニューから「アンマウント」を選択し、アンマウントします。オプションがグレー表示になっている場合は、マウントされていません。
7. rootfs を右クリックし、「サイズ変更/移動」を選択します。
8. パーティションの新しいサイズを最小サイズかそれより少し大きいサイズに設定し、[サイズ変更] をクリックします。gparted は使用済み領域の量を過大報告する場合があります (4.3 GB 使用中のパーティションをアンマウントすると、6 GB が使用中であると表示されるように変更されます)。ただし、少なくとも最小値を使用する必要があります。
9. gparted ウィンドウの緑色のチェックマークをクリックし、 「適用」 (警告が表示された場合) をクリックして続行します。
10. Raspberry Piをシャットダウンします。
11.ソース microSD カードをUSB カード リーダーから取り外し、Raspberry Pi に挿入して起動します。
12.上記のディスクイメージ作成セクションの指示に従ってください。手順5では 必ずcount属性を使用してください。
Raspberry Piのディスクイメージをカードに書き込む
完了すると、拡張子が.img.gzのファイルが作成されます。Webからダウンロードした.imgファイルと同じように、microSDカードに書き込む(「焼き込む」)ことができます。カスタムイメージを書き込む最も簡単な方法は次のとおりです。
1. PCで Raspberry Pi Imagerを起動します。Raspberry Pi Imagerをまだインストールしていない場合は、ダウンロードできます。
2. 「OS を選択」メニューから 「カスタムを使用」を選択します。
3. .img.gz ファイルを選択します。
4. 書き込み先の microSD カードを選択します。
5. 「書き込み」をクリックします。