あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

macOS SonomaでCircuitPythonを使うとIOエラーで最悪データ破損する

キレたのでブログに書く。ACのネタにはできるけど、そもそも壊れないでほしい。

adventar.org

macOSをSonomaにアップグレードしたらCircuitPythonの挙動がおかしくなった

MacBookを先行でSonomaにアップグレードして、ぱっと触った感じ問題なかったのでMac miniの方もSonomaにアップグレードしました。

原稿執筆とかの休憩にMinecraftをしていて、久々にCircuitPythonでマクロを組んで使いたくなるような気が狂ったタスク(ネザーで組み上げられた数十LCの溶岩をオーバーワールドに移送)が生えたので、先日の甥キーで使用しているPicoのCircuitPython環境でスクリプトを書いていたら、なんだかエディターがクラッシュしてkill -9でも死ななくなりました。なんだ?REPLを見るとInput/output errorとか言う不穏なメッセージも。いろいろ試したりしているうちに、とうとうcode.pyが0バイトになってしまいました。うそん……。せっせと書いた、本ボタンでLCからシュルカーボックスにアイテムを移すマクロが……。

macOS側のバグらしい

すぐに[circuitpython sonoma corrupt]で検索したら、ちゃんとIssueが出てきましたよね。

github.com

ここで絶賛議論中で、とは言えmacOS側の問題なので、やれることとしてはAppleにフィードバックを送りまくれ、とのこと。詳細はAdafruitのサイトにまとめられています。

learn.adafruit.com

8MB以下のCircuitPython環境のようなドライブで、ファイルの書き込んでもディレクトリの更新に20秒〜1分かかるので、その間に立て続けに保存が発生するとファイルシステムが破損する、ということのようです。きょうび8MBの低速なドライブなどないだろうとナメた実装をしたがるエンジニアがAppleにいるのでしょうが、あるんだよな……。

対策として、再マウントすればOKらしく、デバイス接続時とリセット時に実行するためのシェルスクリプトが案内されています。が、面倒だな……。

前もやってたじゃん

去年の今頃も、Venturaでドライブに変化小細工をしようとしてFinderからファイル操作できなくなるバグが有りました。このときもだいぶ迷惑をしましたが、Sonomaでもやらかしてるの、やってんなあ〜〜!おい!!という気持ちです。

www.raspberrypi.com

データレスキューを試す

データが破損した?CircuitPython環境のストレージ領域を眺めて、破損したcode.pyの中身だったものが取り出せないか試してみました。ラズパイでもなんでもいいので、Linux環境に適当にデータ破損した環境を接続して、ddした中身をlessで見るだけです。どうせPicoなら1MB前後の環境なので、あればサクッと見つかるでしょう。なきゃないんですけど。

$ sudo dd if=/dev/sda | less

適当に流して見していったら、スクリプト全文が残っているのを発見したので、エディターにコピペして無事レスキューできました。良かったね。

まとめ

macOSがまたやらかしてくれていました。当面の対策は再マウントスクリプトの実行でなんとかしてみようと思っています。いい加減にしてくれ〜。

もしこれを読んだVentura環境のCircuitPythonユーザーの方は、そのMacはしばらく"Sonomaまで"良いとおもいます。笑(なにわろてんねん)