Samba 4域控备份恢复脚本集:离线备份与故障快速恢复实战
简介面向Samba 4部署与运维人员这套脚本集覆盖域控日常管理中备份、权限检查、系统卷访问控制列表修复、域信息展示等高频需求全部脚本均在Debian Jessie与Stretch服务器上实测通过。作者同步整理的多份操作文档涉及Stretch基础配置、Samba成员文件服务器、最小化AD部署、NFSv4配合、Ubuntu 18.04完整搭建等场景并附检查清单便于分阶段参考。压缩包共25个文件12个脚本承载核心自动化逻辑9个文本提供配置记录与操作步骤3个说明文件作为模块概述另有backup_samba4独立备份工具整体仅71KB轻量易移植。已有247人学习下载。脚本功能覆盖改良版备份、SePrivileges只读检查、系统卷权限设置与校验、域信息查询、数据库复制状态检查、调试信息收集、共享目录初始化、DNS批量添加等多数执行前有提示或以只读方式运行降低误操作风险。备份脚本为原版修改复制检查可辅助定位同步异常。这套小体积资源既能直接部署复用也可作为个人运维脚本库的参考。1. Samba 4脚本集给域控准备的后悔药Samba 4把Linux变成域控这件事配置起来不算难难的是节点挂了之后怎么把数据捞回来。这套在Debian Jessie和Stretch上实测过的Samba 4脚本集覆盖了信息收集、离线备份、Sysvol同步三个环节都是Shell脚本直接能跑。适合正在用Samba 4搭域控、或者接手了别人搭建的域控但还没建立备份方案的运维。你找的不是脚本是出事之后的后悔药。2. 脚本集构成与工作原理samba-info、backup、sysvol-sync各管一摊拿到这套脚本的时候我先把里头的文件挨个看了一遍它不是一个单一脚本而是围绕Samba 4域控日常运维拆成的一组工具。理解了每个脚本定位后面改起来才顺手。2.1 脚本清单与各自管的事这套东西我习惯按用途分成三类状态判读、数据备份、节点同步。典型的脚本组成如下脚本定位核心功能samba-info.sh状态收集版本、域信息、复制链路backup-samba.sh离线备份打包ntds.dit、Sysvol、tdb与配置sysvol-sync.sh节点同步把主域控Sysvol拉到本地restore-samba.sh恢复辅助从最近备份集还原数据backup-samba.sh是这套脚本里最关键的一个它做的事情可以用一句话概括停止Samba域控服务把一致性状态下的数据打成tar包然后恢复服务最后按保留策略清掉过期备份。这个过程不依赖ntds.dit的在线快照机制所以在Samba 4.2和4.5上都能用适配范围很宽。2.2 为什么要分开对待ntds.dit和Sysvol刚开始用Samba 4的时候我踩过一个思维方式上的坑以为备份域控就是把/var/lib/samba整个目录tar走就行了。后来发现ntds.dit是AD数据库本体记录着用户、组、DNS、信任关系这些目录信息而Sysvol里放的GPO脚本和组策略文件两者一致性要求完全不同。如果命令执行到一半、Sysvol刚写到一半同一个备份集里就会出现两个不同时间点的数据。恢复之后用户能登录但组策略应用乱七八糟GPO路径指向的文件又不存在排查起来非常费劲。所以这套脚本的处理逻辑是先用系统服务控制把samba-ad-dc停掉在静止状态下同时打包数据库和Sysvol保证它们是同一个时间点的快照。2.3 为什么用纯Shell而不是Python工具链在Debian Jessie上Python是2.7到了Stretch变成3.5如果你写一套基于Python的工具至少要考虑解释器差异和依赖库的版本变化。但这套脚本全部是Shell依赖的就是系统自带的tar、find、date、rsync这类命令外加samba-tool这个官方命令行工具。我的理解是脚本作者刻意做了一个边界判断信息收集用samba-tool已经足够文件搬运交给tar和rsync选型上没有引入任何额外的包。考虑到在Jessie这种老版本上直接装Python库还涉及源更新和依赖冲突纯Shell的做法对老环境明显更友好。2.4 samba-info的输出格式与解析要点samba-info.sh做的信息收集我一般用在故障排查初期先看明白域控当前是什么状态。它的核心命令如下#!/bin/bash # samba-info.sh - 收集Samba域控基础状态 echo Samba 版本 samba --version echo 域信息 samba-tool domain info 127.0.0.1 2/dev/null || echo 无法获取域信息 echo 复制状态 samba-tool drs showrepl 2/dev/null | head -n 30 echo 关键服务状态 systemctl is-active samba-ad-dc第二段和第三段的|| echo是有意为之的兜底域控如果出现严重故障samba-tool命令很可能会卡住或者直接报错这时候给一个明确提示比抛一堆traceback有用。head -n 30是限制复制状态的输出量复制链路多的时候完整输出能刷屏。用这个脚本之前我自己踩过一次samba-tool drs showrepl输出为空还带非零退出码的情况如果不用短路的判断逻辑后面的脚本直接退出了。3. 备份脚本实战把备份跑起来并交给cron脚本在手运行起来是第一件事。这一章我会从手动执行讲起再到定时任务最后给出一个可复用的恢复检查流程。每一步我都会写清楚命令和逻辑方便你对照自己的环境调整。3.1 手动备份第一次跑通全流程拿到backup-samba.sh之后第一步是确认它的执行权限和路径。一般我会把脚本放到/usr/local/sbin下然后手动执行一次# 赋予执行权限并手动运行 chmod x /usr/local/sbin/backup-samba.sh sudo /usr/local/sbin/backup-samba.sh脚本内部核心备份逻辑大概是这样#!/bin/bash # backup-samba.sh - Samba 4 域控离线备份 BACKUP_ROOT/var/backup/samba KEEP_DAYS30 BACKUP_DATE$(date %Y%m%d_%H%M%S) BACKUP_DIR${BACKUP_ROOT}/${BACKUP_DATE} # 停服务保证数据一致性 systemctl stop samba-ad-dc # 创建备份目录并打包 mkdir -p ${BACKUP_DIR} tar czf ${BACKUP_DIR}/samba-data.tar.gz \ /var/lib/samba/private \ /var/lib/samba/sysvol # 单独备份配置文件 cp /etc/samba/smb.conf ${BACKUP_DIR}/smb.conf.bak cp /etc/krb5.conf ${BACKUP_DIR}/krb5.conf.bak # 备份tdb数据库 if command -v tdbbackup /dev/null 21; then tdbbackup /var/lib/samba/private/secrets.tdb cp /var/lib/samba/private/secrets.tdb.backup ${BACKUP_DIR}/ fi # 恢复服务 systemctl start samba-ad-dc # 清理过期备份 find ${BACKUP_ROOT} -maxdepth 1 -type d -name 20* -mtime ${KEEP_DAYS} -exec rm -rf {} \;执行逻辑是先停掉samba-ad-dc服务防止数据库正在写入时被打包然后同时打包private目录和sysvol保证两个部分处于同一个时间点配置文件单独拷一份是为了排查问题时能对照原样tdbbackup单独处理secrets.tdb因为这个文件记录了机器密钥和信任关系是备份中容易忽略的点。参数方面BACKUP_ROOT建议改成独立分区或外部挂载点避免/var分区被备份集撑爆KEEP_DAYS控制保留窗口我一般按现场的审计要求设30天。find这里的-mtime 30表示只删30天前的备份目录注意-name 20*是为了避免误删其他文件。3.2 定时备份用cron实现无人值守备份如果不做成定时任务本质上就是赌服务器不出事。Samba 4域控最怕的是节点宕机后没有近期备份所以定时备份得从第一天上线就配好。cron配置如下# 编辑root用户的crontab sudo crontab -e添加一行# 每天凌晨1:30执行备份脚本日志写入独立文件 30 1 * * * /usr/local/sbin/backup-samba.sh /var/log/samba-backup.log 21时间选择凌晨1:30一方面避开上班时段的登录峰值另一方面给前面的操作留够时间。日志重定向到独立文件方便事后排查。cron配置完之后验证一下语法sudo crontab -l | grep samba看到输出中包含backup-samba.sh这行就说明已生效。如果系统里配置了logrotate建议给/var/log/samba-backup.log也加一条轮转规则防止日志文件无限增长。3.3 恢复演练从备份还原数据备份脚本不算完成直到你验证过恢复流程。恢复动作本身用restore-samba.sh简化操作#!/bin/bash # restore-samba.sh - 从最近备份恢复Samba数据 LATEST_BACKUP$(ls -dt /var/backup/samba/20* | head -n 1) echo 使用备份: ${LATEST_BACKUP} systemctl stop samba-ad-dc tar xzf ${LATEST_BACKUP}/samba-data.tar.gz -C / cp ${LATEST_BACKUP}/smb.conf.bak /etc/samba/smb.conf cp ${LATEST_BACKUP}/krb5.conf.bak /etc/krb5.conf systemctl start samba-ad-dc这个脚本的逻辑是先找到最新备份目录停服务后解压数据包恢复两个配置文件再启动服务。ls -dt按时间排序并取第一条避免在备份目录里混入其他手动创建的目录。恢复之后必须验证的检查点有三个systemctl status samba-ad-dc确认服务正常启动samba-tool domain info 127.0.0.1确认AD数据库能正常响应再看一眼Sysvol目录的属主和权限确保不是root独占状态。4. 常见问题与避坑四个让备份失效的细节脚本本身能跑不代表你的备份体系是健康的。这里写四个我在实践中真实踩过的坑每一个都按「现象、原因、解决」三部分说清楚。4.1 备份目录越来越大磁盘被塞满现象/var/backup/samba目录持续膨胀磁盘告警但脚本里的清理逻辑看起来没生效。原因find命令的-mtime参数依赖文件时间戳但备份目录下的文件时间戳是打包时刻的时间如果脚本每次生成的新目录都带新的时间戳而目录本身的mtime没有正确对应日期清理逻辑就会漏掉一部分旧数据。另外-exec rm -rf在遇到权限问题时也会静默跳过。解决把清理逻辑改成基于目录名的日期过滤同时带上-print先看匹配结果# 先打印将删除的目录确认无误后再交给rm find /var/backup/samba -maxdepth 1 -type d -name 20* \ -mtime 30 -print -exec rm -rf {} \;建议加一条定时任务专门做备份集的健康检查每周打印一次各备份目录占用空间防止问题积累到磁盘爆掉才发现。4.2 恢复后用户无法登录报KRB5KDC_ERR现象从最近一次备份完整恢复后域内用户尝试登录报KRB5KDC_ERR相关错误客户端认证失败但systemctl status samba-ad-dc显示服务正常运行。原因机器密钥失配。Samba 4的secrets.tdb里保存着机器账号密码和krb5密钥如果备份时只恢复了数据库和Sysvol但secrets.tdb因为tdbbackup没走通而缺失服务器拿到的密钥就跟客户端记录不一致认证自然失败。解决恢复时必须确认secrets.tdb.backup在备份目录里存在并且恢复脚本里要把这个文件也解压回去。我在现场遇到的多数同类问题都是因为只恢复了ntds.dit而忽略了tdb。如果密钥确实丢了补救只能把域控降级再提升或者从另一台域控强制同步密钥相当折腾。4.3 Stretch上脚本报错备份执行中断现象同一套脚本在Jessie上跑得好好的迁移到Stretch后执行到backup-samba.sh某一行就报tar: /var/lib/samba/sysvol: Cannot open之类的错误或者samba-tool命令输出格式解析失败。原因Debian Stretch自带的Samba 4.5对/var/lib/samba的目录结构做了一些调整部分路径在不同安装方式下会变化。同时Samba 4.x把部分samba-tool子命令的输出从文本格式改得更结构化依赖grep特定字符串的解析方式会失配。解决打开脚本加两行调试打印关键路径是否存在ls -ld /var/lib/samba /var/lib/samba/private /var/lib/samba/sysvol如果路径不存在说明包升级后目录被挪了位置按实际路径改掉脚本里的硬编码。另外脚本里如果用了samba-tool domain info的输出做条件判断建议把解析逻辑放宽或者改用--json参数输出再配合grep dns_name这类方式。4.4 Sysvol rsync之后组策略没生效现象用sysvol-sync.sh把主域控的Sysvol同步到从域控后客户端在从域控上验证时会话正常但组策略对象读不到GPO里定义的脚本路径失效。原因rsync默认没有同步扩展属性Sysvol的gp目录下有很多NTFS ACL信息Samba靠这些扩展属性区分用户权限丢失之后Samba会拒绝读取部分GPO内容但对外表现不是错误而是策略不生效。解决rsync命令改成保留属主和ACL的完整模式rsync -avz --numeric-ids --delete \ root${PRIMARY_DC}:/var/lib/samba/sysvol/ \ /var/lib/samba/sysvol/--numeric-ids确保uid/gid按数字同步不依赖两端用户名的解析结果。执行完后用getfacl抽查/var/lib/samba/sysvol/example.com/Policies目录下的ACL是否与源端一致。从此之后我对所有域控同步类任务都先检查两端的ACL再判断是否同步成功。5. 改造与扩展从脚本到自己的运维小工具脚本是别人的环境是你自己的。拿回来跑通只是第一步把它改造成贴合自己现场才是正经事。这一章讲三个我常用的改造方向。5.1 调整备份保留策略不同场景对备份保留周期要求差异很大。测试环境保留7天足够生产环境可能需要90天甚至还要配合归档。改法很简单只要动脚本顶部的变量KEEP_DAYS90 BACKUP_ROOT/data/backup/samba如果你有多块磁盘建议把BACKUP_ROOT指到与系统盘分离的存储上避免备份集和系统日志抢空间。我遇到过因为/var分区写满导致Samba服务启动失败的事故那一次教训之后我把所有备份输出都挪到了独立挂载点还在脚本里加了一行磁盘剩余空间检查# 检查备份目录剩余空间低于5G则中止 FREE_SPACE$(df --outputavail ${BACKUP_ROOT} | tail -n 1) if [ ${FREE_SPACE} -lt 5242880 ]; then echo 备份目录剩余空间不足已中止 2 exit 1 fi空间阈值按实际备份集大小设这里只是示例你要根据自己数据量来算。5.2 给samba-info加磁盘健康检查原始脚本只收集域控运行状态而域控所在的磁盘健康度同样是故障隐患。我通常会在samba-info.sh末尾追加一段smartctl检查echo 磁盘健康状态 if command -v smartctl /dev/null 21; then disk_name$(df /var/lib/samba | awk NR2 {print $1} | sed s/[0-9]*$//) sudo smartctl -H ${disk_name} 2/dev/null || echo smartctl无法读取磁盘信息 else echo smartctl未安装跳过 fi这段命令的关键点是先用df /var/lib/samba找到数据库所在分区对应的设备路径去掉末尾的数字编号得到整块盘再交给smartctl -H做健康检查。如果系统里没装smartmontools输出一个明示而不会导致脚本中断。这个检查的价值在于提前发现磁盘坏道或SMART状态异常比等读写报错再处理要主动得多。5.3 多域控环境下的批量备份与同步一个域里有多个域控节点时逐台登录去执行脚本非常低效。我的做法是把备份脚本分发到各节点然后在主控节点上用根密钥或者ssh-agent批量执行# backup-all-dcs.sh - 依次备份所有域控 for host in dc1 dc2 dc3; do ssh ${host} /usr/local/sbin/backup-samba.sh if [ $? -eq 0 ]; then echo ${host} 备份完成 else echo ${host} 备份失败 2 fi done$?在Shell里表示上一个命令的退出码这里判断ssh执行的脚本是否返回0。批量脚本执行完后再用samba-tool drs showrepl检查一遍复制拓扑确保备份过程没有影响节点间的数据同步。6. 验证恢复让备份真正可用的关键一步备份做得好不好要看它能恢复到什么程度。我强烈建议每隔一段时间做一次真实的恢复演练不是把tar解压出来看看文件在不在而是完整走一遍恢复启动和认证流程。我自己的演练流程是准备一台与生产环境隔离的测试机装相同版本的Debian和Samba然后把备份集拷贝过去执行restore-samba.sh启动服务后依次做三件验证——samba-tool domain info看数据库是否正常响应用域账号跑一次net ads join验证机器是否还能加入域最后检查Sysvol下GPO的ACL是否和备份前一致保证组策略能正常下发。这个习惯源于一次真实翻车某次生产环境域控宕机我从备份恢复后数据库和Sysvol都正常但客户端加入域时始终报密码错误。查了半天才发现是备份时secrets.tdb没有成功备份机器密钥对不上最后只能重置机器账号所有客户端重新加域白白折腾了两个小时。那次之后我给自己定了一条铁规任何备份脚本改完、任何计划中的恢复演练都必须把secrets.tdb纳入恢复检查项并且每次演练都走一遍完整的客户端认证测试。现在我再拿到任何一套Samba 4备份脚本第一件事就是打开脚本看它有没有处理secrets.tdb而不是看备份文件大小。这套脚本集因为最初就在Debian上跑熟了整体可信度比较高但你还是要在自己环境里完整执行一遍恢复流程再把它纳入正式运维。这是这套脚本值得你拿回去做的第一件事希望帮到你。本文还有配套的精品资源点击获取

