dd tools(archives tool) Raspberry Pi

RaspberryPiOSなどのSDカードを作成するにはdd toolsではOSイメージをダウンロード、展開する必要があります。
RasPiOSはzip形式なのでunzipするだけと比較的簡単なのですがほかのOS(ディストリビューション)では様々な形式があります。
圧縮展開コマンドのフロントエンドになるCLIツールもいくつかありそれらを利用しながらdd toolsとして実験、動作を検証してみたいと思います。(RasPiOSはシンプルなXarchiverがデフォルトのアーカイバになっているがどうもうまく使えない!)

基本仕様

作成したツールはcompression(圧縮)とdecomp(展開)が別になっています。展開ツールはファイラー(ranger)と連携してrangerで圧縮ファイルを選択するとそのディレクトリで起動します。
展開ツールは圧縮ファイルのみ表示(拡張子)、圧縮ツールは圧縮ファイル以外をリストに表示します。ディレクトリ込でアーカイブする際はそのディレクトリのある場所で実行しないとフルパスを指定することになってしまいます。双方ともカレントディレクトリを変更する際はリスタートするためdevilspie2で起動位置を固定しないと使いにくくなってしまいます。
いずれもリストにあるファイル(カレントディレクトリ)を選択、ボタンひとつで圧縮展開する簡単操作を目標にしています。特別なオプションが必要な時はコマンドラインで実行します。

rangerはatoolをアーカイバのフロントエンドに採用しています。ディフォルトはビュー(als)ですが展開(aunpack)にすることで展開実行できますが右側ウインドウをクリックで開始してしまうため代わりに作成した展開ツールを起動します。
~/.config/ranger/rifle.conf (最初の方に記載)

ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,  = ~/bin/dd-tool/archives_start.py "$@" &
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, = ~/bin/dd-tool/archives_start.py "$@" &

多重起動を防ぐためスクリプト経由で起動
~/bin/dd-tool/archives_start.py (chmod755)

#!/usr/bin/python3
import subprocess
kill = ("ps ax | grep python3 | grep dd_archives.py | grep -v grep | awk '{print $1}'")
kill = (subprocess.Popen(kill, stdout=subprocess.PIPE, shell=True).communicate()[0]).decode('utf-8')
if not kill:
    pass
else:
    subprocess.run("kill -9 " + kill, shell=True)
subprocess.run("~/bin/dd-tool/dd_archives.py &", shell=True)

展開ツール(dd_archives.py)の圧縮ファイル拡張子はrangerと同じ拡張子をfindで検索

# Listbox 1 (archives)
def arc_list():
    global archives_list
    archives_list = ("find . -maxdepth 1 -name '*.7z' -or -name '*.ace' -or -name '*.ar' -or -name '*.arc' -or -name '*.bz2' -or -name '*.cab' -or -name '*.cpio' -or -name '*.cpt' -or -name '*.deb' -or -name '*.dgc' -or -name '*.dmg' -or -name '*.gz' -or -name '*.iso' -or -name '*.jar' -or -name '*.msi' -or -name '*.pkg' -or -name '*.rar' -or -name '*.shar' -or -name '*.tar' -or -name '*.tgz' -or -name '*.xar' -or -name '*.xpi' -or -name '*.xz' -or -name '*.zip' | awk '{print substr($0, 3)}'")

圧縮ツール(dd_comp.py)は上記の拡張子を除外

# Listbox 1 (file&dir)
def fd_list():
    global file_dir_list
    file_dir_list = ("ls -F -I '*.7z' -I '*.ace' -I '*.ar' -I '*.arc' -I '*.bz2' -I '*.cab' -I '*.cpio' -I '*.cpt' -I '*.deb' -I '*.dgc' -I '*.dmg' -I '*.gz' -I '*.iso' -I '*.jar' -I '*.msi' -I '*.pkg' -I '*.rar' -I '*.shar' -I '*.tar' -I '*.tgz' -I '*.xar' -I '*.xpi' -I '*.xz' -I '*zip' | sort")

