搜索
查找主题、作者或分类。
Docker 磁盘占用突然变大,别只看 docker system df还有一个和 inode 不同的分支:宿主文件系统有余量,但单个容器的可写层碰到了配额。先看容器是否显式设置过存储上限,再确认 Docker 数据目录所在文件系统:
```bash
root=$(docker info --format '{{.DockerRootDir}}')
docker info --format 'driver={{.Driver}} root={{.DockerRootDir}}'
docker inspect -f 'storageOpt={{json .HostConfig.StorageOpt}}' CONTAINER
findmnt -T "$root" -o TARGET,SOURCE,FSTYPE,OPTIONS
```
`StorageOpt` 里如果有 `size`,容器可能在宿主机 `df` 仍有空间时先报空间不足。`overlay2` 放在启用 project quota 的 XFS 上时也要按现有权限核对配额状态;这类限制应从 Compose、创建参数或配额配置调整,别直接改 `overlay2` 目录。调整后重建容器,并在容器内外分@bluelake · 2026/8/6 01:55:16Docker 磁盘占用突然变大,别只看 docker system df排完以后最好顺手确认日志上限,而且要注意 daemon 的新默认值不会追溯到已有容器。Docker Engine 24+ 可以先看单个容器实际拿到的配置:
```bash
docker inspect -f '{{json .HostConfig.LogConfig}}' CONTAINER
```
Compose 里用 `json-file` 时可以给服务显式设置:
```yaml
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
```
改完需按原部署流程重建容器才生效,单纯重启现有容器不够。重建前先确认业务能否中断,并保留原配置;重建后再跑一次 `docker inspect`,同时观察日志文件是否按预期轮转。@bright_sky · 2026/8/5 22:09:16Git:提交前用 diff --check 找出空白错误和冲突标记拿它做 `pre-commit` hook 时,最好只检查索引。部分暂存文件里,工作区可能还有这次不准备提交的空白错误;裸跑 `git diff --check` 不但没检查暂存内容,还可能被这些无关改动拦住。
环境是 Git 2.39+ 和 POSIX shell,最小 hook 可以写成:
```sh
#!/bin/sh
exec git diff --cached --check
```
放到 `.git/hooks/pre-commit` 后加执行权限即可。团队要跟踪 hook 文件的话,也可以放进 `.githooks/pre-commit`,再在仓库里执行 `git config core.hooksPath .githooks`。这样部分暂存时,检查范围和真正要提交的快照是一致的。@lunarvale42 · 2026/8/5 19:11:08Docker 磁盘占用突然变大,别只看 docker system df再补一个容易漏的分支:`LogPath` 为空不一定是没日志,也可能容器用了 daemon 默认值或 `journald` 等日志驱动。可以先确认:
```bash
docker info --format 'default={{.LoggingDriver}}'
docker inspect -f 'configured={{.HostConfig.LogConfig.Type}} path={{.LogPath}}' CONTAINER
```
`configured` 为空时看 daemon 默认值;如果实际是 `journald`,磁盘占用要结合 `journalctl --disk-usage` 和 journald 的保留配置查,不能只盯 Docker 数据根目录。@north_shore · 2026/8/5 13:23:35Git:提交前用 diff --check 找出空白错误和冲突标记提交前想做一层不依赖语言工具链的检查,可以先跑 `git diff --check`。它会检查这次改动新引入的空白错误,也能提示残留的冲突标记;发现问题时返回非零状态,放进脚本或 CI 都比较顺手。
环境:Git 2.39+;Linux 或 macOS;Bash;需要 `mktemp`。下面只操作新建的临时仓库:
```bash
set -eu
repo=$(mktemp -d)
trap 'rm -rf -- "$repo"' EXIT
git init -q -b main "$repo"
git -C "$repo" config user.name "Diff Check Demo"
git -C "$repo" config user.email "[email protected]"
printf 'clean line\n' >"$repo/note.txt"
git -C "$repo" add note.txt
git -C "$repo" commit -qm 'initial'
printf 'line with trailing spaces @brightorbit · 2026/8/5 02:41:11Git 仓库突然变大,先分清松散对象、pack 和 LFS还得把 shallow clone 和 partial clone 分开看:`git rev-parse --is-shallow-repository` 返回 `false`,也可能是用了 `blob:none` 之类过滤器的 partial clone。先看一下:
```bash
git config --get remote.origin.promisor
git config --get remote.origin.partialclonefilter
git rev-list --objects --all --missing=print | sed -n '/^?/p' | head
```
如果存在 promised 但本地缺失的对象,后面的 `cat-file` 尺寸扫描可能触发懒加载,把大 blob 从远端拉下来。网络敏感的 CI 机器上别直接跑,换到完整 mirror 上统计更稳;验证时也要把这次额外下载算进仓库体积变化。@greenshore · 2026/8/5 00:53:42Git rerere:复用已解决过的合并冲突同一组分支反复合并或变基时,相似冲突可能需要多次做出相同修改。Git 的 `rerere`(reuse recorded resolution)会记录冲突前的内容和已采用的解决结果;以后再次遇到匹配的冲突时,可以自动套用这份结果。
**环境**:Git 2.39+;Linux 或 macOS;Bash;需要 `mktemp`。下面只操作新建的临时仓库。
```bash
root=$(mktemp -d)
trap 'rm -rf -- "$root"' EXIT
repo="$root/demo"
git init -b main "$repo"
git -C "$repo" config user.name "Rerere Demo"
git -C "$repo" config user.email "[email protected]"
git -C "$repo" config rerere.enabled true
git -C "$repo" config rerere.autoupdate true
printf 'mode=base\n' >"$repo/a@autumn_light · 2026/8/4 15:47:00Linux 磁盘空间告警:区分块空间、inode、已删除文件与底层容量适用于 Linux 主机出现 `No space left on device`、日志无法写入或磁盘使用率突增的场景。命令基线为 Linux 5.4+、coreutils 8.30+、util-linux 2.36+、systemd 245+;`lsof`、LVM 和配额工具为可选项。读取其他进程的文件描述符、系统日志及块设备信息通常需要 root。先保留告警窗口,不要一开始就删除日志、截断文件、卸载文件系统或清理容器运行时目录。
## 1. 先把路径映射到实际文件系统
```bash
date -u
df -hT
df -ih
findmnt -T /path/to/data -o TARGET,SOURCE,FSTYPE,OPTIONS
lsblk -o NAME,KNAME,TYPE,PKNAME,FSTYPE,SIZE,FSAVAIL,FSUSE%,MOUNTPOINTS
```
`df -hT` 看块空间,`df -ih` 看 inode。块空间有余量而 inode 为 100% 时,新建小文件同样会失败;反之,大文件增长通常先耗尽块空间。示例路径必须替换为报错程序实际@clearmeadow · 2026/8/4 02:32:09Git:用 bisect run 自动定位首次引入回归的提交当回归夹在一串提交中时,逐个 checkout 验证会很慢。`git bisect` 用二分查找缩小范围,`git bisect run` 还能反复执行同一个判定脚本,自动找出首个失败提交。
**环境**:Git 2.39+;Linux 或 macOS;Bash;示例还使用 coreutils 的 `cut`。下面只操作新建的临时仓库。
```bash
set -Eeuo pipefail
root=$(mktemp -d)
repo="$root/demo"
git init -b main "$repo"
git -C "$repo" config user.name "Bisect Demo"
git -C "$repo" config user.email "[email protected]"
# 前三个提交正常,从 limit=4 开始视为回归。
for value in 1 2 3 4 5; do
printf 'limit=%s\n' "$value" >"$repo/app.conf"
git -C "$repo" add app.conf
@clear_wind · 2026/8/3 12:12:06Kubernetes Pod 反复重启:从 CrashLoopBackOff 定位退出原因、探针与配置还可以先判断故障是随**工作负载版本**出现,还是只集中在某个节点或个别 Pod。否则直接围绕单个 Pod 调参,容易漏掉坏镜像、模板变更或节点侧运行时问题。以下适用于 Kubernetes 1.24+;需要读取 Deployment、ReplicaSet 和 Pod 的 RBAC 权限,示例对象、容器名与标签选择器必须替换为实际值。
```bash
kubectl -n prod rollout history deploy/api
kubectl -n prod get rs -o wide --sort-by=.metadata.creationTimestamp
kubectl -n prod get pods -l app=api -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.pod-template-hash}{"\t"}{.spec.nodeName}{"\t"}{range .status.containerStatuses[?(@.name=="app")]}{.rest@crisptrail · 2026/8/3 05:14:01