セットアップ済みのラズパイOSをイメージバックアップし、リストアに備える。OSサイズを縮小する。
RasbianOSをインストール後、色々セットアップしていく中で、誤ってシステムを壊してしまうと、それまでの作業がすべて無駄になって、世の中すべてが敵に回ったような気分にさせられちゃいます。
そんなときのために、適当なタイミングで(OSをインストール後、日本語対応やネットワークのセットアップや、よく使うソフトウエアをセットアップし終わった頃合い)OSのイメージバックアップを作成しておくと、そのイメージバックアップからラズパイ環境を復旧できて、明日からもがんばろうという気にさせてくれます。
【準備するもの】
- パソコン
- MicroSDドライブ
- MicroSDカード
1.稼働中のOSシステム(MicroSDカード)をディスクイメージに抽出します。
ラズパイからMicroSDを取り出して、コピー作業するパソコンのMicroSDドライブに差し込みます。
Win32 DISK Imager を起動します。
- 新しいテキストファイルを作って、それをイメージファイル名に変更してから、指定する手順をよく目にしますが、新規バックアップ名を直接指定して、問題なくバックアップファイルが作れます。
- MicroSDにあったRasbianOSのイメージファイルが、上記の場合には、パソコンのDドライブにコピーされました。
2.バックアップしたディスクイメージから、MicroSDカードにリストア
リストアするMicroSDカードを、SDカードドライブに差し込みます。Win32 DISK Imager を起動します。
操作のイメージ
3.RasbianOSのサイズを使っているだけに縮小する
下の方法は、ラズパイ財団のHPで紹介されていたんですが、最近はリニューアルされて、なくなってしまったような・・・
以前は、HPから持ってこれたのですが・・・と思っていたらありました。
https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=58069
項番1、2でリストアするときに、バックアップイメージが同じサイズのMicroSDに書き戻しているのに、エラーになってしまうことがあります。MicroSDのメーカー、種類によるのかよくわからないのですが、その場合にこの方法で縮小すると書き込めるようになります。
vi resizeimage.pl #!/usr/bin/perl use utf8; use 5.010; use strict; #use autodie; use warnings; #use diagnostics; my $who = `whoami`; if ($who !~ /root/) { print "This should be run as root or with the sudo command.\n"; exit 1; } if (!$ARGV[0]) { print "No image file given.\n"; exit 1; } my $image = $ARGV[0]; if ($image !~ /^\//) { print "Please enter full path to image file.\n"; exit 1; } if (! -e $image) { print "$image does not exist.\n"; exit 1; } my @name = split (/\//, $image); print "\n$name[(scalar @name) - 1]:\n"; print "=" x (length ($name[(scalar @name) - 1]) + 1) . "\n"; my $info = `parted -m $image unit B print | grep ext4`; (my $num, my $start, my $old, my $dummy) = split (':', $info, 4); chop $start; chop $old; printf "Old size - %d MB (%1.2f GB)\n", int ($old / 1048576), ($old / 1073741824); my $loopback = `losetup -f --show -o $start $image`; chop $loopback; `e2fsck -p -f $loopback`; if ($? != 0) { print "There was an error in the file system that can't be automatically fixed... aborting.\n"; `losetup -d $loopback`; exit 1; } $info = `resize2fs -P $loopback 2>&1`; ($dummy, my $size) = split (': ', $info, 2); chop $size; $size = $size + 1024; `sudo resize2fs -p $loopback $size 2>&1`; sleep 1; `losetup -d $loopback`; $size = ($size * 4096) + $start; `parted $image rm $num`; `parted -s $image unit B mkpart primary $start $size`; $size = $size + 58720257; printf "New size - %d MB (%1.2f GB)\n", int ($size / 1048576), ($size / 1073741824); `truncate -s $size $image`; my $diff = $old - $size; printf "Image file was reduced by %d MB (%1.2f GB)\n", int ($diff / 1048576), ($diff / 1073741824); exit 0;
- スクリプト(resizeimage.pl)と縮小したいMicroSDのイメージファイルを、USB接続で外付けHDDにコピーする。
色々処理してみるとラズパイに、USB接続で外付けHDDで処理するのが一番やりやすい。 - 処理はラズパイで行うので、USB接続で外付けHDDをラズパイに接続する。
(下はつないだイメージ)
- スクリプトのパーミッションを変更する
chmod 755 /home/pi/resizeimage.pl
- 後は、ラズパイ上で、スクリプトを起動して、イメージファイル縮小処理を実施する。
以下は、TeraTermPro でリモート接続して、コマンドを入力した履歴です。
実行コマンド:sudo perl ./resizeimage.pl イメージファイルの絶対パス指定
pi@r3b-bsf-base:~ $ cd /media/pi/miko-desk/resize
pi@r3b-bsf-base:/media/pi/miko-desk/resize $ ls
python-pi.img r3b-stf-base-20200524.img rsp-ubuntu-mate-base.img
r3b-bsf-base-20200524.img resizeimage.pl rsp-ubuntu-server2004-base.img
pi@r3b-bsf-base:/media/pi/miko-desk/resize $ sudo perl ./resizeimage.pl /media/pi/miko-desk/resize/r3b-bsf-base-20200524.img
r3b-bsf-base-20200524.img: ← 対象イメージファイルは、「r3b-bsf-base-20200524.img」(Rasbian Buster)
==========================
Old size - 7419 MB (7.25 GB) ← 元イメージファイル 7.25G が
New size - 5801 MB (5.67 GB) ← リサイズされて、5.67G になった。
Image file was reduced by 1618 MB (1.58 GB) ← 1.58G 縮小できた。(これで、8GのMicroSDにコピー可能となり、コピー処理時間の大幅な短縮になる)
pi@r3b-bsf-base:/media/pi/miko-desk/resize $ sudo perl ./resizeimage.pl /media/pi/miko-desk/resize/r3b-stf-base-20200524.img
r3b-stf-base-20200524.img: ← 対象イメージファイルは、「r3b-bsf-base-20200524.img」(Rasbian Stretch)
==========================
Old size - 7415 MB (7.24 GB)
New size - 3696 MB (3.61 GB)
Image file was reduced by 3719 MB (3.63 GB) ← 3.63G 縮小できた。(さらに大幅な短縮になる)
pi@r3b-bsf-base:/media/pi/miko-desk/resize $ sudo perl ./resizeimage.pl /media/pi/miko-desk/resize/rsp-ubuntu-mate-base.img
rsp-ubuntu-mate-base.img:
=========================
Old size - 14803 MB (14.46 GB)
There was an error in the file system that can't be automatically fixed... aborting. ←できるのは、Rasbianだけみたいで、Ubuntuはエラーになる