• マイクロSDカードのISOイメージバックアップ

    パパリウスさん                 CC.皆様

    配布用のSymphonic-MPDのISOイメージはどのようなツール(とオプション)にて作成されているのかご教授いただけませんでしょうか。配布用のISOイメージは随分と小さいので、何か作成される時の秘訣でもあるのかもと思量しています。

    背景事情ですが、設定が終了したマイクロSDカードをISOイメージとして為念バックアップ取得をしておくようにしています。昨今はカードの容量が小さいものの入手が難しくなり、16Gや32Gを使わざるを得ないのですが、当方の使っているツール(USB Image Tool)ではSDカード容量のままバックアップするので 圧縮オプションを使っても随分と不効率(時間やスペース)となり頭を悩ませています。他のツールも探してはみたのですが、、、、

  • @ゴンザエモン さん

    私はimgファイルをzipに圧縮する事で無駄な容量を省いています。
    他に良い方法があれば、私も知りたいです。

  • @ゴンザエモン さま
    私は個人的には公式イメージのみしか保存していませんでしたので、たしかに気になりますね。

    ちょっとググッて見たところ、以下のような記述がありました。
    Raspberry Piで最小サイズのバックアップを作成する

    このやり方ですと、対象のSDカードの他に開発用のSDカードが必要そうですね。
    (Windowsの場合、ddコマンド相当があるかさらに調査が必要ですね...)

  • ゴンザエモンさま
    みなさま

    sunatomoさまが指摘したやり方をスクリプト化したものが世の中にに出回っております。
    日本語のサイトでは、
    http://denshikousaku.net/reduce-raspberry-pi-img-file-to-write-on-smaller-micro-sd-card
    オリジナルは下記サイトのようです。
    https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=58069

    私は、浮いてしまった Raspberry3bをraspbian で立ち上げ、圧縮したい image file とスクリプトを入れたUSBメモリーをマウントし、このスクリプトを動かして圧縮しています。

    ちょっと時間はかかりますがオリジナルに近い大きさまで圧縮できます。

    Raspbian 以外では動作しません。

    以上ご参考まで。

  • @ゴンザエモン さん

    fatやext4ではファイルシステム上でファイルを削除してもビット列はそのまま残ってしまうため、ディスクイメージの圧縮効率が悪くなりがちです。

    そこで、/bootパーティションについてはddでゼロ埋めしてからmkfsし、ファイルを格納しています。

    ext4のパーティションについては、SDカードのイメージを吸い上げたあとで以下のような作業をしています。

    1. resize2fsでパーティションサイズを縮小
    2. zerofree で空き領域をゼロ埋め
    3. partedでパーティション再作成
    4. truncateでディスクイメージを切り詰め

    ご参考まで。

  • パパリウスさん、皆様

    アドバイスならびにご教授大変ありがとうございました。
    未だ全貌を理解したとは言い難いのですが、かなり大変な作業なのですね、、、sunatomoさんご紹介の記述を見る限り何となくDDコマンドでカウント指定してのISOイメージ出力くらいで行けちゃうのかなとは思っていたのですが。
    吸い上げたISOイメージを改めて圧縮するというmikeさんご伝授の方法も一旦16G、32GなりのSDカードを吸い上げた上で、Raspbian上で圧縮、リストアした後には拡張といくつかのステップが必要でこれも若干ハードルが、、、

    ちょっとめげてしまい、2G~4GくらいのSDカードを今のうちにもっと確保しておこうかなと考え始めてしまいました(笑い)。

    DDコマンド一発で簡単に出来ぬものか、まずは試してみます。

  • パパリウスさん、皆様

    以下の通り実験してみました。 基本的にはDDコマンド一発で小さいサイズのISOイメージバックアップが取れました。
    また為念リストアしての動作確認なども行いましたが、現状再生その他全く問題無く使えております。

    実験環境:

    1.32GBのマイクロSDカードにセットアップされたSymphonic-MPD。このマイクロSDカードを「Raspbian Buster」上にUSB接続します。

    fdisk -l で見ると、デフォルトの拡張のままでSDカードを最大サイズまで広げなければ、2GB程度に収まっている。

    Device Boot Start End Sectors Size Id Type
    /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA)
    /dev/sda2 540672 3905535 3364864 1.6G 83 Linux

    この情報から、2GB分程度バックアップISOとして書き出せば良さそう、と判断。

    2.バックアップISOイメージを書き出すためのUSB SSDを接続して/WORKとしてマウント。
      投入したDDコマンドは以下の通り。(ブロックサイズ1MBで2000個分を書き出せ、という指示内容)

    sudo dd bs=1MB if=/dev/sda of=/WORK/backup.iso count=2000 conv=noerror

    以下がDDコマンドの実行結果(待つこと数分、特に問題なく2G分が書き出された)

    pi@raspberrypi:~ $ sudo dd bs=1MB if=/dev/sda of=/WORK/backup.iso count=2000 conv=noerror
    2000+0 records in
    2000+0 records out
    2000000000 bytes (2.0 GB, 1.9 GiB) copied, 295.555 s, 6.8 MB/s

    3.当該バックアップISOイメージ(USB SSD上のもの)をWindows PC上にて別マイクロSDカードに書く(リストア)。
      (ここは通常のインストール作業と同じ)

    4.ラズパイ4に当該マイクロSDカードを差し込んで起動!

    謝辞:
    32GBのマイクロSDカードに作ってしまったシステムイメージも実際に使用している部分の2GB程度のバックアップで済むことが判りました。大助かりです。改めて皆様のアドバイスに感謝申し上げます。
    なお、完全に正しい方法なのか自信がありませんことお含み置きいただければ幸甚です。

  • ゴンザエモンさま

    なるほどいつもUSBでつないでいるSSDを利用されてるためとても簡単ですね。
    おっしゃるように fdisk -l で確認したパーティションサイズ以上ですからなんの問題もないと思います。

    ちなみにSDcardをPCにimageとして吸い上げたもの(4GBのSDcardなので3.71GBあります)を、やはりraspbianを使ってご紹介したスクリプト resizeimage.pl で圧縮してやると、1.86GBのパーティションが1.21GBに圧縮されたイメージとして書き出されます。

    dd コマンドも一発で簡単ですが、resizeimage.pl を一度落として置くと、同じようにコマンド一発で現パーティションサイズを気にせずしかも最小パーティションサイズまで圧縮してくれるので安心です。

    気をつけることは、圧縮相手のimageファイルをフルパスでしてしないといけないという点だけです。

  • 皆様

    続報です。

    その後数回にわたりいろいろなバージョンのバックアップとリストアを行ってみましたが、いずれも正常に稼働してくれています。
    この方法にてどうやら実用に耐えられそうですので、為念。

    なお蛇足ながら、lightMPDなど他のディストリでも同様の方法にてバックアップ取得、リストアを行いましたがこちらも問題ありませんでした。

    DDコマンドお使いの際はデバイス選択(/dev/sdaなど)をくれぐれもミスタイプせぬようご留意ください。

  • @ゴンザエモン さん ccみなさま
    はじめまして。

    linux環境に限定されてしまいますが、ddコマンドで以下の方法でbackupしています。

    パパリウスさんと同じくzerofreeで空き領域をゼロクリアし圧縮率をあげます。
    zerofree -v /dev/sdb2

    /dev/sdb全体を圧縮しながら、imageファイル作成
    dd if=/dev/sdb | gzip -c > Symphonic-mpd1.0.3_20200527.img.gz

    ゴンザエモンさんブログを参考にSymphonic-mpd1.0.3にminimserverとupmpdcliを組み込んだ8GBのSDカードが409MB程度になります。

    backupから書き戻す際は解凍せずに以下のコマンドでそのままSDカードが復元されます。
    gzip -dc < Symphonic-mpd1.0.3_20200527.img.gz | dd of=/dev/sdb bs=4096

    最近は出遅れ気味ですべてのver.をチェックできてませんが、好みの傾向のver.はbackupを残すようにしています。

  • mljさん、こんばんは。

    これはもの凄いスペースの節約になりますね。情報大変ありがとうございました。

    圧縮したイメージファイルはUSB SSDにでも書き出すようにすれば、保管管理の全体はWindows PC上でも可能でしょうね。リストア自体はまたRaspbian Buster等で行う必要があるようですが。

    引き続きあれこれと試してみます。
    (それにしても、皆さんハイスキルで頭が下がりす、、、)

  • mljさん、皆様

    ご教授いただいた圧縮しながらのバックアップ/リストアをRaspbian Buster(ラズパイ3B+)にて試してみました。
    容量はSMD V1.0.3+アルファ構成で750MB位となりますが、バックアップ/リストアの所要時間が3B+のパワー不足と思いますがかなりかかります。
    ちょっと調べてみて「lz4」だと早くて処理時間が半分くらい(その代わり圧縮率は多少悪くなる)ということなので、こちらでも試してみました。結果はバックアップ9分、リストア17分程度と若干早くはなりましたが、ラズパイ3B+レベルのCPUパワーでは実用上はやや苦しい感じでした。当方の場合、高速なLinux環境がありませんので容量を犠牲にしても2GB程度に収まれば、Windows環境でリストアする方法がスピーディで良いかなと考えています。

    (以下ご参考まで)
    1.インストール廻り
    sudo apt-get install zerofree
    sudo apt-get install liblz4-tool

    2.バックアップ作業
    sudo zerofree -v /dev/sda2     ( 所要時間は1分くらいで早い))
    sudo dd bs=1MB if=/dev/sda | lz4 -c > /WORK/Symphonic-MPDv103_20200529_04.img.lz4

    pi@raspberrypi:~ $ sudo dd bs=1MB if=/dev/sda | lz4 -c > /WORK/Symphonic-MPDv103_20200529_04.img.lz4
    7751+1 records in
    7751+1 records out
    7751073792 bytes (7.8 GB, 7.2 GiB) copied, 564.146 s, 13.7 MB/s

    バックアップ処理は所要時間9分であった。
    なお、バックアップファイルのサイズは750MBくらい、、、容量は半分以下になっている。

    3.リストア作業
    lz4 -dc < /WORK/Symphonic-MPDv103_20200529_04.img.lz4 | sudo dd of=/dev/sda bs=1MB
    (ddコマンドのところに Raspbian Busterではsudo が必要)

    pi@raspberrypi:~ $ lz4 -dc < /WORK/Symphonic-MPDv103_20200529_04.img.lz4 | sudo dd of=/dev/sda bs=1MB
    1808+48408 records in
    1808+48408 records out
    7751073792 bytes (7.8 GB, 7.2 GiB) copied, 998.581 s, 7.8 MB/s

    リストア処理は所要時間17分!