Files
BakNRet/docs/archive-layout.md
T
Shuery 60ecbc2933 docs: README 拆出四篇主题文档,本文件留总览与操作
拆出软件名录(67 行)、清单语法(114 行)、归档布局与迁移(47 行)、安全描述符(69 行),共 297 行;README 从 653 降到 360 行,每节原位留一句摘要加链接。

为什么拆:这四块是「要查的资料」,README 剩下的是「要读的流程」。混在一起时,想查清单语法的人得先滚过一百多行总览;拆开后每篇也能被单独引用与单独评审。

搬运按标题抽取原文、不重打,并在写之前断言正文长度、写之后再读回断言一次(第一次尝试就是栽在没有断言上:@(a, b, $arr) 不会展开数组,而是把 $arr 拼成一行,结果四篇各只有 5 行、正文却已从 README 删除。那次已回滚)。
2026-09-27 10:20:08 +08:00

52 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 归档布局、命名与迁移
> 本文从 [README.md](../README.md) 拆出,单独成篇是为了让它能被单独引用与单独评审。
### 包内长什么样
| 条目类型 | 归档内部 |
| --- | --- |
| 软件名 + Slot 目录 | `<Slot>\<该 Path 的内容>` |
| 软件名 + Slot 文件 | 一个名为 `<Slot>` 的文件(没有扩展名,恢复时还原成 Path 里的原名) |
| 手写路径(目录) | `<路径末级名>\...`(与历史归档一致) |
| 手写路径(文件) | 一个名为 `<路径末级名>` 的文件 |
| `:+` / `Include` 追加项 | 你写的那个 `<归档内相对路径>`(目录就是目录,文件就是那个文件) |
7z 没有"入库时改名"的能力,所以打包前会建一个**暂存目录**:目录项用 junction、
文件项用硬链接(不可用时退回复制)按归档内的名字挂进去,打完立刻拆掉。
建不出连接点时会**明确报错**,不会悄悄换成另一种布局——布局一变恢复就对不上了。
### 归档名
| 条目类型 | 归档名 |
| --- | --- |
| 软件名 | `<软件名>.7z` |
| 字面路径 | `<末级名>_from_<上级路径用 + 连接>.7z`(`:` 归一化成 `_`) |
| 软件名 + `@pathname` | 同字面路径 |
> `::` / `@ Path=` 只改**从哪儿读**,不改归档名:软件名条目仍然叫 `<软件名>.7z`。
> 想换归档名就用 `@pathname`,或者干脆把条目写成绝对路径。
### 从旧版迁移(重要)
1. **包内布局变了。** 重构前生成的归档,包内顶层是源目录名;现在软件名条目多了一层 Slot。
`Restore.ps1` 会识别这种情况(归档里没有该 Slot 时打印告警并按旧布局解),
所以**旧归档仍然恢复得出来**;但要让包内结构统一,跑一次 `.\Backup.ps1 -Force` 重打即可
(`-Force` 会忽略"源未更新"判断)。
2. **手写路径条目的归档名可能变了。** 清单里把原来的软件名改成绝对路径之后,
归档名会从 `<软件名>` 变成 `<末级名>_from_<...>`。用重命名工具对齐(**默认试运行**、
逐份大小校验、重建 manifest,只改名不搬数据):
```powershell
.\tools\Rename-Archives.ps1 # 先看计划
.\tools\Rename-Archives.ps1 -Apply # 确认后执行
```
它会先用当前规则算出目标名,再从"路径命名算法 / 名录里的软件名 / manifest 里记录过的归档名"
里找磁盘上真实存在的旧文件。
3. **名录里的 `Encrypt` 现在生效。** 如果某个 Slot 写了 `Encrypt = $true`(或清单里写了
`:encrypt`),但运行时取不到口令,该条目会**明确失败**,绝不会退化成明文归档。
先准备好 `$env:BAKNRET_PASSWORD` 或用 `-KeyFile` 指定密码文件再跑。
4. **孤儿归档审计**会在每次备份后点名"磁盘上有、但清单里没有任何条目指向"的归档
(旧名字没迁移、条目被删掉或改名都会这样)。确认新归档校验通过之后再删旧文件。