# 卸载与清理环境

> 安全移除 Barn deployment、集成、镜像、宿主网络与默认状态目录。

---

LLMS 索引： [llms.txt](/zh/llms.txt)

---

本页会删除虚拟机与本地数据。先确认当前状态，不要在仍需保留 Barn VM 时继续：

```bash
barn st
```

## 1. 删除 deployment

彻底删除节点、持久盘、密钥与 deployment 状态：

```bash
barn purge
```

这条整套处置命令无需确认；镜像缓存与宿主网络仍然保留。若要保留
持久盘或只删除选中节点，继续使用粒度更细且带确认的 `barn destroy`。

## 2. 移除可选集成

整体 destroy 已自动移除默认 `barn` SSH integration。如果使用过自定义 fragment 名称或
`/etc/hosts` 条目：

```bash
barn ssh-config --remove --name lab
barn hosts uninstall --json
barn hosts uninstall --yes
```

未加 `--yes` 的 `--json` 命令只展示 Barn 标记范围内的计划。确认目标正确后再执行
带 `--yes` 的命令。Barn 0.9.0 的普通终端输出会询问 `[y/N]`，同意后立即卸载。
读取 hosts 计划无需 sudo，实际修改仍需要权限。

## 3. 删除镜像缓存

```bash
barn image prune --dry-run
barn image prune --yes
```

Prune 删除未引用的缓存镜像与遗留 staging 文件，但会保护已应用 deployment、当前
Catalog 和已注册本地别名引用的镜像，因此不等于清空全部缓存。后面的可选状态目录
清理会一并删除剩余缓存。

## 4. 卸载宿主网络

```bash
barn network uninstall --json
barn network uninstall --yes
```

第一条 JSON 命令只展示归属明确的删除计划，但可能需要 sudo 读取受保护的网络状态。
只要仍有 VM 接入，网络卸载就会拒绝执行。宿主网络由用户共享；清理自己的部署不代表
其他用户的 VM 也已停止。

## 5. 清理源码安装残留

宿主网络卸载会保留可独立使用的 hosts helper。仅在确认不再使用 Barn 后，删除下面的准确路径：

```bash
sudo rm -f -- /opt/barn/libexec/barn-hosts-helper
sudo rmdir /opt/barn/libexec /opt/barn
```

若使用默认状态目录，并且前面所有步骤均已完成，可最后删除空余状态：

```bash
(
  set -eu
  test -z "${BARN_HOME:-}"
  barn_state_root="$(cd "$HOME" && pwd -P)/.barn"
  test ! -L "$barn_state_root"
  if test -d "$barn_state_root"; then
    printf 'removing exact state root: %s\n' "$barn_state_root"
    find "$barn_state_root" -depth -delete
  fi
)
```

此段命令在设置了 `BARN_HOME` 或默认路径为符号链接时停止。自定义状态目录必须
另行核对，不要把目标替换为 `$HOME`、`/`、工作区根目录或未经确认的路径。删除后不要
再次运行生命周期命令来验证目录不存在，因为命令可能重新创建锁目录。

QEMU 可能被其他工具共用，默认不要卸载。只有确定没有其他用途时，macOS 才执行：

```bash
brew uninstall qemu
```

检查网络与默认状态目录：

```bash
barn network status --json
test ! -e "$HOME/.barn" && echo 'no Barn state'
```

卸载后的网络预期报告缺失或未就绪，应检查具体结果，不应要求退出码为零。不要把
`bridge100` 是否消失当作依据：macOS 决定桥接名称，其他软件也可能使用 vmnet 桥。

Archive、Homebrew、DEB 或 RPM 安装的 Barn 二进制应使用对应安装渠道移除；源码构建生成的
`bin/` 只是工作区构件，与上述宿主状态无关。
