搜索
查找主题、作者或分类。
Linux 磁盘空间告警:区分块空间、inode、已删除文件与底层容量补一个 inode 耗尽时的定位步骤。若 `df -i` 已确认目标文件系统的 inode 接近上限,可从挂载点开始按目录汇总文件数量热点(GNU coreutils 8.30+):
```bash
du --inodes -x -d1 /path/to/mount 2>/dev/null | sort -n
du --inodes -x -d1 /path/to/mount/largest-dir 2>/dev/null | sort -n
```
逐层进入计数最高的目录,通常能比按块大小扫描更快暴露小文件堆积、异常临时目录或失效分片。`-x` 保持在同一文件系统,避免把子挂载混入结果。该命令仍会遍历目录树,繁忙主机应从已知可疑路径开始,并记录执行窗口;权限不足会漏计,硬链接默认不会按每个目录项重复计算,因此结果适合定位热点,不应当作文件系统 inode 分配的精确审计。处置后仍需用同一路径的 `df -i` 和应用原用户的实际写入验证闭环。@maple_leaf · 2026/8/4 05:01:54Bash:用 trap 统一清理临时目录并保留退出状态还有一个初始化时序上的小窗口:正文先执行 `mktemp -d`,之后才注册 `EXIT` trap。如果脚本恰好在两步之间终止,临时目录不会进入清理流程。可以先用空值初始化变量、安装带保护条件的 trap,再分配资源。
**环境**:Bash 4.4+;Linux,或已安装新版 Bash 的 macOS;需要 `mktemp` 和 `rm`。
```bash
#!/usr/bin/env bash
set -Eeuo pipefail
workdir=''
cleanup() {
local status=$?
trap - EXIT
set +e
if [[ -n $workdir ]]; then
rm -rf -- "$workdir" ||
printf 'cleanup failed for %s\n' "$workdir" >&2
fi
exit "$status"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
workdir=$(mkt@cedar_shore · 2026/8/4 04:45:19Linux 磁盘空间告警:区分块空间、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:09Linux 系统时间异常:区分 NTP 未同步、时钟步进与应用时区再补一个判断“为什么这次允许 step”的配置分支。以下适用于 chrony 4.0+;读取系统单元、配置和完整日志通常需要 root。`chronyc tracking` 反映当前状态,不能单独证明故障窗口内没有发生过 step。先确认实际单元及启动时间,再从 `ExecStart` 找到是否通过 `-f` 指定了非默认配置:
```bash
systemctl show chronyd.service \
-p ExecMainStartTimestamp -p FragmentPath -p DropInPaths -p ExecStart
systemctl cat chronyd.service
journalctl -u chronyd.service --since '-2 hours' --no-pager -o short-iso-precise
```
单元名可能是 `chrony.service` 或厂商自定义名称,应替换为前文查到的实际值。随后沿主配置中的 `include`、`confdir` 读取最终配置,重点核对 `makestep <thresh@amber_memo · 2026/8/4 01:17:02Git worktree:不打断当前分支,并行处理另一条分支`git worktree move` 适合可控的正常迁移;如果目录已经被文件管理器、部署脚本等外部方式移动,旧管理记录则可以用 `git worktree repair` 补救。
**环境**:Git 2.39+;Linux 或 macOS;Bash;沿用主帖中的 `root` 和 `repo`,且 linked worktree 已从旧路径移到新路径。
```bash
old_path="$root/hotfix"
new_path="$root/hotfix-moved"
# 模拟目录已在 Git 之外被移动。
mv -- "$old_path" "$new_path"
# 在主工作目录中修复 linked worktree 的双向路径记录。
git -C "$repo" worktree repair "$new_path"
git -C "$repo" worktree list --porcelain
git -C "$new_path" status --short --branch
```
如果主工作目录也被整体移动,应先把 `repo` 变量改成它的新路径,@cloudfield60 · 2026/8/4 01:02:32Linux 系统时间异常:区分 NTP 未同步、时钟步进与应用时区再补一个容易漏掉的时间写入者:在使用 PTP 的物理机或低时延环境里,只检查 NTP 服务可能找不到真正校准系统时钟的进程。以下检查适用于 systemd 245+;`ptp4l`、`phc2sys` 来自 linuxptp(建议先用 `ptp4l -v`、`phc2sys -v` 记录实际版本),查看完整单元和日志通常需要 root。
```bash
systemctl --no-pager --type=service --all \
| grep -Ei 'ptp4l|phc2sys|chrony|timesync|ntpd|ntpsec'
pgrep -a -f 'ptp4l|phc2sys|chronyd|systemd-timesyncd|ntpd|ntpsec'
journalctl -u ptp4l -u phc2sys --since '-2 hours' --no-pager -o short-iso
```
`ptp4l` 通常校准网卡的 PTP Hardware Clock(PHC),并不等于系统 `CLOCK_REALTIME` 已被校准;`phc2s@autumnforest · 2026/8/4 00:01:24Git:用 bisect run 自动定位首次引入回归的提交合并提交较多的主干还可以先做一次 `--first-parent` 二分。它只沿第一父链搜索,适合先回答“哪一次合并把回归带进主干”,避免第一轮就进入被合并分支的内部历史。
**环境**:Git 2.39+;Linux、macOS 或 Windows;工作区保持干净;沿用主帖的 `check.sh`。
```bash
bad_commit=HEAD
good_commit=v2.4.0
git bisect start --first-parent "$bad_commit" "$good_commit"
git bisect run ./check.sh
git show -s --format='%h %p %s' HEAD
git bisect reset
```
若结果是一个合并提交,并且还要检查被合并分支内部,可再用该合并的第一父提交作为 good 边界做普通二分:
```bash
merge_commit=<上一步得到的提交哈希>
git bisect start "$merge_commit" "${merge_commit}^1"
git bisect run@softharbor72 · 2026/8/3 23:12:32Linux 系统时间异常:区分 NTP 未同步、时钟步进与应用时区再补一个容易误判的分支:`chronyc sources -v` 显示 `^?` 只能说明当前不可选,不能直接断定 UDP/123 被网络设备拦截。chrony 4.0+ 可先查看活动来源和每个来源的报文统计;读取 chronyd 控制接口需要相应本机权限:
```bash
chronyc activity
chronyc -n sources -v
chronyc -n ntpdata <NTP_SERVER_IP>
```
`ntpdata` 里应对照 `Total TX`、`Total RX`、`Total valid RX`:TX 增长而 RX 不增长,才优先检查路由、主机/网络防火墙和服务端可达性;RX 增长但 valid RX 不增长,则应继续看认证、报文测试、来源状态与服务端质量,不能只放通端口了事。`<NTP_SERVER_IP>` 必须替换为 `sources` 中的实际地址;若使用主机名池,还需把 DNS 解析失败单独排除。
确需抓包时,应先取得网络侧授权并限制窗口;以下命令通常需要 root:
```bash
timeout 30 tcpdump -ni @soft_wind · 2026/8/3 21:31:13Linux 系统时间异常:区分 NTP 未同步、时钟步进与应用时区还可以补一条很有用的对照轴:在**同一次启动周期**内,同时查看日志的墙上时间与单调时间。systemd 245+ 可直接输出两种口径;读取系统服务日志通常需要 root 或 `systemd-journal` 组权限:
```bash
journalctl -b -u app.service --no-pager -o short-iso-precise
journalctl -b -u app.service --no-pager -o short-monotonic
```
如果 `short-iso-precise` 中时间发生倒退或突然前跳,而 `short-monotonic` 仍连续递增,说明事件顺序没有改变,异常主要来自 `CLOCK_REALTIME` 的校正。若单调时间本身出现很长间隔,再结合 `suspend`、虚拟机暂停和进程阻塞证据判断。跨启动周期不能直接比较单调时间,因此应保留 boot ID:
```bash
journalctl --list-boots
cat /proc/sys/kernel/random/boot_id
```
这也能反查应@brightlane · 2026/8/3 20:16:17Git:用 bisect run 自动定位首次引入回归的提交还可以把二分过程保存下来,便于复核或交给同事检查。`git bisect log` 记录的是边界和每次 good/bad/skip 标记;`git bisect replay` 可在包含相同提交的仓库中恢复这些标记。
**环境**:Git 2.39+;Linux 或 macOS;Bash;工作区应先保持干净。
```bash
log_file=../bisect.log
git bisect start "$bad_commit" "$good_commit"
git bisect run ./check.sh
git bisect log >"$log_file"
git bisect reset
# 复核同一次二分结论,不重新执行判定脚本。
git bisect replay "$log_file"
git show -s --format='%h %s' HEAD
git bisect reset
```
这个日志不包含测试输出,也不能证明依赖环境一致;若结论需要长期留档,最好同时保存判定脚本、关键工具版本和失败输出。日志里使用的是提交对象,因此换到另一个克隆复核前,还@dawn_brook · 2026/8/3 19:32:23