高度な操作

この章では、アプリのパワーユーザー向け機能――毎セッションではなく、ときおり使う類のもの――をまとめています。その中心となるのが組み込みの ext4 ファイルブラウザ で、VMを起動せずにワークスペースのディスクイメージを直接Mac上で開きます。起動したくないワークスペースからファイルを回収したり、起動しなくなったワークスペースを修復したりするのに役立ちます。章末の短いセクションでは、2つの低レベルな構成デフォルトを解説します。

ここでの内容はすべて、ワークスペースセッション で説明したストレージモデルに習熟していることを前提としています。

ext4 ファイルブラウザ

ワークスペースは、そのデータをLinuxの ext4 ディスクイメージ――システムディスク disk.img とホームイメージ home.img――に保存します。macOSはext4をネイティブにサポートしていないため、通常これらのイメージの中を見る唯一の方法はVMを起動することです。Bromure Agentic Coding は、依存関係のない独自のユーザーランドext4リーダー/ライターでこれを回避します。オンディスク形式を直接解析し、ツリーを表示するのです。

ワークスペース ▸ ext4 ファイルを開く… で、任意のext4(ext2ext3 も可)の .img――生のファイルシステムでもMBR/GPTパーティション化されたディスクでも――をFinderのようなウィンドウで開けます。何もマウントされず、VMも起動せず、昇格した権限も不要です。

メモ: イメージはデフォルトで 読み取り専用 で開かれます――ワークスペースVMがまだそのディスクを接続していても安全です。編集は、明示的にゲートされた別のステップです(イメージの編集を参照)。

開けるもの:ワークスペース内のディスク

ワークスペースは ~/Library/Application Support/BromureAC/profiles/<uuid>/ の下に存在します。参照する価値のあるイメージは2つあり、加えてそれらのロールバックスナップショットがあります。

イメージブラウザが表示する内容ツールバーの情報行の表示
disk.imgUbuntuのシステムルート――/etc/var/usr/opt など。ディスクはGPTレイアウト(512 MiBのEFIパーティションとext4ルート)で、ブラウザはext4ルートを自動的に見つけます。partition @…MiB
home.imgゲストの /home/ubuntu をファイルシステムのルートに直接――dotfile、プロジェクトのチェックアウト、.ssh、シェル履歴、.bromure/ 配下のペーストキャッシュ。raw
checkpoints/<ts>.imgdisk.img の起動実証済みロールバックスナップショット。partition @…MiB
checkpoints/home/<ts>.imghome.img のロールバックスナップショット。raw

ホームイメージがこのように振る舞うのは、ゲストが mkfs.ext4 でこれをフォーマットし、起動時に /home/ubuntu上に マウントするためです――つまりイメージ自体のルートディレクトリが その ホームフォルダなのです。レガシーの共有フォルダ方式のホームをまだ使っているワークスペースには、開くべき home.img はありません。ストレージモデルと一度きりのアップグレードについては セッション を参照してください。

イメージを開く

  1. ワークスペース ▸ ext4 ファイルを開く… を選びます。
  2. ext4 ディスクイメージを開く というタイトルのオープンパネルが表示されます――「ext4 の .img ディスクイメージ(生またはパーティション化)を選択してください。」――~/Library/Application Support/BromureAC から始まります。ワークスペースの profiles/<uuid>/ フォルダに移動し、disk.imghome.img、または checkpoints/ 配下のファイルを選びます。
  3. ext4 — «ファイル名» というタイトルのウィンドウにブラウザが開き、ファイルシステムのルートが表示されます。

ツールバーの情報行(左下)はボリュームの概要を示します。ラベル、総サイズ、ファイルシステムが生で見つかったかパーティションオフセットで見つかったか、そしてその状態――cleannot cleanly unmounted、または journal needs recovery――です。イメージごとに1つのウィンドウが開き、すでに開いているイメージを再度開くと、そのウィンドウにフォーカスが移るだけです。

参照、プレビュー、抽出

メインビューは3列のテーブル――NameSizeType――で、ディレクトリが先頭にリストされます。Typeはフォルダ、ファイル、シンボリックリンクを区別し、さらに特殊なUnixノードタイプ(Char、Block、FIFO、Socket)も区別します。

  • 移動 ―― フォルダをダブルクリックして中に入ります。ツールバーの 上へ の矢印をクリックすると戻ります。パンくずリストが現在のパスを示します。
  • プレビュー ―― ファイルをダブルクリックするか、右クリックして プレビュー を選びます。テキストファイルはテキストとして、バイナリファイルは16進ダンプとして表示されます。いずれの場合もプレビューは先頭1 MiBで打ち切られ、フッターにはファイル全体のうち何バイトが表示されているかが示されます。シンボリックリンクはそのターゲットパスとしてプレビューされます。
  • 抽出 ―― ファイルを右クリックして 抽出… を選ぶと、保存パネルを通じてその内容全体をMacに書き出します。これが最もよく使う読み取り専用の経路です。

