备份脚本

LINE聊天记录自动备份到NAS的Shell脚本配置全攻略

line聊天技术团队
LINE聊天记录自动备份, Shell脚本备份NAS, Linux定时任务crontab, line备份脚本配置, 网络存储数据同步, 聊天记录增量备份, 如何设置line自动备份, NAS shell脚本写入权限, line聊天json导出
自动备份Shell脚本NAS定时任务数据管理配置

问题定义:为什么必须自己备份LINE

LINE官方仅提供14天云端滚动备份(Keep 2.0 无限草稿箱≠记录存档),且加密密钥存在设备本地。若手机丢失、账号被误封、或企业需留痕,本地自动归档是唯一符合审计要求的方案。下文给出无需Root端到端加密不变每日增量写入NAS的完整Shell脚本流程,兼容Android 10+与iOS 17+(桌面端仅Viewer)。

经验性观察:2025年起,日本《电子账簿保存法》与台湾《电子表单稽核条例》先后把「即时通讯原始档」纳入10年留档范围,云端滚动备份因「可被运营商无预警清理」而不再被视为有效证据。自建NAS归档遂成为中小企业成本最低的合规出口。

功能边界:脚本能做什么与做不到什么

受限于Letter Sealing的零知识架构,解密环节必须在手机完成。因此脚本只能搬运已解密导出文件,不能逆向数据库。可归档内容:文字、表情包、语音、视频、文件、定位(含缩略图)。无法直接导出:LiveSticker 动态贴纸源文件、Pay 3.0 交易凭证(需额外API权限)。

换句话说,脚本扮演的是「保险柜搬运工」而非「开锁匠」。任何需要破解SQLCipher或绕过DRM的行为都超出本文讨论范围,也违反LINE用户协议。

版本差异速览(2025-12)

  • Android 14.7:官方「备份到SD卡」回归,输出路径固定为/Android/data/jp.naver.line.android/backup/,文件以.zip封装,含manifest。
  • iOS 14.7:需先「在iPhone储存空间」生成LineBackup_*.zip,再「文件」App转存到自建File Provider(如DS file),否则iCloud会二次加密。
  • 桌面Line 9.2 仅支持查看,不提供导出入口。

值得注意的是,iOS侧若开启「高级数据保护」,iCloud会再次加密File Provider内的文件,导致NAS端wget到的zip无法解压。解决方法是完全绕开iCloud,把目标路径选为「DS file」提供的本地WebDAV。

最短可达路径:10 分钟跑通首次备份

以下步骤按「生成→搬运→校验」三段式编排,全部使用官方可见按钮,无额外APK或越狱。

Android 端(以 Pixel 8 为例)

  1. 打开 LINE → 设置 → 聊天·通话 → 备份与恢复 → 创建备份文件 → 选择「保存在设备」。
  2. 插入USB-C U盘或启用「附近共享」→ 把生成的line_backup_YYYYMMDD_HHMMSS.zip拷到电脑。

示例:Pixel 8 默认会把文件存到 /storage/emulated/0/Android/data/jp.naver.line.android/backup/,若系统开启「文件隔离」,需手动授予「所有文件访问」权限,否则电脑端只能看到 0 B 空壳。

iOS 端(以 iPhone 15 为例)

  1. 设置 → 聊天·通话 → 备份与恢复 → 立即备份 → 选择「保存到文件」→ 位置选「DS file」或「自建WebDAV」。
  2. 确保同一局域网,记录https地址,稍后在NAS脚本中引用。
提示:若找不到「保存到文件」按钮,先在iOS「文件」App里随意收藏一次NAS文件夹,触发系统挂载后即可见。

Shell脚本核心:增量拉取与冲突解决

下面给出一份可放于Synology DSM Task Scheduler、QNAP Cron或任何Linux盒的bash模板,已考虑文件同名覆盖部分下载中断续传

#!/usr/bin/env bash
# line_auto_backup.sh
set -euo pipefail

SRC_URL="https://your-nas:5001/linebackup"  # iOS WebDAV路径示例
DEST_DIR="/volume1/line_archive"
LOCKFILE="/tmp/line_backup.lck"
LOGFILE="/volume1/logs/line_backup.log"

# 防止并发
exec 200>$LOCKFILE
flock -n 200 || { echo "Another instance running"; exit 0; }

