Raspberry Pi のSDカードのクローン
バックアップイメージの取得とリストア
sudo parted -l
を使用してSDカードのパスを確認-
sudo umount /dev/sdX
を実行してSDカードをアンマウントExample
- クローン元:
- /dev/sdX
- /dev/mmcblk0
- クローン先:
- /dev/sdY
- /dev/mmcblk1
- クローン元:
-
ディスクのイメージを作成
- ディスクのイメージのリストア
- クローンが完了したらSDカードをRaspberry Piデバイスに挿し、起動する
Gpartedとは
ディスクパーティションとファイルシステムの作成、削除、リサイズ、移動、検査、そして複製に使用される。新しいオペレーティングシステム (OS) 用の領域の作成、ディスク使用状況の再編成、ハードディスク上のデータの複製、そしてあるパーティションの別パーティションへのミラーリング(ディスクイメージング)に有用なフリーソフト。
install
準備
クローン先のSDカードのパーティションを全て削除しておく
クローン
Gaprtedを起動
- 右上にある下向きの矢印をクリックしてクローン元のディスクを選択
- 一番左のパーティションをクリックし、右クリックしてコピーを選択
- 右上にある下向きの矢印をクリックしてクローン先のディスクを選択
- 未割り当て領域で右クリックし貼り付けを選択
- 1-4を末尾のパーティションまで繰り返す
- 緑色のチェックボタンをクリックし、全ての操作を適用する
- 処理が完了したらGpartedを終了し、SDカードをPCから抜きRaspverry Piデバイスに挿し起動する
#!/bin/bash
# 引数からデバイスのパスを取得
input_device_path="$1"
device_path="$2"
# デバイスのパスが指定されていない場合、エラーメッセージを表示して終了
if [ -z "$device_path" ]; then
echo "デバイスのパスを指定してください。"
exit 1
fi
# パーティション情報を配列に抽出
mapfile -t partition_info < <(sudo parted "$device_path" -s unit s print | awk '/^ *[0-9]+/ {gsub(/,/, "", $7); print $1, $2, $3, $7, $6, $5}')
# 配列の要素を表示
for ((i = 0; i < ${#partition_info[@]}; i++)); do
info="${partition_info[i]}"
IFS=" " read -r number start end flags name filesystem <<< "$info"
echo "パーティション番号: $number"
echo "開始セクタ: $start"
echo "終了セクタ: $end"
echo "ファイルシステム: $filesystem"
echo "名前: $name"
echo "フラグ: $flags"
echo "-------------------------"
if [[ "$filesystem" == "ext4" ]]; then
sudo parted "$device_path" mktable gpt
wait
sudo parted "$device_path" mkpart $name $filesystem $start $end -a none
wait
sudo e2image -ra -p -f "$input_device_path$number" "$device_path$number"
wait
e2fsck -f -y -v "$device_path$number"
wait
sudo parted "$device_path" set $number $flags on
else
sudo parted "$device_path" mkpart $name $filesystem $start $end -a none
wait
sudo dd if="$input_device_path$number" of="$device_path$number" bs=1M status=progress
wait
sudo parted "$device_path" set $number $flags on
wait
fi
done
echo "finish."
スクリプトの準備
上記のスクリプト内容を貼り付けて保存権限を与える