イメージの編集

編集は意図的にゲートの背後に置かれています。ツールバーの 編集を有効にする… をクリックすると、警告が表示されます。

ワークスペースVMが停止しているイメージのみ編集してください。実行中のVMが開いているディスクへの書き込みは、それを破損させます。

確認すると、イメージが読み書き可能で再度開かれ、ツールバーにオレンジ色の 編集中 の鉛筆バッジが表示されます。すると、ファイルのコンテキストメニューに 置換… が加わります。ホストのファイルを選ぶと、その内容が選択したファイルを その場で 上書きします。エディタはinodeの metadata_csum チェックサムを再計算するため、結果は整合性を保ち、修復は不要です。

警告: 置換は その場での置換のみ です。新しい内容は、ファイルにすでに割り当てられているブロックに収まらなければなりません――より大きなファイルは そのファイルは拡大が必要です で拒否されます(ファイルの拡大、作成、削除はまだ有効になっていません)。インラインデータのファイルは編集できません。ジャーナルがリカバリを必要としている間は書き込みが拒否されます――先に fsck を実行してください(下記参照)。そして、実行中のVMが接続しているイメージは決して編集しないでください。

fsck の実行

ツールバーの fsck を実行… ボタンは、開いているイメージに対して fsck.ext4e2fsck)を実行し、ジャーナルを再生してファイルシステムを修復します。まず確認します――「このイメージに対して fsck.ext4 を実行しますか?」――ワークスペースVMが停止している必要があること、およびツールがイメージを変更できることを注記した上で、強制的な自動修復を実行します。生のイメージの場合、fsck はファイルに対して直接実行されます。パーティション化されたディスクの場合、イメージは hdiutil でマウントせずに接続され、ext4スライスがチェックされ、その後イメージは切り離されます。昇格した権限は一切関与しません。

結果は、平易な言葉による要約――「ファイルシステムは正常です。」、「ファイルシステムのエラーが修正されました。」、または「ファイルシステムのエラーが未修正のまま残っています。」――とともにレポートシートに表示され、加えてツールの完全な出力も示されます。その後イメージが再度開かれます。

メモ: macOSには e2fsprogs が同梱されていません。ツールが見つからない場合、fsck.ext4 がインストールされていません というアラートに、brew install e2fsprogs という修正方法が表示されます。アプリはまず自身のバンドル内を、次に $PATH を、最後にHomebrewのkeg-onlyな e2fsprogs の場所を検索します。

どんなときに使うか

ブラウザは、停止したワークスペースのディスクを、ホストから検査してサルベージできるものに変えます。

  • 起動したくないワークスペースから ファイルを回収 ――抽出… で、コミットしていない変更や home.img のログを取り出します。
  • ロールバック前に チェックポイントを検査 し、期待どおりのものが入っているかを確認します。これを ホームを復元… および ベースにリセット… と組み合わせてください。どちらも チェックポイントとロールバック で解説しています。
  • 起動しなくなった ワークスペースを救出 ――不良な構成ファイル1つをその場で置き換え、書き込みでジャーナルがリカバリを必要とする状態になった場合は fsck を実行します。起動失敗の診断については トラブルシューティング を参照してください。

開発者向けデフォルト

2つの低レベルなつまみが、アプリのUserDefaultsドメイン io.bromure.agentic-coding から読み取られます。アプリが実行されていない状態で defaults write を使って設定し、再起動してください。

キー効果デフォルト
vm.homeImageGB新規作成される ext4ホームイメージの見かけ上の(ゲストから見える)サイズ(GiB単位)。ホストファイルはスパースなので、これは前もってコストがかかりません。8~1024にクランプされます。64
vm.mtuワークスペースVMのプライマリNICのMTUクランプで、起動のたびにゲストに書き込まれます。デフォルトの 1280 はVPN安全(WireGuard、IKEv2、企業のPMTU経路)です。1280

たとえば、今後のワークスペースのホームイメージを128 GiBとして表示させるには次のようにします。

defaults write io.bromure.agentic-coding vm.homeImageGB -int 128

メモ: vm.homeImageGB は、変更 に作成されるホームイメージにのみ影響します。既存のイメージはサイズを維持します。ホームイメージは後で拡大できます(オンラインのtruncateと resize2fs)が、縮小はできません。

ヒント: 本当に使い捨ての作業には、bromure-ac vm run --rm がDockerスタイルの使い捨てワークスペースを起動します。そのディスクはVMが停止すると削除されます――自動化と CLI で解説しています。