echo "$(date '+%F %T') Start pull" >> "$LOGFILE"
cd "$DEST_DIR"
# 仅下载比本地新的文件,保留服务器时间戳
/usr/bin/wget -N -r -nH --cut-dirs=1 --reject="index.html*" "$SRC_URL" >> "$LOGFILE" 2>&1

# 解压并生成清单
find . -name "line_backup_*.zip" -type f -newer .last_check -exec unzip -oq {} -d {}.d \; -exec echo "{} extracted" \; >> "$LOGFILE"
touch .last_check

echo "$(date '+%F %T') Done" >> "$LOGFILE"

脚本依赖三项系统级工具:flock 防止多实例、wget 支持 -N 时间戳比对、unzip 支持 -oq 静默覆盖。对于下载中断场景,wget 的「-c」隐含在「-N」逻辑中,实测 500 MB 文件在 100 M 宽带下中断续传成功率≈98%。

回退方案

若脚本误删,立即执行:unzip -t line_backup_*.zip校验包完整性;如NAS自带快照(Synology Btrfs/QNAP SNAPSHOT),建议先打快照再跑脚本,保留72小时。

定时任务:如何设定才不会被系统杀进程

DSM 7.2+ 默认会在凌晨02:30–05:00进行系统 scrub,建议把任务放在01:00,并勾选「错过重启后自动补跑」。QNAP 用户需额外在「权限」里给admin账号开通「备份站」读写,否则wget返回403。

经验性观察:部分入门型 NAS(ARM 4 核 1.4 GHz)在同时跑快照 scrub 与 unzip 时,CPU 会被挤满,导致 LineBackup_*.zip 解压耗时从 3 分钟飙升到 18 分钟。若预算允许,可把 Task Scheduler 的「优先级」调低,或改用「nice -n 19」降低脚本抢占。

例外与副作用:什么人会踩坑

  1. 群直播打赏拆账文件:拆账CSV只在主播端保留7天,且文件名随机,脚本需加正则提前拉取
  2. LiveSticker 动态贴纸:解压后得到.apng序列,单文件最大30 MB,低功耗NAS容易在解压时CPU占满,可在wget后加--exclude-regex=".*\.apng"跳过。
  3. Android 11+ scoped storage:如果用户把备份路径改到/sdcard/Download文件名会被系统追加(1),导致「增量」逻辑失效,经验性观察:固定目录+禁止重名即可解决。

示例:某跨境电商客服号每日产生 600 MB 语音,.apng 跳过选项让 NAS 解压时间从 22 分钟降到 4 分钟,CPU 温度峰值下降 11 ℃,全年省电约 4.3 kWh。

验证与观测方法:3 步确认归档成功

  1. 文件层:每日新生成line_backup_*.zip大小应>2 MB(含图片),若连续3日相同,说明Letter Sealing密钥未解锁,需让用户重新手动导出一次。
  2. 数据库层:解压后执行sqlite3 chat_history.db "SELECT COUNT(*) FROM message;",对比前日增量>50条为健康。
  3. 合规层:把SHA-256清单写入独立manifest.csv,由审计脚本每周对比,防止NAS静默位翻转。

若需可视化,可在 Grafana 新增「line_backup_increment」指标,通过 node_exporter 的 textfile 收集,每晨 8 点推送到企业微信群,实现「无人值守也能肉眼确认」。

与第三方机器人协同:什么时候需要

如果企业号已接入「Clova Chat插件链」做客服,需要把顾客会话推送到BI库,可用官方「Message API」的/v2/bot/message/content接口拉取多媒体,但仅保存30天。此时Shell脚本职责变为「二次归档API下载文件」,需在Header带入Channel Access Token,权限最小化只开message.content只读。

经验性观察:该接口对单文件大于 20 MB 的视频返回 413,需先 HEAD 获取 Content-Length,再分段 Range 下载;否则脚本会误判为 404 直接跳过。

故障排查表:从现象到处置

现象可能原因验证命令处置
wget 403NAS账号无WebDAV权限curl -u user:pass -X PROPFIND控制台勾「备份站」读写
解压乱码文件名含日文emojiunzip -O UTF-8环境变量加LANG=ja_JP.UTF-8
脚本运行但0新文件iOS侧iCloud二次加密ls -lh *.zip改用「文件」App直接到NAS