dd_archives.py(展開ツール)


ディレクトリボタンでカレントディレクトリ移動可
展開系ツールはテストしてボタン1つか2つにする予定
テストは主に2021-05-07-raspios-buster-armhf-lite.zipを使って進めてみます
wgetで配布ファイルダウンロード

CLIフロントエンドツールは以下を試してみます(pigzは専用コマンド)
atool : Perlで書かれている 展開(aunpack) 圧縮(apack) 一覧(als) その他
unar : MAC The Unarchiver のコマンドライン版 展開(unar) 一覧(lsar)
unp : Perlで書かれている
pigz : gzip zip 展開(unpigz) RasPiOSデフォルトインストール済

インストール

 # apt install atool unar unp

OSデフォルト、依存でインストール以外のコマンド

 # apt install p7zip-full unrar-free

GNU time 時間を計測 外部コマンド /usr/bin/time

 # apt install time

テスト

ディレクトリボタンはfiledialog.askdirectoryでディレクトリのみ表示します
ディレクトリを選択、OKでリスタートしてカレントディレクトリを変更
ファイルを選択して適当なCLIツールボタンをクリック

lsar filename.xxx | head -20 で20行まで表示
RasPiOSの配布イメージは単一ファイルですがアーカイブされたファイルを展開する際はディレクトリ付きか確認、よくやってしまうのが同一ディレクトリに展開、既存ファイルとゴッチャになってアチャー!という結果になります。判断がつきかねる時はディレクトリを作成移動して実行

unarで実行 OK 各CLIツールも基本同じ コマンドラインからも簡単


実行中はrangerから展開中のファイルにアクセスしないようにします。
cpu load averageが異常に上がってきます。
終了するとメッセージとともに保存したlogを表示
lsarはunzipコマンドを実行していると思います。
実質展開時間 33.2s


unpigzで実行 OK
pigzについては後述


結果は/tmp/expansion.logに保存しています。(上書き)基本実行コマンドはエラーが無ければ静かに終了します。(各CLIツール仕様)logにはGNU timeの結果だけが記載
実質展開時間 17.8s

unpigz -9kN のオプションを指定、展開時も圧縮率設定(展開時間)が効いてくるようです。
元ファイルをキープ、-Nで拡張子をそのまま
-0 to -9, -11 Compression level (level 11, zopfli, is much slower)
-k, –keep Do not delete original file after processing
-N, –name Store or restore file name and mod time

wget
配布ファイルの取得はwgetでダウンロードするのが好みです。ブラウザから右クリック、リンクのアドレスをコピーして貼り付け。最近のX更新で右クリックコピーもXセレクションに入るので中ボタンで貼り付けることが出来ます。
ダウンロードが終了したらついでにchecksumを実行、sha256sumを実行、moode audioのみmd5を実行。軽く眺めて合っていればOK

所感
いまのところ動作確認程度ですが無難にこなしてくれそうなのがunar
gzip zipはunpigzがパフォーマンスを発揮しそう
atoolはRARに対応していないhttps://www.nongnu.org/atool/

dd_comp.py(圧縮ツール)

当サイトでは圧縮はそう頻繁に使うことは無いのですが捨てられないファイルのアーカイブやmoode audioの旧バージョンイメージを圧縮保存する用途を考慮しています。

この中で興味があるのが
pbzip2 pigz pixz
従来のコマンド系は面倒なのでapackに喰わせる
テストは展開した2021-05-07-raspios-buster-armhf-lite.imgを各形式で固めてみます

起動
一般ファイルはrangerと関連付け出来ないのでメニューから起動、または展開ツール(dd_archives.py)から起動します。
メニューからはユーザーのホームディレクトリ、展開ツールからは実行しているディレクトリがカレントディレクトリ。起動してからは展開ツール同様にディレクトリボタンで選択、設定したHome(ワークディレクトリ)
rangerを終了したりするとツールも終了するので圧縮展開実行中はできるだけ余計なことをしない