相关新闻

C# OpenCVSharp实现USB摄像头H264录像及避坑指南

C# OpenCVSharp实现USB摄像头H264录像及避坑指南

简介:面向C#开发者,该资料包以OpenCVSharp为技术核心,演示如何调用USB摄像头完成视频采集,并通过H264编码器压缩存储。包内含完整的Visual Studio解决方案、C#源码工程、项目配置文件及运行所需依赖库,覆盖从摄像头枚举…

2026/10/14 19:31:46 阅读更多 →
Python列表生成式:从for循环到高性能数据处理的实战指南

Python列表生成式:从for循环到高性能数据处理的实战指南

1. 列表生成式到底解决了什么问题第一次接触列表生成式,很多人会觉得它只是把四行代码压缩成一行的小把戏。我刚开始写Python那会儿也这么想,直到有一次处理一批传感器采集数据,需要从上千条记录里筛出有效值并做单位换算,用传统f…

2026/10/14 19:31:46 阅读更多 →
Spring注解@Import使用

Spring注解@Import使用

文章目录 前言 一、认识@Import注解 二、实操 参考资料 前言 本文是付费专栏 《Java后端开发从入门到进阶》 的配套文章,所属阶段与专题为「阶段四:Java主流框架应用 / 4.1 Spring」。专栏按照「基础 → 工程化 → 主流框架 → 分布式与架构」循序推进,本篇承接前文学习路线…

