高度な操作

この章では、パワーユーザー向けの機能――毎日ではなく、ときどき使うもの――をまとめています。ホームを巻き戻す… によるマシンのホームフォルダの以前のブート時点への巻き戻し、VMを起動せずにマシンのディスクイメージをMac上で直接開く組み込みの ext4 ファイルブラウザ、ネイティブのファイルシステム検査、そしていくつかの低レベルの構成デフォルトを扱います。

マシン(設定エディタではワークスペース)は、そのデータを2つのLinux ext4 ディスクイメージに保存します。システムディスクとホームイメージです。ここでの内容はすべて、マシンとリソース設定で説明しているストレージモデルを理解していることを前提としています。

マシンのホームを巻き戻す

マシンが正常に起動するたびに、Bromure はそのホームイメージのコピーオンライト方式のチェックポイントを作成します。ホームイメージとは、プロジェクトのチェックアウト、dotfile、.ssh、シェル履歴、エージェントの状態を保持する /home/ubuntu のことです。チェックポイントは段階的に保持されます。直近の数回のブート、次に1週間は1日1つ、さらに1か月は1週間に1つです。実際にディスク容量を消費するのは、現在のホームがそこから変化した分だけです。

ホームを巻き戻す… は、それらを使う日常的な方法です。

  1. サイドバーで 仮想マシン を開き、マシンの行にある ⋯ ボタンをクリックします。
  2. ホームを巻き戻す… を選びます。「‹マシン›」のホームを巻き戻す というタイトルのシートが開きます。「各ポイントは、そのブートが始まった時点のホームフォルダです。次回の起動は選んだポイントから行われます。現在のホームは新しいポイントとして保持されるため、ここで元に戻せます。」
  3. リストからポイントを選びます。各行には、日時、それがどのくらい前か、ディスク上のチェックポイントのサイズが表示されます。
  4. 巻き戻す をクリックします。
「Web app」のホームを巻き戻すシート。各ポイントはそのブートが始まった時点のホームフォルダであると説明し、ロールバックポイントはまだありません――このマシンが起動するたびに1つ作成されます、というメッセージと、キャンセルと巻き戻すのボタンがある

完了すると、シートには「完了――「‹マシン›」の次回の起動は ‹日付› のホームから行われます。」と表示されます。ほかには何も変わりません。システムディスク、マシンの設定、その資格情報はそのままです。

知っておくべきこと:

  • マシンは停止している必要があります。 ホームイメージは丸ごと差し替えられるため、使用中であってはなりません。マシンの実行中は、シートに「マシンは実行中です――使用中のホームは差し替えられません。先にシャットダウンしてください。」と表示され、シャットダウン ボタンが提示されます。マシンが停止するまで 巻き戻す は無効のままです。
  • 巻き戻しは元に戻せます。 差し替えの前に、現在のホームが同じリストの先頭に新しいロールバックポイントとして追加されます。元に戻すには、もう一度 ホームを巻き戻す… を開いてそれを選びます。
  • ポイントがまだない場合。 一度も起動していない、または作成されたばかりのマシンでは、「ロールバックポイントはまだありません――このマシンが起動するたびに1つ作成されます。」と表示されます。
  • 古いマシン。 ホームをまだMac上のフォルダに保持しているマシン(従来の共有フォルダ方式のホーム)には、巻き戻すイメージがありません。シートには「このマシンはホームをイメージではなくMac上に保持しています――巻き戻すものはありません。」と表示されます。先に リソース ペインからストレージをアップグレードしてください。
  • リモートマシン。 リッチクライアントのミラーウィンドウでも、ホームを巻き戻す… は同じように、サーバーのチェックポイントに対して動作します。

その他のストレージ操作

マシンの リソース ペイン(⋯ › 編集… › リソース)には、レイヤーごとの従来の操作が残っています。マシンのウィンドウが開いている間は無効です(「先にセッションウィンドウを閉じてください。」)。

