Raspbian バックアップとイメージの縮小

設定が完了した「Raspberry Pi」のOSをフルバックアップし、
使用していない容量を削りimgファイルの縮小を行う方法を書いていきたいと思います。

全体の流れ
OSがインストールされているメディアからimgファイルを作成
作成されたimgファイルの縮小を「ubuntu」で行う
縮小されたimgファイルを別メディアに書き込み、確認を行う

今回は上記3つの作業を説明していきます。

今回の作業環境
・windows 10 Pro 64bit (memory 32gb)
・仮想環境(Hyper-V) ubuntu 20.04 64bit
(memory 8gb)
・raspberry Pi 3B+ (OS = raspbian, HDD = 1TB)

・イメージファイルの作成
まず、Raspberry Piでimgファイルを作成します。
方法として、メジャーな2つが存在します。
1. OSがインストールされているメディアを抜き、作業メインPC(windows)に接続し「Win32DiskImager
」を使用しimgファイルを作成する方法
2. Raspberry Piから「ddコマンド」でのバックアップ方法
どちらの方法でも同じ内容のimgファイルが作成できます。
今回は「2」の方法で行いたいと思います。(サーバー公開前は「1」の方法でバックアップしました)


自身のラズパイサーバー環境はSDカードを使用しないHDDのみでの運用で
サーバーの公開を止めずにバックアップをしたかったのでサーバーを止める必要がある「1」の方法はやめました。

今回は圧縮無しのフルバックアップを行うのでまず、
Raspberry PiのOSが入っているHDDより容量の多い外部メディアを用意します。
現在接続しているHDDは1TB(実容量は約931GB)なのでこの要領以上の記録メディアが必要です。
外付けHDDケースや1TB以上のHDDは余っていなかったので
windows 10側に存在する3TBのHDDにバックアップしていこうと思います。

準備
・raspbian
 →[ samba, cifs-utils ]の2つをapt-getでインストールしてください
・windows 10
 →今回は[ D ]直下に [ raspberry_backup ]というフォルダを作り、共有フォルダへと変更しました

共有フォルダをraspbianにマウントします。(今回は[ /mnt/win-server ]を作成しました)

mkdir /mnt/win-server
sudo mount -t cifs -o "username=(ユーザー名),password=(パスワード),vers=3.0" //(ローカルIP)/raspberry_backup /mnt/win-server

ユーザー名はwindows側のログインユーザー
パスワードは上記ユーザーのパスワード
ローカルIPはwindowsのローカルIPに置き換えマウントしてください。
(上記内容でエラーは出ないと思いますが(マウントできずに1時間くらい悩んだので)もしエラーが出てマウントできない場合はエラー内容で調べてみてください。)
※同じデフォルトゲートウェイが設定されているPC(windows)で共有フォルダを作成してください。
 同じローカルネットに存在しないとマウントすらできませんので(自身の環境みたいに回線を2つ契約している方は注意です)

sudo dd if=/dev/sda of=/mnt/win-server/20200924.img

上記コマンドでフルバックアップが始まります。(バックアップ中は両端末とも電源やネットは切らない様に注意してください)
「if=/dev/sda」でOSがインストールさえているメディアを指定しています。([/dev/sda] この部分は各環境によって違うと思います。)
※使用しているメディア容量によってはかなり時間がかかるので注意してください。
 自身は約12時間くらいかかりました(931GBのimgファイルが作成されるまで)

次回からはローカルファイルサーバーのdebianにHDD足してバックアップするか、新しく外付けケースとHDDを買う方がいいなと思いました。
(この作成されたimgをそのまま置いておける様な容量に余裕のある方は圧縮は不要だと思います。)

・イメージファイルの圧縮
準備
・Hyper-Vにubuntuをインストール(バックアップimgが入っているHDDとは別のHDD or SSDにVHDXを配置してください。)
 [ GParted ]をインストールしておいてください。