2026/10/14 19:31:46 阅读更多 →

最新新闻

Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue 笔记写到第七篇,这次不聊基础语法,也不画响应式原理的图解,重点全部放在工程实践里真正卡过人的地方:组件通信方案怎么选、组合式函数怎么拆才不会拆出一堆烂代码、路由守卫的执行顺序为什么老和预期不一样、Pinia 到底管什么…

2026/10/14 22:56:44 阅读更多 →
AI招聘实战:半自动方案如何避免账号风控与提升回复率

AI招聘实战:半自动方案如何避免账号风控与提升回复率

1. 为什么“AI做招聘”这件事,值得认真聊一聊招聘这件事,表面上看是“发岗位、收简历、约面试”三步走,但真正干过的人都知道,它本质上是一个高频沟通、强情绪、重信任的活儿。候选人投完简历之后,心里其实一直在打鼓&…

2026/10/14 22:56:44 阅读更多 →
冷热电联供系统多目标优化调度:MOPSO算法Matlab实现与Pareto前沿分析

冷热电联供系统多目标优化调度:MOPSO算法Matlab实现与Pareto前沿分析

做综合能源系统运行优化这项工作,我接触最多的一条技术线就是冷热电联供(CCHP)。它把天然气发电后的余热回收起来,再通过吸收式制冷和热交换把冷、热、电一块供出去,能量梯级利用效率比单纯发电高不少。但真正落地的时…