アーカイブファイル
ツールは基本ボタンだけで実行することを想定しているのでファイル(ディレクトリ)+形式
ファイル例 2021-05-07-raspios-buster-armhf-lite.img.gz
ディレクトリ例 sample_dir.tar.gz
zip 7z は特に指定なし
ファイル名の変更、移動、ディレクトリの作成等はファイラーなどで実行

Parallel Implementation
piXXはParallel Implementation(並列実装)
従来のコマンド系はシングルコアで実行するのに対してマルチコアに対応したコマンド系ですね。
pigz – Parallel Implementation of GZip
pbzip2 – parallel bzip2 implementation
pixz – parallel, indexing XZ compressor/decompressor
現在のRasPiOSではpigzはディフォルトでインストールされています。pigzには展開コマンド(unpigz)がありますが pbzip2 pixz には見つかりませんでした。

# apt install pbzip2 pixz


実行すると4つのコアがほぼ100%で動いています。p7zipもマルチコアに対応しているようです

Pi4ではかなりCPUパワーを消費するため特に圧縮については圧縮率と圧縮速度を天秤に掛ける必要があると思います。圧縮率を–best(-9)にしても実質10M〜20M改善するだけで圧縮にかかる時間だけがそれ以上にかかってきます。と言っても現在のunix系標準圧縮形式はgzと思っているので圧縮率をzipより悪くする訳にはいきません。zipと同等の圧縮率でzipコマンドより早い設定を探します。

$ pigz -6fk 2021-05-07-raspios-buster-armhf-lite.img

圧縮率 -6 、上書き -f 、キープ -k この設定を元にpythonプログラムに適用

シングルファイル
/usr/bin/time pigz -6fk file_name > /tmp/compression.log 2>&1
/usr/bin/time pbzip2 -6fk file_name > /tmp/compression.log 2>&1
/usr/bin/time pixz -6k file_name > /tmp/compression.log 2>&1
ディレクトリ
/usr/bin/time tar cvf dir_name.tar.gz --use-compress-prog='pigz -6fk' dir_name > /tmp/compression.log 2>&1
/usr/bin/time tar cvf dir_name.tar.bz2 --use-compress-prog='pbzip2 -6fk' dir_name > /tmp/compression.log 2>&1
/usr/bin/time tar cvf dir_name.tar.xz --use-compress-prog='pixz -6k' dir_name > /tmp/compression.log 2>&1

pixzはデフォルトで上書きするので”-f”オプションはありません。

テスト実行

zip 3m16s 445M


gz (apack) 3m14s 445M


pigz 1m06s 444M
やはりマルチコアでは早くなっています


pbzip2 3m07s 408M
pbzip2は中途半端な感じがしますが実際は圧縮するファイル形式で相当違いが出ると思います
圧縮率と速度でメリットが有るのでしょう


pixz 10m54s 308M
7zipとほぼ同等の圧縮率と思います


7zip 11m30s 302M

参考 あくまで参考です ファイル名にハイフン(“-“)があるといろいろ問題があるのでアンダースコア(“_”)に切り替えています。(取り敢えず現状は問題ありません)
06/20 10:30 間違いがあったので差し替えました(dd_archives.py dd_comp.py)
dd_archives.py
dd_comp.py
archives_start.py

圧縮した各形式を展開
デフォルトのzip元ファイルをunzipしたsha256sumと比較、各形式とも全て正常に圧縮展開しています

もう少しテストをしてボタンは再配置する予定です

moOde audio 7.2.0

moOde audio 7.2.0がリリースされています。710のラジオマネージャーからのデータ(EXPORT)形式が変更になっていますね。ラジオロゴとjsonファイルのシンプルな形式になっています。 720で試してみることにします(失敗しました)

moOde audio 7.2.0

moOde audio 710からEXPORTしたstations.zipはIMPORT可能、登録したラジオ局も復活するのですがデフォルトのラジオ局も710のものになります。720のjsonファイルに登録したラジオ局データを追記、編集すればいいと思うのですがロゴのLocationが違うとかなんとかではねられてしまいます。

