[RaspberryPi]ディスクイメージを縮小する

福田です。

当社では RaspberryPi を何台か使って遊んでいるのですが、SDカードをイメージファイルにバックアップしているので、いじりまくってもすぐに戻ることができるようにしています。

イメージファイルは16GBのSDからバックアップしたものなので、先日16GBのSDを適当に買って来たら同じ16GBでもセクター数が違ってリストアできなくなってしまいました。イメージファイルの方のセクター数がリストア先のセクター数より大きいときに、イメージファイルを小さくした方法を紹介します。

普段使っているのはMacですが、BSDのコマンドよりLinuxのコマンドの方が使い慣れているので CentOSにて作業してます。

リサイズ手順

イメージファイルをデバイス /dev/loop0 として接続する

fdisk でパーティションサイズを変更する

とりあえず今の構成を確認

いったん /dev/loop0p2 を削除

ヘッド/シリンダ/セクタ/バイトの関係がよく分かってないのですが、とりあえず適当に小さくするために、さっきの /dev/loop0p2 の方の End を 1900 とします。

1900(cylinders) * 255(heads) * 63(sectors/track) * 512(sector size) = 14.6GB となるのかいな?

一応どうなったか確認

最後に書き込んで終了

kpartx でパーティションをデバイスのように接続

e2fsck でファイルシステムチェック

元々あった ext4 のファイルシステムの容量とパーティションサイズが合っていないのでチェックを掛ける

resize2fs でファイルシステムの容量をパーティションサイズに合わせる

後片付け

SDへのリストア

さて上でめでたくイメージファイル中のパーティションサイズが小さくなったので、SDにリストアしました。(Macにて)

ここで dd がエラーを吐いていますが、気にしないでいいです。パーティションサイズが変わっても、イメージファイルのサイズは変わっていないので2番目のパーティションの後ろのゴミが書き込まれなかっただけで、Rpiではちゃんとブートできます。

なお、dd は進捗状況が表示されないので、どこまで書いたか分からないですが kill -SIGINFO <pid> (Linuxなら kill -SIGUSR1 <pwd>) すれば dd を実行している標準出力に進捗状況が表示されます。もっと手軽に dd のシェルで Ctrl+T してもできます。

結構な手間が掛かりましたね。

fukuda
About fukuda (13 Articles)
ワシがシャチョーです。プログラミングでもMakeでも作るなあ楽しいでしょーが。ああ作りたい。いつでも作りたい。最近のお気に入りはこれ。https://youtu.be/mv38hq1UtTM

1 Trackbacks & Pingbacks

  1. RaspberryPi3用Ubuntuイメージの作成方法(Server版) - Memoteki

Leave a comment

Your email address will not be published.

*



Top