Raspberry Pi4のimage(データ)をバックアップし、より大容量なmicroSDカードにリストアする方法
前書き
本記事では、Raspberry Pi4のOS imageをバックアップし、より大容量なmicroSDカードにバックアップimageをリストアする方法を紹介します。
Raspberry Piには、「SD Card Copier」というアプリがインストールされていますが、本記事では使用しません。代わりに、CLIでmicroSDカードのデータをバックアップ/リストアします。
検証環境
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
						       _,met$$$$$gg.          nao@debian      ,g$$$$$$$$$$$$$$$P.       ----------    ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 10 (buster) x86_64   ,$$P'              `$$$.     Kernel: 4.19.67  ',$$P       ,ggs.     `$$b:   Uptime: 1 hour, 52 mins  `d$$'     ,$P"'   .    $$$    Packages: 4331 (dpkg), 13 (flatpak)   $$P      d$'     ,    $$P    Shell: fish 3.0.2   $$:      $$.   -    ,d$$'    Resolution: 2560x1080   $$;      Y$b._   _,d$P'      DE: Pantheon   Y$$.    `.`"Y$$$$P"'         WM: Mutter(Gala)   `$$b      "-.__              Terminal: io.elementary.t    `Y$$                        CPU: AMD Ryzen 7 3800X 8- (16) @ 3.900GHz     `Y$$.                      GPU: NVIDIA NVIDIA Corporation TU107       `$$b.                    Memory: 4549MiB / 64404MiB         `Y$$b.           `"Y$b._                                       | 
					
Raspberry Piのバックアップimageを作成
まず、Host環境(Linux)にカードリーダーを接続し、microSDカードを挿入します。microSDカードがLinux上で、どのデバイスファイル(/dev以下のファイル)として認識されているかをfdiskコマンドで調べます。
以下の例では、HDD2個、SSD2個、microSDカード1個が搭載された環境に対して、fdiskコマンドを使用しています。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65  | 
						$ sudo fdisk -l Disk /dev/sdc: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors Disk model: WDC WD40EZRZ-00G Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 7BABC8AE-DFD4-4249-9877-E00C4E8A169C Device     Start        End    Sectors  Size Type /dev/sdc1   2048 7814037134 7814035087  3.7T Linux filesystem Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors Disk model: TS256GMTS800     Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 87F71BE3-96D5-4AF9-B694-6E2DE9543803 Device         Start       End   Sectors   Size Type /dev/sda1       2048   1050623   1048576   512M EFI System /dev/sda2    1050624 433233919 432183296 206.1G Linux filesystem /dev/sda3  433233920 500117503  66883584  31.9G Linux swap Disk /dev/sdb: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors Disk model: WDC WD40EZRZ-00G Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: EEF005D9-4A2A-48EC-A27A-009F7D5BA083 Device          Start        End    Sectors  Size Type /dev/sdb1        2048 3900000000 3899997953  1.8T Linux filesystem /dev/sdb2  3900000256 7814037134 3914036879  1.8T Linux filesystem Disk /dev/sdd: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Disk model: WDC WDS200T2B0B  Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: CC896053-2073-495A-A3F0-3D0ECAC02B6E Device          Start        End    Sectors  Size Type /dev/sdd1        2048    1050623    1048576  512M EFI System /dev/sdd2     1050624 3772981247 3771930624  1.8T Linux filesystem /dev/sdd3  3772981248 3907028991  134047744 63.9G Linux swap Disk /dev/sde: 14.4 GiB, 15489564672 bytes, 30253056 sectors Disk model: STORAGE DEVICE   Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x9edea3d6 Device     Boot  Start      End  Sectors  Size Id Type /dev/sde1         8192   532479   524288  256M  c W95 FAT32 (LBA) /dev/sde2       532480 30253055 29720576 14.2G 83 Linux  | 
					
上記の出力は、HDDやSSDが沢山マウントしてあるので分かりづらいですが、サイズから/dev/sdeがRaspberry Pi用のmicroSDカードだと判断できます。
次に、microSDカードのデータを”raspi.img”としてカレントディレクトリにバックアップします。バックアップには、ddコマンドを使用します。
| 
					 1 2  | 
						※ ifがバックアップ対象、ofが出力先のファイルPATH、bsが1度に読み書きするサイズ $ sudo dd if=/dev/sde of=raspi.img bs=10M  | 
					
バックアップが完了した後、microSDカードをカードリーダから取り外します。
バックアップimageをmicroSDカードにリストア
先程バックアップしたRaspberry Piのimageを新しいmicroSD(今回は64GB)にリストアします。microSDカードがどのデバイスファイルに割り当てられたかは、前述の手順と同様にfdiskコマンドで確認します(確認結果は省略し、/dev/sdeだったと仮定して以下の手順を進めます)。
バックアップと同様に、リストアにもddコマンドを使用します。
| 
					 1 2  | 
						※ ifがバックアップしたimage、ofが出力先のmicroSDカードのPATH、bsが1度に読み書きするサイズ $ sudo dd if=raspi.img of=/dev/sde bs=20M  | 
					
microSDカードのパーティションを拡張
今回の例では、Raspberry Pi用のmicroSDカードは、容量が16GBから64GBに拡張されました。しかしながら、ddコマンドで新しいmicroSDカードにリストアしただけでは、使用できる領域は16GBのままです。
そのため、microSDカードのパーティションサイズをmicroSDカードの容量限界まで拡張します。パーティションの拡張には、Raspberry Pi公式の設定ツールであるraspi-configコマンドを使用します。
以下の手順は、Raspberry Pi上で実行してください。
| 
					 1 2 3 4 5 6 7 8  | 
						$sudo raspi-config ※ 以下の順で選択肢を選んでください。 [7 Advanced Options]   ⇓ [A1 Expand Filesystem]   ⇓ 再起動を促すメッセージでYes  | 
					
おまけ:バックアップimageサイズを縮小する方法
Raspberry Pi公式がバックアップimageを縮小するためのperlスクリプトを提供しています。以下の書式で使用します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						※ スクリプトに実行権限を付与 $ chmod a+x resizeimage.pl  ※ キャッシュをファイルに書き込まないとエラーとなるため、書き出し $ sync ※ 書式:sudo ./resizeimage.pl $(imageの絶対PATH) $ sudo ./resizeimage.pl  /home/nao/img/raspi.img raspi.img: ========== Old size - 14771 MB (14.43 GB) New size - 7304 MB (7.13 GB) Image file was reduced by 7467 MB (7.29 GB)  | 
					
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。



1件の返信
[…] Raspberry Pi4のimage(データ)をバックアップし、より大容量なmicroSDカードに… […]