jsonファイルはテキスト形式ですが登録数が多いと面倒です。 登録したロゴ画像も管理しておく必要があります。

気がついたのはBBC RADIOですがURLが変更になっています。デフォルトのラジオ局は変更が少ないので気がついたところだけ修正していけば充分なのですがどうも気に入らないので今回もデータベースに手作業で登録していきます。 今回は前回整備したLoop deviceやスクリプトを利用して少しだけスマートに実行してみることにます。 ロゴ画像、plsファイルは展開したmoode-r720-iso.imgをLoop deviceとして予めコピー、また710のmoode-sqlite3.dbをコピー同様に取り込んでおきます。
コピー先は ロゴ画像 /var/local/www/imagesw/radio-logos
plsファイル /var/lib/mpd/music/RADIO
moode-sqlite3.db(710)はファイルネームを変更、またデフォルトのmoode-sqlite3.db(720)もコピーを取る

/var/local/www/db/moode-sqlite3.db (default 720)
# cp moode-sqlite3.db moode-sqlite3.db.current (720)
# cp moode-sqlite3.db moode-sqlite3.db.befor (710)

/home/pi/radio-import.sh
スクリプトもimgファイルの/home/piに放り込んでおきます。

#!/bin/sh
cd /var/local/www/db
# current radio data(720)
sudo sqlite3 -csv moode-sqlite3.db "SELECT * from cfg_radio ;" > cfg_radio.csv
# befor radio data(710)
sudo sqlite3 -csv moode-sqlite3.db.befor "SELECT * from cfg_radio ;" > cfg_radio.csv.befor
# befor radio user_data(710)
sudo cat cfg_radio.csv.befor | awk -F "," '$1 >= 500 {print}' > cfg_radio.csv.user_data
# current add user_data(720)
sudo cat cfg_radio.csv.user_data >> cfg_radio.csv

# Import
sudo  sqlite3 moode-sqlite3.db
#SQLite version 3.16.2 2017-01-06 16:32:41
#Enter ".help" for usage hints.
#sqlite> .separator ,
#sqlite> delete from cfg_radio;
#sqlite> .mode csv
#sqlite> .import cfg_radio.csv cfg_radio
#sqlite> .exit

# reboot
sh -c 'echo -n "Hit Enter key to reboot..."; read x'
sudo reboot

起動時から音が出るように/boot/config.txtにI2Sデバイスを追記しています。

dtparam=audio=off
dtoverlay=hifiberry-dac

上記の作業が終わったらloop deviceを閉じてカードに焼きます。当サイトではイメージファイルの段階で修正しましたがカードを作成してから修正を加えても同じことです。

起動実行

$ ssh pi@moode
$ sh radio-import.sh


スクリプトを実行するとsqlite3の対話モードになります。
実行内容は710の500番以降のユーザー登録データを720のデータベースに追記します。
ウェブブラウザはキャッシュをクリアしておくといいでしょう

上記のIMPORT項目のとおり打ち込みます。
Enterで再起動


720のデフォルトラジオ局に登録したラジオ局が追加出来ました。
ここからいつものとおりvncserverなどインストールします。UIは全く同じ、moOde audioもどこが変わっているか気がつきません。

 
 
 

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

dd-tools Raspberry Pi

Raspberry Pi財団には公式のイメージ書き込みツール(pi-imager)があります。とてもシンプル、高機能で使いやすいと思います。当サイトではカード作成時少しだけ修正を加えています。pi-imagerには遥かに及びませんが以前作成したdd-toolをベースにコマンドの勉強を含めてちまちま修正をしながら以来全てこれらのツールでカードを作成しています。
このツールを使う人はいないと思いますがネタ程度に現時点の記録をしておきたいと思います。(少しだけいいところもあります)

Raspberry Pi Imager

pi-imagerをインストールしてみました。 OSを選択、書き込むデバイスを選択してWRITEボタンを押して書き込むだけ。ネットワーク環境によっては時間がかかるのでよくインストール作業をする人はダウンロードしておくのがいいと思います。Use customメニューではimg,iso(圧縮ファイル)に対応しておりRasPiOSに限らず書き込みが可能ですね。