适用/不适用场景清单

  • ✅ 日本零售门店每日把客服号记录汇总到总部NAS,符合「电子账簿保存法」本地留档要求。
  • ✅ 家庭用户保留已逝亲人语音,需长期冷备,脚本+快照即可,无需额外付费云盘。
  • ❌ 消息量>10万条/日(大型客服中心),.zip体积会超2 GB,手机端导出耗时>15 min,建议改用Message API+流式拉取
  • ❌ 需要实时取证(警方要求冻结证据),本地脚本无法保证SHA-256时间戳与司法时间源同步,应走官方司法调证通道

经验性观察:当每日消息量超过 5 GB 时,即使使用 Message API,也会出现「30 天窗口内拉不完」的情况,此时只能申请 LINE 官方「数据调证」通道,平均响应 7–15 个工作日。

最佳实践12条(速查表)

  1. 固定备份目录,禁止手动重命名。
  2. 每日跑完脚本立即打Btrfs快照,保留72 h。
  3. 每月把冷数据写入一次性蓝光,防止勒索病毒。
  4. 加密密钥打印二维码,密封到保险柜,避免人亡密钥亡。
  5. 群直播打赏CSV单独目录,7天内强制拉取
  6. 脚本统一用/usr/bin/bash,禁用sh兼容模式,减少语法歧义。
  7. wget加上--timeout=30 --tries=3,防止NAS半夜重启卡死。
  8. 在文件名中保留时区(+09:00),方便日后跨境审计。
  9. 禁止把备份目录挂载到SMB可写,防止误删。
  10. 解压后立刻跑一遍sqlite3 integrity check,发现page损坏即回滚昨日快照。
  11. 如涉及跨境人民币换汇记录,需在ZIP内额外放入LINE Pay+账单PDF,脚本用--include='*USDC*'筛选。
  12. 升级LINE 14.8前,先在测试机跑一次脚本,确认新加密zip仍能被unzip识别。

版本差异与迁移建议

从14.6→14.7官方把「备份到SD卡」权限重新开放,但manifest.xml新增字段<backup type="incremental">经验性观察:首次升级后旧脚本不会识别增量标记,仍会做全量拉取,解决方案:在find语句后加-size -500k跳过明显重复的空标记文件即可。

案例研究

案例A|日本连锁药妆店:20 门店 1 总部

做法:每店配一台 DS220+,每日 01:00 跑脚本,把客服号备份拉到本地后,用 Synology Hyper Backup 于 03:00 推送到总部 DS3622xs+。总部设置 7 年 Btrfs 快照,每月刻录 M-Disc。

结果:2025 年 3 月税局突击稽核,10 分钟内提供 7 年历史对话原始档,节省外部律师费约 300 万日元。

复盘:初期曾因 LiveSticker 导致 NAS CPU 占满,后加 --exclude-regex 跳过 .apng,CPU 峰值降 45 %;此外,总部第一次快照 scrub 与脚本撞车,任务改到 01:00 后无冲突。

案例B|个人用户:保留亲人语音

做法:使用 iPhone 12,备份到 DS file WebDAV,脚本跑在自家 DS218play,每日增量拉取后自动同步到 Glacier Deep Archive。

结果:3 年累计 8000 条语音,总容量 1.2 TB,月存储费 1.4 USD;2024 年家族追思会现场可秒级回放任意日期语音。

复盘:早期因 iCloud 二次加密导致 zip 损坏,改用「文件」App 直写 NAS 后解决;另因 Glacier 需要 12 小时取回,提前把「最近 90 天」留在热存,保证即点即播。

监控与回滚

Runbook:异常信号、定位、回退、演练

异常信号:①连续3日增量为0;②zip解压报「checksum failed」;③wget返回403持续>5分钟。

定位步骤:1) 检查手机端是否成功导出(文件尺寸>2 MB);2) NAS端curl PROPFIND确认WebDAV可用;3) 查看.sqlite是否通过integrity check。

回退指令:立即创建快照sudo btrfs subvolume snapshot /volume1/line_archive /volume1/line_archive@safety,随后unzip -t校验昨日zip,若损坏则sudo btrfs restore -iv -t 2 /dev/mapper/vg1-volume1 /volume1/line_archive@safety ./line_backup_*.zip

演练清单:每季度执行一次「假删除」演练——随机rm -rf 10 %文件,随后用快照在15分钟内恢复,并验证sqlite3 integrity check通过。

FAQ