ボタンレイヤー動作
ホームを復元…ホーム(ext4)ホームを巻き戻す… と同じロールバックを、ポイントのポップアップリスト付きのアラートとして行います:復元 / キャンセル。現在のホームは先にチェックポイント化されます。
ホームを消去…ホーム/home/ubuntu 配下のすべてを消去します――プロジェクトのクローン、シェル履歴、キャッシュ、マシンのSSHキーペア。Bromure が管理するファイル(.bashrc、.gitconfig、CLIの設定)は、次回の起動時にマシンの設定から再構築されます。
ベースにリセット…システムディスクベースイメージからシステムディスクを再クローンします。apt でインストールしたものや、/etc、/var、/usr、/opt 配下の変更は失われます。ホームは残ります。

マシンの ⋯ メニューにも、同じシステムディスクのリセットである ディスクをリセット があります。ペインの全体についてはリソース設定を参照してください。

ext4 ファイルブラウザ

macOSはext4をネイティブにサポートしていないため、通常、マシンのディスクイメージの中身を見る唯一の方法はVMを起動することです。Bromure は、依存関係のない独自のext4リーダー/ライターでこれを回避します。ディスク上のフォーマットを直接解析し、ツリーを表示します。

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

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

開けるもの

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

イメージブラウザが表示する内容ツールバーの情報行の表示
disk.imgUbuntuのシステムルート――/etc、/var、/usr、/opt など。ディスクはGPTレイアウト(EFIパーティションとext4ルート)で、ブラウザはext4ルートを自動的に見つけます。partition @…MiB
home.imgゲストの /home/ubuntu をファイルシステムのルートに直接――dotfile、プロジェクトのチェックアウト、.ssh、シェル履歴、Bromure 専用のフォルダ .bromure/。raw
checkpoints/<ts>.imgブートごとに作成される disk.img のチェックポイント。partition @…MiB
checkpoints/home/<ts>.imgブートごとに作成される home.img のチェックポイント――ホームを巻き戻す… に一覧表示されるポイントです。raw

ホームイメージがこのように振る舞うのは、ゲストが起動時にそれを /home/ubuntu の 上に マウントするためで、イメージ自体のルートディレクトリがそのホームフォルダ そのもの になります。Kubernetes ノード、レジストリ、メッセージングコネクタは、代わりに kube/<id>/nodes/<uuid>/ の下にディスクを保持しており、同じ方法で開けます。

イメージを開く

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

ツールバーの情報行には、ボリュームの概要が表示されます。ラベル、合計サイズ、ファイルシステムが生のまま見つかったかパーティションオフセットで見つかったか、そして状態――clean、not cleanly unmounted、または journal needs recovery――です。ウィンドウはイメージごとに1つです。すでに開いているイメージを再度開くと、そのウィンドウが前面に来るだけです。

参照、プレビュー、抽出

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

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

イメージの編集

編集は意図的にゲートの背後に置かれています。ツールバーの 編集を有効にする… をクリックすると、このディスクイメージの編集を有効にしますか? というアラートが警告します。

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

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

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

ディスクの検査と修復

Bromure は独自の組み込みチェッカーでext4イメージを検査・修復します――インストールするものは何もありません(macOSには e2fsprogs が付属しておらず、Bromure もそれを使いません)。チェッカーは3つの場所で使われます。

  • 起動時に自動で。 マシンのブートがファイルシステムエラーで止まると、そのステージに ディスクエラー が表示されます――「システムディスクが起動時のファイルシステム検査に失敗したため、ブートを続行できません。」――ディスクを修復 と システムディスクをリセット… が付きます。ディスクを修復 はVMを停止し、システムディスクに対してチェッカーを実行して、再びブートします。何も削除されません。次のブートも失敗する場合は、リセットが次の手段です。トラブルシューティングを参照してください。
  • ext4 ブラウザで。 ツールバーの fsck を実行… ボタン。
  • コマンドラインから。 bromure-cli vm fsck <workspace> [--repair] [--home]――CLI、API、MCPを参照してください。