dd tools

メニュー、プログラムは~/bin/dd-toolにおきます。
最新のデバイス情報を更新のためRELOAD(プログラム再起動)するのでdevilspie2に登録、使いやすい位置に固定しています。

メニュー dd.py
devilspie2 applications.lua

dd Device Setup Tool

最初にプログラムを起動する(どれでもいい)とデフォルトのdevice.listを作成します。
デフォルトのdevice.listは起動ディスクのみリストボックスに非表示。

Setup ToolのテキストボックスはRELOADすることで現在のデバイスを更新
sda 起動ディスク(SSD)
sdb RasPiOS
sdc FAT32 disk

以下のファイルを作成 (chmod 755 ~/bin/dd-tool/device.sh)
~/bin/dd-tool/device.sh

#!/bin/sh
ls -l /dev/disk/by-uuid | sort | awk '{print $9}' > ~/bin/dd-tool/_device
sed -i '/^$/d' ~/bin/dd-tool/_device
sed -i "s/^/| grep -v /" ~/bin/dd-tool/_device
cat ~/bin/dd-tool/_device | tr "\n" " " > ~/bin/dd-tool/device.list
sed -i "s#^#ls -l /dev/disk/by-uuid #" ~/bin/dd-tool/device.list
sed -i "s/$/ | awk '{print \$11\}' | cut -c 7- | sort /" ~/bin/dd-tool/device.list
rm ~/bin/dd-tool/_device

sdb sdcを抜いてボタン(Device ALL)をクリック、device.shを実行してボタンは青(Device SET)に切り替え。
device.shは/dev/disk/by-uuidを読んでリストを作成、リストにあるuuidをdd-toolのリストボックスに表示しないようにします。青(Device SET)モードは常時接続しているデバイスなどをdevice.listに登録することで非表示、安全に作業することが出来ます。
現在の仕様では同じリリース媒体から焼いたディスクのuuidは同一になります。sdbは起動ディスク(desktop-20210304)と同じのためリストボックスにあがりません。再度2枚のカードを挿し込んでRELOAD sdcのみがリストボックスにあがります。

作業するカードをdevice.listに登録した場合はカードを抜いて再度Device SETをやり直します。device.listは保存され以降Deviceモードを変更しない限り青(Device SET)モードで起動します。

dd Command Tool


リストボックスからsdc1を選択、DEVICEボタンをクリック
IMG FILEボタンをクリック、ファイルダイアログからimgファイルを選択
dd commandは圧縮ファイルに対応していません


FLASHボタンクリックでddコマンド書式を作成
Yesでxtermからdd実行


書き込みが終了するとRELOAD
起動ディスクと同じuuidになるためリストボックスは非表示(Device SETモード)

dd Partition Expansion Tool

当サイトのディスク作成は取り敢えず必要な容量だけパーティションを作成しています。パーティションの縮小は難しいですが拡張は比較的簡単に実行することが出来ます。
RaspberryPi OSは初回起動時ディスク最大まで切り直します。
焼いたカードの/boot/cmdline.txtを編集してリサイズを止めます。
init=/usr/lib/raspi-config/init_resize.shを削除
手動でマウント $ sudo mount /dev/sd(x1) /mnt # sd(x1)は確認 編集が済んだら $ sudo umount /mnt

/boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=334dade7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles


このままでは容量不足でパンクしてしまうので任意の値で拡張
通常はgpartedなどのツールを使うところですが作成したツールからサクッと実行
モードは作業マシンと同じリリースなので赤(Device ALL)
DEVICEを選択、ラジオボタンで容量を選択
RESIZEボタンをクリック、OKで実行


ターミナルが開いてe2fsck resize2fsを実行
OKで完了
Setup TollはRELOADで確認

MKPARTボタンは未割り当て部分に新たにパーティションを作成(任意)

