高级

本章汇集了应用中面向高级用户的功能界面——那些你偶尔才会用到、而非每次会话都需要的功能。其核心是内置的 ext4 文件浏览器,它可以在 Mac 上直接打开工作区的磁盘镜像而无需启动虚拟机:既可用于从你不想启动的工作区中恢复文件,也可用于修复无法启动的工作区。本章末尾有一小节介绍两个底层配置默认值。

这里的所有内容都假定你已熟悉 工作区会话 中介绍的存储模型。

ext4 文件浏览器

每个 工作区 都将其数据保存在 Linux ext4 磁盘镜像中——系统磁盘 disk.img 和主目录镜像 home.img。macOS 没有原生的 ext4 支持,因此通常查看这些镜像内部内容的唯一方法就是启动虚拟机。Bromure Agentic Coding 通过自带的、无依赖的用户态 ext4 读写器避免了这一点:它直接解析磁盘上的格式并向你展示目录树。

工作区 ▸ 打开 ext4 文件… 可以在一个类似 Finder 的窗口中打开任意 ext4(也支持 ext2ext3.img——无论是原始文件系统还是 MBR/GPT 分区磁盘。无需挂载、无需启动虚拟机,也不需要任何提升的权限。

注意: 镜像默认以只读方式打开——即使某个工作区虚拟机仍然连接着该磁盘也是安全的。编辑是一个单独且需明确解锁的步骤(参见 编辑镜像)。

你可以打开什么:工作区内部的磁盘

工作区位于 ~/Library/Application Support/BromureAC/profiles/<uuid>/ 下。其中有两个镜像值得浏览,外加它们的回滚快照:

镜像浏览器显示的内容工具栏信息行显示
disk.imgUbuntu 系统根目录——/etc/var/usr/opt 等。该磁盘采用 GPT 布局(一个 512 MiB 的 EFI 分区外加 ext4 根分区);浏览器会自动定位 ext4 根分区。partition @…MiB
home.img客户机的 /home/ubuntu,直接位于文件系统根目录——包括点文件、项目检出、.ssh、shell 历史,以及 .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 — «filename» 的窗口中打开,显示文件系统根目录。

工具栏的信息行(左下角)概述了卷的情况:卷标、总大小、文件系统是以原始形式找到还是位于某个分区偏移处,以及它的状态——cleannot cleanly unmountedjournal needs recovery。每个镜像对应一个窗口;重新打开一个已经打开的镜像只会将焦点切换到其窗口。

浏览、预览与提取

主视图是一个三列表格——名称大小类型——目录排在最前。类型区分文件夹、文件和符号链接,以及特殊的 Unix 节点类型(字符设备、块设备、FIFO、套接字)。

  • 浏览——双击文件夹进入;单击工具栏的 向上 箭头返回。面包屑显示当前路径。
  • 预览——双击文件,或右键单击并选择 预览。文本文件渲染为文本;二进制文件渲染为十六进制转储。无论哪种方式,预览都限制在前 1 MiB,页脚会报告在文件的总字节数中显示了多少。符号链接会预览为其目标路径。
  • 提取——右键单击文件并选择 提取…,通过一个存储面板将其完整内容写入你的 Mac。这是你最常使用的只读路径。

编辑镜像

编辑被刻意置于一道门槛之后。单击工具栏中的 启用编辑…;随后会出现一条警告:

仅编辑其工作区虚拟机已停止的镜像。向正在运行的虚拟机所打开的磁盘写入会将其损坏。

确认后,镜像会以读写方式重新打开,工具栏中带有一个橙色的 编辑 铅笔标记。此时文件的上下文菜单会新增 替换…:选择一个宿主机文件,用其内容就地覆盖所选文件。编辑器会重新计算 inode 的 metadata_csum 校验和,因此结果保持一致,无需修复。

警告: 替换仅限就地进行。新内容必须能容纳在文件已分配的块中——较大的文件会被拒绝并提示 该文件将需要扩大(扩大、创建和删除文件的功能尚未启用)。内联数据文件无法编辑。当日志需要恢复时写入会被拒绝——请先运行 fsck(见下文)。并且切勿编辑正在运行的虚拟机所连接的镜像。

运行 fsck

工具栏的 运行 fsck… 按钮会对已打开的镜像运行 fsck.ext4e2fsck)以重放日志并修复文件系统。它会先确认——"对此镜像运行 fsck.ext4?",并提示工作区虚拟机必须已停止、且该工具可能会修改镜像——随后运行一次强制自动修复。对于原始镜像,fsck 直接在文件上运行;对于分区磁盘,镜像会通过 hdiutil 在不挂载的情况下连接,检查 ext4 分区,随后再将镜像断开。整个过程不涉及任何提升的权限。

结果会显示在一个报告工作表中,附带一段通俗易懂的摘要——"文件系统是干净的。"、"文件系统错误已修正。" 或 "文件系统错误仍未修正。"——以及完整的工具输出;随后镜像会被重新打开。

注意: macOS 不附带 e2fsprogs。如果该工具缺失,会弹出提示 fsck.ext4 未安装,并给出修复方法 brew install e2fsprogs。应用会先在自身的 bundle 中搜索,然后是 $PATH,最后是 Homebrew 的 keg-only e2fsprogs 位置。

何时使用它

浏览器把一个已停止的工作区的磁盘变成了可以从宿主机检查和抢救的对象:

  • 恢复文件——从一个你不想启动的工作区中,用 提取… 取出未提交的更改或 home.img 中的日志。
  • 检查检查点——在回滚之前确认它包含你所期望的内容。将其与 恢复主目录…重置为基础镜像… 搭配使用,这两者都在 检查点与回滚 中介绍。
  • 抢救无法启动的工作区——就地替换一个损坏的配置文件,如果该写入导致日志需要恢复,则再运行 fsck。有关启动失败的诊断,请参见 故障排除

开发者默认值

有两个底层开关是从应用的 UserDefaults 域 io.bromure.agentic-coding 中读取的。在应用未运行时使用 defaults write 设置它们,然后重新启动:

作用默认值
vm.homeImageGB新创建的 ext4 主目录镜像的表观(客户机可见)大小,单位为 GiB。宿主机文件是稀疏的,因此这不会在一开始占用任何空间。取值范围限制在 8–1024。64
vm.mtu工作区虚拟机主网卡的 MTU 限制值,每次启动时写入客户机。默认值 1280 对 VPN 安全(WireGuard、IKEv2 以及企业 PMTU 路径)。1280

例如,要让未来的工作区主目录镜像显示为 128 GiB:

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

注意: vm.homeImageGB 仅影响更改之后创建的主目录镜像;现有镜像会保持原有大小。主目录镜像稍后可以扩大(在线截断加 resize2fs),但不能缩小。

提示: 对于真正一次性的工作,bromure-ac vm run --rm 会启动一个 Docker 风格的一次性工作区,其磁盘会在虚拟机停止时被删除——详见 自动化与 CLI