moOde Audio 4.0 rootfsを複製する

moOde Audio4は4GBのカードでインストール可能ですね。現在は16GBや32GBのカードも手軽に利用できます。
moOde Audioもraspbian strech-liteベースのディストリビューションでmoOde独自の部分はありますがraspbian同様いろいろ遊べます。

ですがせっかくインストールした環境を壊したくないですね。
通常はカードをコピー、挿し替えて試してみるという方法になると思いますがこれも面倒です。

今回の手法はwheezyの頃から使われているUSB-HDDから起動する方法と基本同じでディスクの空き領域を利用して複数のrootfsを使い分けて起動してみようというものです。
具体的にはデフォルト設定のrootfsをバックアップ用として保存してもう一つのrootfsを自由に試してみるとか運用はいろいろ考えられます。

但し、カードのパーティションを切り分けることによりカードのUUIDが変わってしまうので変更する必要があります。
この方法は当サイトでもraspbianでよく利用しています。

試してみるにはカードのコピーを取るか新規インストールしたカードを使うのがいいでしょう。
カードは8GBでも可能ですが16GB以上合ったほうがいいですね。
今回は新規インストールした16GBのディスクを使いました。

作業環境はraspberry pi 3 ディスクトップ
pi3にはgpartedをインストールしておきます。

# apt install gparted

gpartedを起動

右上でカードを選択(間違えないように)
当サイトのpi3ではsdbで認識しています。


未割り当てを右クリックしてNew-新規パーティションの作成
パーティションは4つまで作成できます。
moodeと同じ3000MiBで作成


追加をクリックして同様に残りの領域も作成
メニューのチェックマークをクリック
確認ダイアログが出て適用クリックするとカードに書き込みます。

UUIDを確認(カードによりすべて違ってきます)

# blkid /dev/sdb
/dev/sdb: PTUUID="90aedea8" PTTYPE="dos"

PARTUUIDは順番に90aedea8-01〜90aedea8-04となります。
pi3ではmedia/pi/以下にオートマウントされます。
/media/pi/boot/cmdline.txtの編集(以下は1行)

net.ifnames=0 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=90aedea8-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

/media/pi/rootfs/etc/fstabの編集

PARTUUID=90aedea8-01  /boot           vfat    defaults          0       2
PARTUUID=90aedea8-02  /               ext4    defaults,noatime  0       1

編集が終わったらカードを挿し込んで起動することを確認しましょう。

再度pi3に戻してddを実行(/dev/sdb2を/dev/sdb3へコピー)

# dd if=/dev/sdb2 of=/dev/sdb3 bs=1M
3000+0 レコード入力
3000+0 レコード出力
3145728000 bytes (3.1 GB, 2.9 GiB) copied, 541.189 s, 5.8 MB/s

ddした/dev/sdb3は/dev/sdb2のクローンになります。ラベルの名称も同じになるためわかりやすいように名前を付け替えます。(gpartedでも可能ですがこっちが簡単)/dev/sdb4も適当なラベル名に

# e2label /dev/sdb2 moode
# e2label /dev/sdb3 moode2
# e2label /dev/sdb4 ext

マウントして/dev/sdb3のfstabを編集

PARTUUID=90aedea8-01  /boot           vfat    defaults          0       2
PARTUUID=90aedea8-03  /               ext4    defaults,noatime  0       1

ここで/boot/cmdline.txtのroot=PARTUUID=90aedea8-02を03に変更してddした/dev/sdb3も正常に起動することを確認します。

以上で/boot/cmdline.txtの変更だけで2つのrootfsを使い分けることができるようになりました。

バックアップイメージの作成
rootfsをいじる前に4番目のパーティション(ext)にバックアップを作成します。
作成したカードを取り付けて起動するとデバイス名は/dev/mmcblk0p1〜p4となります。
現稼働中のパーティションはddできません。現在/dev/mmcblk0p3で運用しているとして/dev/mmcblk0p2を4番目のパーティション(ext)に適当なファイル名でddします。
また/bootもコピーを取っておくといいでしょう。

# dd if=/dev/mmcblk0p2 of=/media/ext/moode4_default.img bs=1M
# cp -r /boot /media/ext

適当なポイントでまたバックアップイメージを作成していくといいでしょう。

バックアップしたイメージファイルを再度書き込みたい時は(/dev/mmcblk0p2で運用中として)

# umount /media/moode2
# dd if=/media/ext/moode4_default.img of=/dev/mmcblk0p3 bs=1M

オートマウント再起動(udisks-glue)

# systemctl daemon-reload
# systemctl restart rc.local

書き込んだ/dev/mmcblk0p3は/etc/fstabの確認、変更が必要
各rootfsの”/”あたりにはわかるようにデバイスナンバーや設定やインストール記録のテキストファイルを記載しておくのがいいと思います。fstabの設定を間違うと意図したrootfsと違うほうが起動していることがあります。

イメージファイルをマウントする
ddしたイメージファイルを確認するには次のコマンドでマウントします。マウントポイントは/srv/tmpを作成

# mkdir /srv/tmp
# mount -t ext4 -o loop /media/ext/moode4_default.img /srv/tmp
アンマウント
# umount /srv/tmp

/srv/tmpからファイルの参照、編集が可能です。

以上のように区画が同一サイズであればパーティション単位で保存、復元が可能です。ほかのカードで作成したmoode(BETA12)も同一カード上で起動、動作を確認しています。(part-uuidの変更が必要)
sshの鍵を同じにしたい場合は/etc/sshをコピーすることで~/.ssh/known_hostsはそのまま使用できます。(ローカルでは特に問題ないと思います。自己判断で!)