yam’s Lab

ハマったこと、学んだことを備忘録として記事にします。主にC++,Qt,ROS,Pythonについて取り扱います。

Raspberry Pi4 最小サイズでのimageファイル作成手順

Raspberry Piのバックアップなどの目的でimageファイルを作成することがありますが、その容量を小さくする方法を紹介します。
作成したimageファイルが大きいために、バックアップ/レストア作業に時間がかかったり、レストアに失敗することもあります。
そのような問題点を解決するためimageファイルの縮小は欠かせません。

環境は以下となります。
環境:Raspberry Pi 4、UbuntuMATE

では早速手順を紹介します。

用意する物

ubuntuがインストールされたPC
・PC用のSDカードリーダ

imageファイル縮小のメリット

imageファイルを小さくするメリットですが、以下の3点が挙げられます。
・SDカードの個体差の影響を受けにくい
・imageファイルサイズ以上であればより使用しているSDカードより容量の小さなSDへも使用可能
・バックアップ、レストア時間が短縮できる

領域最小化手順

1.Raspberry Piをシャットダウンし、microSDカードを抜いてPCに接続
2.superキーを押下しアクティビティを開き、Disksと検索してDisksを起動
3.左のPanelから対象SDカードを選択
4.Partition2 (Ext4)を選択
5.歯車マークを押下
6.Resizeを選択
7.スライダーを最小より1GB大きい状態に移動
8.実行
ダイアログが閉じ、Job欄がRepairing FilesystemsかResizing Filesystemになったことを確認
実行終了まで待つ
Valumes欄(ディスク容量)にFree Spaceができれば完了

9.terminalを開く
10. 該当するSDカードを探す

df -h
f:id:yamamon1010:20200806104911p:plain
df

↑の画像のような出力が表示されるので/media/user名/system-bootとなっているFilesystemを探す
(例)/dev/sda1
11. partitionサイズの確認
前手順で調べたFilesystemから末尾の1を抜いた名前を【filesystem名】とし、↓のコマンドを実行する

sudo fdisk -l 【filesystem名】

私の場合はfilesystem名が/dev/sda1だったので、sudo fdisk -l /dev/sda
実行すると↓のようなログが出力される。
f:id:yamamon1010:20200806105416p:plain
12.最終行に表示される、4列目のEnd(最後、最後までと表示される場合あり)の値を控える
バイスの末尾に1がついている方(/dev/sda1)はシステム領域で250MBくらいあります。
バイスの末尾に2がついている方(/dev/sda2)がRaspberry Piとして使用している領域となります。
単位が512Bのため大きな値が記載されています。
13.Ctrl + C で終了。

backup / restore 手順

1.terminalを開く
2. SDカードのドライブ名を確認する

df -h

領域最小化手順10.で調べた内容と同じはずですが念のため確認してください。
3.ドライブをアンマウントする
前手順で調べたFilesystemから末尾の1を抜いた名前を【filesystem名】とし、↓のコマンドを実行する。

 umount 【filesystem名】
 (例)umount /dev/sdb

4.バックアップコマンドを実行
 領域最小化手順 13で控えた値を2048で割った値を切り上げます。
 →控えた値が512B単位でバックアップは1MB単位で実行するため、
  1MB単位でのサイズを計算しています。

>>> 33730559 / 2048
16469.99951171875
  →16470
 sudo dd bs=1M if=【ドライブ名】 of=【保存先】 count=カウント
 (例) sudo dd bs=1M if=/dev/rdisk3 of=./RPi4.img count=31729

5.復元する場合は前手順のドライブ名と保存先を入れ替えます。

 sudo dd bs=1M if=【保存先】 of=【ドライブ名】
 (例) sudo dd bs=1M if=./RPi4.img of=/dev/rdisk3