ブラウザでは、fsck を実行… が このイメージを検査しますか? と尋ねます――「ファイルシステムのジャーナルがダーティであれば再適用し、メタデータを検証します。ワークスペースのVMは停止している必要があります。イメージが変更される可能性があります。」――fsck を実行 と キャンセル が付きます。結果は fsck.ext4 というタイトルのシートに表示され、完全な出力の上に1行の要約が表示されます。

要約意味
「ファイルシステムはクリーンです。」何もする必要はありません。
「ファイルシステムを修復しました。現在は整合しています。」ジャーナルが再適用されました。イメージは、ゲストカーネルが最後にコミットした状態そのものになっています。
「ファイルシステムに、このチェッカーでは修復できないエラーがあります。」未完了のジャーナルを超える損傷です。

その後イメージが再度開かれ、ブラウザには修復後の状態が表示されます。

チェッカーができること、できないこと:

  • 修復 はファイルシステムのジャーナルを再適用し、「リカバリが必要」フラグをクリアします。壊れた Bromure のディスクのほぼすべては、これで解決します。イメージがクリーンでなくなるのは、書き込み中にVMが停止したり落ちたりしたときであり、ビット劣化によるものではありません。
  • 検証 は常にスーパーブロックとグループディスクリプタのチェックサムを確認し、その後ルートからツリーをたどって、到達可能なすべてのinodeのチェックサムとエクステントツリーを検証します。見つかったものは報告しますが、修正はしません。
  • チェッカーで修復できない損傷には、VM内でLinux自身の e2fsck を使うのが正攻法です。ゲストはすでにブートのたびにホームイメージを検査しており、Kubernetes ノードとレジストリは、ディスクに対して e2fsck を自動的に実行する使い捨てのマシンにフォールバックします。ワークスペースのシステムディスクについては、ベースにリセット… が再クローンし、ホームには手を触れません。

これらのツールを使う場面

  • ホームの損傷を元に戻す――エージェントが間違ったフォルダを削除した、あるいはdotfileの変更でシェルが壊れた場合:ホームを巻き戻す… で最後の正常なブートに戻します。
  • ファイルを回収する――起動したくないマシンから、コミットしていない変更やログを 抽出… で home.img から取り出します。
  • チェックポイントを確認する――巻き戻す前に、期待する内容が含まれているかを確かめます。ext4 ブラウザで checkpoints/home/ から開きます。
  • 起動しないマシンを救う――ディスクを修復 にジャーナルを再適用させます。不正な設定ファイルが原因なら、ブラウザでその場で置き換えてからfsckを実行します。ブート失敗の診断についてはトラブルシューティングを参照してください。

開発者向けデフォルト

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

キー効果デフォルト
vm.homeImageGB新規作成される ext4ホームイメージの見かけ上の(ゲストから見える)サイズ(GiB単位)。ホストファイルはスパースなので、これは前もってコストがかかりません。8~1024にクランプされます。従来のホームを最初のイメージに移行する場合は、少なくとも64になります。16
vm.mtuマシンのVMのプライマリNICのMTUクランプで、起動のたびにゲストに書き込まれます。デフォルトの 1280 はVPN安全(WireGuard、IKEv2、企業のPMTU経路)です。1280
terminal.allowGraphicsゲストからのターミナル内画像レンダリング(kitty グラフィックスプロトコル)を再び有効にします。デフォルトはオフです。これはホストがゲスト提供の画像バイト列をデコードすることを意味し、同じチャネルでターミナル上に偽の UI を描画される可能性もあるためです。エージェントに画像をインライン表示させたく、そのリスクを受け入れる場合のみオンにしてください。NO
ui.terminalBellターミナルのベルを鳴らせるようにします。デフォルトはオフです。エージェントはターンの終わりごとにベルを鳴らしますが、そのことはサイドバーのステータスですでにわかります。NO

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

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

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

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

UserDefaults のキーと環境変数の完全な一覧は付録にあります。