dd SD-Copy Tool

上記の例では32GBのカードでsd(x2)を7GiBに拡張しました。bootと合わせても8GBのカードで間に合います。RasPiOS-liteの特定の目的などでは3GBで足りる場合も多いと思います。

ddはディスクイメージそのままブロック単位でコピーします。
パーティション情報はディスクの先頭附近にあるのでこのまま32GBのカードから8GBのカードへddしてもディスクの領域が無くなったところでエラーは出ますが8GBのカードは動くはずです。


8GB(sdc)はFAT32でフォーマット
if(read)とof(write)のディスクを間違えないようにします
ラジオボタンP2を選択、COUNTボタンをクリックするとP1+P2の容量を計算、bs=1Mとしてカウント数を表示
FLASHボタンクリックでコマンド作成、カウント数は+10にしています
Yesで実行開始
書き込み後はfsckをしておきます(fsck -y /dev/sdx)
fsckボタンのあるツールでデバイスを選択してbootとrootfsそれぞれ実行


ddしたカードをmobilepi3で起動確認
バックアップ、コピーが必要なときは必要十分なパーティションサイズにしておくことでカードサイズをそれほど気にせずまたコピーの時間を短縮することが出来ます。
未割り当てにしておくことで拡張も簡単です。

dd Label Edit Tool

稼働中は直接ボリュームラベルを目にすることは少ないのですが一時的に保管する際など識別が容易になります。FAT32のラベル付けはmtoolsを利用しています。

# apt install mtools


FAT32 11文字
ext4  16文字


起動OSと同じuuidのディスクはpcmanfmからも見えてきません。確認する際は手動でマウントします。
デバイスを選択、mountボタンで/mediaにマウントrangerが起動(プログラムで変更可)ranger終了(q)でマウント解除
同様にデバイス選択してfdiskなど起動

mobilepi3


mobilepi3ではudiskieでオートマウントしていたのですが起動を止め(.xsession) pcmanfm(LXDE)の設定でマウントします。

参考

内容は無保証です。デバイス名やuuidの最低限の理解が必要です。
(実行権限 chmod 755 program.name)一部文字化けは全角空白
device.sh
dd-copy.py
dd-device.py
dd-label.py
dd-resize.py
dd-tool.py

Raspberry Pi 4B SSD USB Boot

前回はRaspberry Pi OS(32-bit) 2021-03-04版を新規インストールしたのでそのカードを基にSSDに書き込んでUSB Bootにしました。 ベータ版(64-bit)2021-03-04もリリースされていますがRaspberry Pi 400の絡みもあってか正式な公開はまだ先になるかなと思われます?(2020-08-20版ではupdate && upgradeを重ねていくといろいろ問題があった)

SATA – USB3.0変換アダプタ

USB Bootとして使用できるアダプタはかなり限られてくるようで比較的安価に入手できるアダプタとしてはASM1153Eチップのものが良さそうです。

Inateck(UA1003_black) UASP対応 rakuten 1199円
チップセット:ASMedia ASM1153E
USBケーブルの長さ:30cm
ケーブルが少し長めの製品をチョイス

 


AmazonにあるASM1153Eチップのアダプタ
こちらも問題なく動作するようだがケーブルがちと短い

lsusb

$ lsusb | grep ASM1053E
Bus 002 Device 003: ID 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge

uas対応

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
    |__ Port 2: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M

USB Bootが可能でもuas非対応の場合はusb-storageとして認識され本来のパフォーマンスは発揮できません

    |__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 5000M

SSD Storage(raspi-config)

SDカードでの動作は特に問題ないのでddでSSDにコピーをします。(SD Card Copierでいいと思う)

USB Bootは正式対応となっているのでraspi-configから設定するだけ
6 Advanced Options A6 Boot Order B2 USB Boot
shutdownしてSDカードを抜いて起動

 

SSDはKingston(120GB) KingSpec(120GB)で確認、どちらも問題なく動作しています。高速なストレージ同士でファイルを転送すると速さを体感できます。

 

Top