在开始搭建之前,我们需要准备一台安装了Ubuntu 22.04 LTS操作系统的服务器。为了确保档案数据的存储安全和处理效率,建议硬盘空间至少为1TB,并配置4GB以上的内存。本方案将采用Samba提供文件共享服务,利用Rsync配合硬链接实现增量快照备份,并集成Tesseract-OCR进行档案内容的自动识别。
执行以下命令更新系统源并安装核心依赖包。这些软件涵盖了文件共享、同步工具、文件监控以及中文OCR识别引擎。
```bash sudo apt update && sudo apt upgrade -y sudo apt install -y samba rsync inotify-tools tesseract-ocr tesseract-ocr-chi-sim ```注意:tesseract-ocr-chi-sim是简体中文语言包,如果不安装此包,OCR功能将无法正确识别中文档案。安装完成后,使用以下命令验证OCR引擎是否就绪:
```bash tesseract --version ```为了让办公区的电脑能够方便地上传档案文件,我们需要配置Samba服务。首先创建用于存储原始档案和备份的目录结构。
```bash sudo mkdir -p /data/archives/source sudo mkdir -p /data/archives/backup sudo mkdir -p /data/archives/processed ```接下来,配置Samba。使用文本编辑器打开配置文件:
```bash sudo vim /etc/samba/smb.conf ```在文件末尾添加以下配置。这里我们将创建一个名为“Archives”的共享目录,并设置强制用户映射,以确保上传的文件权限可控,避免后续脚本因权限不足无法处理文件。
```ini [Archives] comment = 档案数字化备份接收点 path = /data/archives/source browseable = yes read only = no create mask = 0664 directory mask = 0775 valid users = archive_admin force user = root ```保存并退出后,创建Samba访问用户并设置密码。请将“your_password”替换为实际的高强度密码:
```bash sudo useradd -M -s /usr/sbin/nologin archive_admin sudo smbpasswd -a archive_admin 输入两次密码 ```重启Samba服务使配置生效:
```bash sudo systemctl restart smbd nmbd ```传统的备份方式每次都复制所有文件,极其浪费空间和时间。我们将使用Rsync配合cp命令的硬链接特性,实现类似苹果Time Machine的增量快照效果。这意味着,如果一份100MB的档案没有修改,第二次备份只占用几KB的索引空间。
创建备份脚本文件:
```bash sudo vim /usr/local/bin/archive_backup.sh ```写入以下完整脚本逻辑。请仔细阅读注释,理解每一步操作的目的:
```bash !/bin/bash 定义源目录和备份根目录 SOURCE_DIR="/data/archives/source" BACKUP_ROOT="/data/archives/backup" 保留最近30天的备份 RETENTION_DAYS=30 获取当前日期和时间作为快照文件夹名称 DATE_TAG=$(date +%Y-%m-%d_%H-%M) CURRENT_BACKUP="$BACKUP_ROOT/$DATE_TAG" 获取上一次备份的目录路径(用于创建硬链接) LATEST_BACKUP=$(ls -1td $BACKUP_ROOT// 2>/dev/null | head -n 1) echo "开始备份: $DATE_TAG" 1. 创建新的快照目录 mkdir -p "$CURRENT_BACKUP" 2. 执行rsync同步 --link-dest: 如果文件在LATEST_BACKUP中存在且未变化,则创建硬链接而非复制 -a: 归档模式,保留权限、时间戳等 --delete: 删除源目录中已不存在的文件 if [ -n "$LATEST_BACKUP" ]; then rsync -av --delete --link-dest="$LATEST_BACKUP" "$SOURCE_DIR/" "$CURRENT_BACKUP/" else 第一次全量备份 rsync -av --delete "$SOURCE_DIR/" "$CURRENT_BACKUP/" fi echo "备份完成: $CURRENT_BACKUP" 3. 清理旧备份 查找并删除超过保留天数的目录 find "$BACKUP_ROOT" -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; echo "旧备份清理完成" ```赋予脚本执行权限:
```bash sudo chmod +x /usr/local/bin/archive_backup.sh ``>档案数字化不仅仅是存储图片,还需要提取文字内容以便检索。我们将编写一个基于inotifywait的监控脚本,一旦有新文件上传到Samba目录,自动调用Tesseract进行识别,并将结果保存为同名的TXT文件。
创建OCR处理脚本:
```bash sudo vim /usr/local/bin/ocr_watchdog.sh ```
写入以下代码。该脚本会持续监控源目录,针对常见的图片格式(jpg, png, tif)进行异步处理:
```bash !/bin/bash WATCH_DIR="/data/archives/source" PROCESSED_DIR="/data/archives/processed" 确保处理目录存在 mkdir -p "$PROCESSED_DIR" 启动监控 -m: 监控模式 -r: 递归监控子目录 -e: 监控关闭写入事件(即文件上传完成) --format: 输出文件路径 inotifywait -m -r -e close_write --format '%w%f' "$WATCH_DIR" | while read FILE do 获取文件扩展名并转为小写 EXT="${FILE.}" EXT=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') 判断是否为图片文件 if [[ "$EXT" == "jpg" || "$EXT" == "jpeg" || "$EXT" == "png" || "$EXT" == "tif" || "$EXT" == "tiff" ]]; then echo "检测到新文件: $FILE, 开始OCR识别..." 定义输出文件名 OUTPUT_TXT="${FILE%.}.txt" 执行OCR识别 -l chi_sim: 指定简体中文库 tesseract "$FILE" "$OUTPUT_TXT" -l chi_sim if [ $? -eq 0 ]; then echo "识别成功: $OUTPUT_TXT" 可选:将识别后的文件移动到已处理目录,避免重复处理 mv "$FILE" "$PROCESSED_DIR/" mv "$OUTPUT_TXT" "$PROCESSED_DIR/" else echo "识别失败: $FILE" fi fi done ```赋予执行权限:
```bash sudo chmod +x /usr/local/bin/ocr_watchdog.sh ```为了确保服务在服务器重启后自动运行,我们需要配置Crontab定时任务和Systemd守护进程。
配置Systemd服务来管理OCR监控脚本,保证其崩溃后能自动重启。创建服务文件:
```bash sudo vim /etc/systemd/system/ocr-monitor.service ```写入以下配置:
```ini [Unit] Description=Archive OCR Watchdog Service After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/ocr_watchdog.sh Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target ```启动并开启自启:
```bash sudo systemctl daemon-reload sudo systemctl enable ocr-monitor.service sudo systemctl start ocr-monitor.service ```接下来,配置Crontab实现每日凌晨2点自动执行备份脚本。编辑crонтab:
```bash sudo crontab -e ```在文件末尾添加以下行:
```bash 0 2 /usr/local/bin/archive_backup.sh >> /var/log/archive_backup.log 2>&1 ```至此,所有服务已部署完毕。我们需要进行最后的验证。在Windows电脑上,访问“\\<服务器IP>\Archives”,输入Samba账号密码。尝试上传一张包含文字的照片(如扫描件)。
1. OCR验证:观察服务器终端或稍等片刻,在Samba源目录中应该会生成一个同名的.txt文件,打开查看内容是否与图片文字一致。
2. 备份验证:手动执行一次备份脚本 `/usr/local/bin/archive_backup.sh`。检查 `/data/archives/backup` 目录下是否生成了以当前时间命名的文件夹,且里面的文件硬链接数正常(使用 `ls -lh` 查看)。
日常维护中,主要通过查看日志来确认状态。查看OCR服务状态:
```bash sudo systemctl status ocr-monitor.service ```查看备份日志:
```bash tail -f /var/log/archive_backup.log ```通过这套方案,您实际上构建了一个具备文件接收、自动内容提取(数字化)以及时间点快照恢复能力(备份)的完整档案系统,且完全基于开源软件构建,无任何授权成本。