dd-tools (Loop device Tool) Raspberry Pi

ddコマンドはカードのコピー以外にファイルとしても書き込むことが出来ます。ディスクやローカル内のファイルサーバーに保存することでSDカードを有効に活用出来ます。
保存したイメージファイルはLoop deviceとして閲覧、編集が可能です。前回のdd SD-Copy Toolをファイルへの書き出しに対応新たにLoop device Toolを作成してみました。
また各ツールのRELOADはリストの更新のみに対応大分静かに作業できると思います。

dd SD-Copy Tool

SD to SD Copyはif(read)とof(write)は違うデバイスを選択しなければいけません。

ifでデバイスを選択後そのままof(write)をクリックするとファイルに書き出すかと聞いてきます。Yes


ファイルダイアログが立ち上がるので適当なディレクトリを開いてファイル名を入力(拡張子は取り敢えずimg)
カードにはRasPiOS(lite)を書き込んでいる


パーティションはp2を選択 COUNT
FLASH実行
手順としてはカードの代わりにファイルを指定するだけで同様になります。
書き込んだimgファイルは通常の配布イメージと同じ扱いなのでまたSDカードに書き込めば復元することが出来ます。

保存したimgファイルはループデバイスを使うことで閲覧、編集が可能になります。
kpartxとpcmanfmでは比較的簡単にループデバイスを作成マウント出来ます。

# apt install kpartx

拡張子(img)ファイルを右クリック – アプリケーションで開く – コマンドラインを指定

実行するコマンドライン

sudo kpartx -a %f

アプリケーションの名前

kpartx


実行するとpcmanfmの場所にアイコン出現
クリックでパスワード
/media/以下にマウント
実際にはkpartxループデバイス作成 pcmanfmでマウントの流れになります


pcmanfmからRasPiOSをループデバイスにするとliteは候補に出ますがdesktopは上がってきません
ループデバイスとしては作成されていますが母艦(pi4)と同じuuidを持つリリース版は手動でマウントする必要があります

dd Loop Device Tool

以上からpcmanfmからは手軽に扱える反面母艦と同じ現行のリリース版は扱いにくい欠点があります。またパスワード入力が面倒、アンマウントしたらループデバイスも片付ける必要があります。
ファイルマネージャーから対象ファイルの選択、ループデバイスを作成。
Loop Device Toolからはマウント、アンマウント、ループデバイスのリムーブを実行することにします。
ファイルマネージャー
rangerを活用するため同様に適用します。デフォルトの関連付けが適用される前の方に記載
~/.config/ranger/rifle.conf

ext img = sudo kpartx -a "$@" && ~/bin/dd-tool/loop_info.py &
ext iso = sudo kpartx -a "$@" && ~/bin/dd-tool/loop_info.py &

~/bin/dd-tool/loop_info.py

kpartxが作成するループデバイスはSDカードの例と比較すると以下の通り
/dev/sda /dev/loop0
/dev/sda1 /dev/mapper/loop0p1
/dev/sda2 /dev/mapper/loop0p2


ファイルマネージャーから選択したイメージファイルはLoop Device Toolに見えてきます(ループデバイスのみ表示)
青(Device SET)時他ツールは新しいデバイスとしてDM-0 DM-1(lite)がリストに上がりますが非選択にしています。DM-0 DM-1(desktop)は母艦(Pi4)とおなじのため非表示
赤(Device ALL)時は非表示にしています。


Loop Device Toolからデバイスを選択、MOUNTボタンで必要なパーテーションをマウント
マウントは/media/loop/以下にディレクトリをデバイス名で作成してマウント
必要な作業を終了したらリムーブ
REMOVEボタンからスクリプトを実行してアンマウント、ループデバイスを解除、/media/loop/以下のディレクトリを削除
Loop Device ToolをReloadして一気に片付けます。

マウントしているディレクトリにアクセスしているとアンマウント出来ずにリストに解除できないループデバイスが残ります。確認して再度実行することでリストから消えます。
rmdirはディレクトリ内にファイルが有ると失敗するのでファイルを失うことはありません。/media以下にloopディレクトリが残ります。
~/bin/dd-tool/loop_remove.sh (chmod 755 loop_remove.sh)

#!/bin/sh
sudo umount -l /media/loop/* 2>/dev/null
sleep 1
for loop in /dev/mapper/loop*
    do
        sudo dmsetup remove "$loop"
        loop_dev=$(lsblk -l | grep loop | awk '{print ($1)}' | awk 'NR==1')
        if [ -z "${loop_dev}" ]
        then
            break
        else
            sudo losetup -d /dev/${loop_dev}
        fi
    done
sleep 1
sudo rmdir /media/loop/* 2>/dev/nul

pcmanfmからマウントしたディレクトリは位置が違うのでアンマウント出来ません。pcmanfmからアンマウント後ループデバイスを削除することは可能
プログラムの再起動は少なくなりましたが必要に応じて再起動します。
sudoでマウントしているのでbootもroot所有になっています。bootはrootで編集しても通常のカードではユーザー所有として認識します。
当サイトではRasPiOSなどimgファイルの時点でcmdline.txtなど共通で使える最低限の編集をしています。
ローカル内でディスクの余裕があり無駄にパーテーションを大きくしていなければイメージファイルとしてバックアップしておけば設定ファイルを参照、必要であればSDカードに焼き直しすることも出来ます。

参考

内容は無保証です。間違いもあります。素人くさいのは仕様です。
dd-copy.py
dd-device.py
dd-label.py
dd-loop.py
dd-resize.py
dd-tool.py
device.sh 変更無し
loop_info.py
loop_remove.sh