・必要なら万が一の為にimgのコピー(自身は931GBもあるのでぶっつけ本番です)
Hyper-Vに新規インストールしておいた ubuntu を起動する前にバックアップimgが入っている物理HDDを追加で接続します。
まず、imgが入っているドライブ(D:\)をオフライン状態にします。
windowsボタンを「右クリック」から「ディスクの管理」を選択します。

自身の環境は下記の様になっており、この「D:\」に設定されているディスクをオフラインに変更します。

上記設定後、Hyper-Vの仮想マシンの設定にてオフラインに設定したHDDを追加します。

ここからは参考にしたブログ様(Linax活用メモ)を見ながら説明をしていきます。
まずはループバックデバイスの確認(各環境により値が異なります)

$ sudo losetup -f
/dev/loop10

次にイメージファイルをループバックデバイスに関連付けます。

$ sudo losetup /dev/loop10 /media/ubuntu/~/raspberry_backup/20200924.img

ループバックデバイスのパーティションを認識させます。

$ sudo partprobe /dev/loop10

GPartedを起動してパーティションの容量を変更します。

$ sudo gparted /dev/loop10

変更前のスクリーンショットを取るのを忘れていたので過去の物ですが下記のような画面が出てきます。

(上記は過去に縮小した後の画像)

恐らく「recovery」用と「その他」用の2つのパーティションに分けられ、
「その他」側はさらに細かく分かれていると思います。(settings, boot, root)
その中でも「root」に割り当てられている容量が多いと思います。

一番容量が割り当てられている「root」を選択し、右クリックからリサイズか上記イメージバーをマウスで動かし変更します。
(使用済みの容量から+1GB位を目安に決めるといいと思います。)

サイズの変更が終了したら、パーティションの内容を適用するので上部のチェックマークを押下してください。(まだサイズは変わりません)

縮小が完了しましたら、「GParted」は終了(右上の×から)して端末画面に戻ると思いますが、

ファイルサイズ自体はまだ変更されていないのでそちらを変更します。

もう必要ないのでまずはループバックデバイスの関連付けを解除します。

$ sudo losetup -d /dev/loop10

次に変更を行ったimgのパーティションを「fdisk」で確認します。

$ sudo fdisk -l /media/ubuntu/~/raspberry_backup/20200924.img

上記画像内は既に縮小まで終わっていますが、「fdisk」で各セクタの開始位置と終了位置を表示し
表示された情報からどこまでのセクタを対象にするか計算します。

「~.img7」が一番容量の大きかったroot部分をリサイズしたパーティションです。(未使用領域も含めた5.1GBです)
この「最後から」に表示されているセクタ数をベースにリサイズの計算を行います。

$ truncate --size=$[(18341887+1)*512] /media/ubuntu/~/raspberry_backup/20200924.img

(「~.img2」の未割当領域の開始位置が「~.img7」の開始位置より前にいますが歯抜けの状態(デフラグをしていない)なので気にしなくても大丈夫です)

上記コマンド実行後、
「931GB」もあったimgファイルのサイズが上記画像の下にも表示されているように「9.4GB」まで圧縮できました。
(ここから7-zip等で更に圧縮すると約5GBまで圧縮できました)

・縮小後のimgファイルをメディアに書き込み、データの確認
使用ツール
・balenaEtcher
縮小後のimgを選択、確認用外付けHDD(250GB)に書き込みを行った。
その後、確認のため一時的にサーバーを止め書き込みを行ったHDDで起動

df -h コマンドでパーティションの確認
他のデータ(WordPress, MySQLの全データ等)も問題なく確認が取れたので元のHDDに戻して終了。

・最後に
HDDの移行やnginx等公開まで設定した内容の状態で
バックアップを取っておきたい方の手助けとなれれば本記事を書いた甲斐があります。
ここまで読んでいただきありがとうございます。

コメント

タイトルとURLをコピーしました