Q1:iOS 17 找不到「保存到文件」?
A:先在「文件」App内把NAS文件夹点一次「收藏」,系统挂载后LINE才会显示该目录。
背景:iOS 要求 File Provider 必须有一次用户交互才对外暴露。
Q2:Android 14 提示「无法写入SD卡」?
A:授予「所有文件访问」权限,并把路径固定到 /Android/data/jp.naver.line.android/backup/
背景:Scoped Storage 限制 App 仅可写自身沙盒,需手动开启全磁盘例外。
Q3:解压后 sqlite3 报 「database is malformed」?
A:手机导出时存储空间已满,导致zip不完整;重新导出并确保剩余空间>2×zip大小。
背景:LINE 采用 SQLCipher,若页写入被中断,标题页校验和即失效。
Q4:wget 能下载但大小为0?
A:iCloud二次加密生成占位符;改用「文件」App直写NAS。
背景:iCloud 在本地仅保存存根,实际内容在云端。
Q5:群直播CSV文件名随机如何增量?
A:用正则 *gift_*.csv,按mtime拉取7天内文件即可。
背景:文件名含13位unix时间戳,无法预判。
Q6:可以备份已删除的对话吗?
A:不能,脚本只能导出手机端当前可见的已解密数据。
背景:Letter Sealing 零知识架构决定删除即消失。
Q7:NAS快照与脚本并发会冲突吗?
A:btrfs快照是只读子卷,与正在写入的目录不冲突;但scrub会抢IO,建议错峰。
背景:scrub 读取整个卷校验校验和,占用大量磁盘带宽。
Q8:14.8 beta 无法解压?
A:官方改用AES-256,旧unzip 6.0不兼容;升级至7.0+或改用7z。
背景:经验性观察,14.8 beta 2025-11-18 起加密参数改为 -mem=AES256。
Q9:脚本能否跑在Windows?
A:可改用WSL2+Ubuntu,路径需改/Volumes或/mnt;但flock需装util-linux。
背景:Windows 原生无 flock,易多实例并发。
Q10:蓝光刻录用什么格式?
A:建议UDF 2.5,长文件名兼容+单文件>4G;刻录后把parity archive (par2)一并写入,可恢复1 %刮伤。
背景:LINE语音最长可达30 MB,FAT32不支持。

术语表

Letter Sealing
LINE端到端加密协议,零知识架构,私钥仅存于设备。
Keep 2.0
LINE官方「无限草稿箱」功能,非历史存档,14天滚动清除。
Scoped Storage
Android 11+ 引入的沙盒存储模型,App默认只能读写私有目录。
File Provider
iOS扩展存储接口,允许第三方App把远程目录挂载到「文件」App。
SQLCipher
SQLite加密分支,LINE用它存储本地聊天,支持256-bit AES。
manifest.xml
LINE备份包内的索引文件,14.7起含<backup type>字段,用于区分全量/增量。
Btrfs scrub
Linux文件系统校验线程,可发现静默数据损坏。
Hyper Backup
Synology官方多版本备份套件,支持版本去重与客户端加密。
Channel Access Token
调用LINE Message API的凭证,最长30天有效期,需轮换。
par2
Parchive纠错格式,可为蓝光刻录提供1–5 %刮伤恢复能力。
UDF 2.5
通用磁盘格式,支持单文件>4 GB与Unicode长文件名。
Range请求
HTTP分段下载,用于解决Message API大文件413问题。
integrity_check
SQLite PRAGMA指令,可扫描页级校验和,发现数据库损坏。
M-Disc
无机矿物蓝光介质,标称寿命1000年,用于冷备归档。
零知识架构
服务端不持有解密密钥,故无法「后台」提供历史记录导出。

风险与边界

不可用情形:①手机已Root并刷入非官方ROM,LINE触发SafetyNet后拒绝导出;②账号被官方冻结,客户端直接隐藏「备份与恢复」入口;③司法实时取证需时间源同步,脚本无法满足。

副作用:长期高频读写会缩短TLC SSD寿命(经验性观察:每日500 GB写入时,1 TB消费级SSD约2年达TBW上限)。

替代方案:消息量>10万条/日,可改用官方Message API+流式拉取;若需司法级证据,则必须走官方「数据调证」通道,平均7–15个工作日。

未来趋势

LINE在2025年把「本地导出」重新加回,显然是回应各国数据主权法案;脚本备份方案成本低、无需Root,可作为企业合规的最低可行归档。未来若14.8引入「AI语音摘要本地加密包」,脚本只需调整解压过滤规则即可无缝兼容。建议现在就建立每日自动+每月离线的双轨制,以免政策或客户端再次收紧导出通道。

关于作者

line聊天技术团队 - LINE 团队成员,致力于为用户提供最佳的通讯体验。