2026/10/14 22:56:44 阅读更多 →
AutoTool 实战:如何省下 30% 的 Agent 推理成本

AutoTool 实战:如何省下 30% 的 Agent 推理成本

1. 从 Jev 爆火说起:Agent 效率焦虑到底卡在哪Jev 这类通用 Agent 框架火起来之后,我身边不少做应用落地的朋友都经历了同一个心路历程:Demo 阶段惊艳,接入真实业务之后开始肉疼。疼的不是模型能力不够,而是推理成本和…

2026/10/14 22:56:44 阅读更多 →
2026专科生降AI率工具测评:九款实测与选型指南

2026专科生降AI率工具测评:九款实测与选型指南

每年到了毕业设计季,我都会收到不少专科院校同学的私信,问“我写的文章老是被标记为疑似AI生成,该怎么办”“有没有靠谱的降AI率工具推荐”。我不是学校老师,也不是什么平台官方,就是纯粹在内容创作和论文辅导这行泡了…

2026/10/14 22:56:44 阅读更多 →
原生JS组态软件实战:无后台监控界面的数据格式与架构设计

原生JS组态软件实战:无后台监控界面的数据格式与架构设计

简介:一份基于原生JavaScript实现的组态软件源码包,面向Web前端与工业自动化开发者,用于在无后台依赖环境中通过拖拽方式快速构建电力一次接线图、工业流程图等图形界面。压缩包共1013个文件,约14.4MB,以svg、png、gif…

2026/10/14 22:55:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →