基础操作参数
1. 基本命令格式
# 基本语法:rclone [options] command [source:]path [dest:]path [flags] # 示例 1: 列出远程存储内容 rclone ls remote:bucket/path # 参数说明: # ls - 列出文件(包含大小) # lsl - 列出文件(包含修改时间) # lsd - 只列出目录 # lsf - 简单列表(适合脚本处理) # 示例 2: 查看目录结构 rclone tree remote:bucket --depth 3 --full-path # 输出: # bucket/ # └── path/ # ├── folder1/ # │ ├── file1.txt (10 MB) # │ └── file2.jpg (5 MB) # └── folder2/ # └── file3.pdf (2 MB) # 示例 3: 查看文件/目录大小 rclone size remote:bucket --json # 输出: # { # "count": 1250, # "bytes": 53687091200, # "sizes": { ... } # }
2. 常用操作命令
# 复制文件/目录 rclone copy source:path dest:path [flags] # 示例: rclone copy sds3:mybucket/data/ hws3:backup/data/ --progress # 同步目录(使目标与源一致) rclone sync source:path dest:path [flags] # 注意:sync 会删除目标端多余的文件! # 移动文件(复制后删除源) rclone move source:path dest:path [flags] # 删除文件 rclone delete remote:path rclone purge remote:path # 删除目录及其所有内容 # 创建目录 rclone mkdir remote:path rclone mkdir remote:bucket/newfolder # 检查文件是否存在 rclone check source:path dest:path rclone check sds3:bucket hws3:bucket --size-only
性能优化参数
1. 传输并发控制
# 设置同时传输的文件数 rclone copy source: dest: --transfers 16 # 推荐值: # - 小文件(100KB-1MB): 16-32 # - 中文件(1-100MB): 8-16 # - 大文件(100MB+): 4-8 # 设置检查线程数(用于统计、比较等) rclone copy source: dest: --checkers 32 # checkers 通常可以设高一些,如32-64 # 控制缓冲区大小 rclone copy source: dest: --buffer-size 64M rclone copy source: dest: --multi-thread-cutoff 64M rclone copy source: dest: --multi-thread-streams 4 # 对于大文件传输,多线程可以显著提高速度
2. 带宽与限速控制
# 限制带宽使用 rclone copy source: dest: --bwlimit "08:00,1M 12:00,10M 23:00,off" # 格式解释: # 08:00,1M - 8点到12点限制1MB/s # 12:00,10M - 12点到23点限制10MB/s # 23:00,off - 23点到8点不限制 # 简单带宽限制 rclone copy source: dest: --bwlimit 10M # 限制10MB/s rclone copy source: dest: --bwlimit 500k # 限制500KB/s # 自适应带宽限制 rclone copy source: dest: --bwlimit 0.5M # 限制0.5MB/s rclone copy source: dest: --bwlimit 10% # 限制可用带宽的10%
3. 内存与缓存优化
# 控制分块大小 rclone copy source: dest: --s3-chunk-size 64M rclone copy source: dest: --s3-upload-cutoff 64M # 对于大文件优化: # - chunk-size: 16-256M # - upload-cutoff: 16-256M # 内存缓存设置 rclone copy source: dest: --cache-chunk-size 10M rclone copy source: dest: --cache-chunk-total-size 1G # 适用于需要频繁访问的文件 # 限制内存使用 rclone copy source: dest: --max-backlog 10000 rclone copy source: dest: --max-depth 10
过滤与排除参数
1. 文件过滤规则
# 排除特定文件类型 rclone copy source: dest: \ --exclude "*.tmp" \ --exclude "*.log" \ --exclude "*.swp" # 包含特定文件类型 rclone copy source: dest: \ --include "*.jpg" \ --include "*.png" \ --exclude "*" # 按大小过滤 rclone copy source: dest: \ --min-size 1M \ # 最小1MB --max-size 100M # 最大100MB # 按时间过滤 rclone copy source: dest: \ --min-age 7d \ # 7天前的文件 --max-age 30d \ # 30天内的文件 --max-age 3h \ # 3小时内的文件 --min-age 1h30m # 1小时30分钟前的文件
2. 复杂过滤模式
# 使用过滤文件 rclone copy source: dest: --filter-from filter-rules.txt # filter-rules.txt 内容示例: # - *.jpg # + 2024-*/** # - /exclude-this-folder/** # + /include-this-folder/** # 正则表达式过滤 rclone copy source: dest: \ --exclude-regex ".*\.(tmp|log|swp)$" \ --include-regex "^2024-.*\.(jpg|png)$" # 排除空目录 rclone copy source: dest: --create-empty-src-dirs=false # 排除符号链接 rclone copy source: dest: --copy-links=false
日志与调试参数
1. 进度显示参数
# 显示详细进度 rclone copy source: dest: --progress # 输出: # Transferred: 2.351 GiB / 50.000 GiB, 5%, 15.123 MiB/s, ETA 53m12s # Checks: 1250 / 1250, 100% # Transferred: 850 / 1250, 68% # Elapsed time: 2m30.4s # 单行进度显示 rclone copy source: dest: --stats-one-line # 输出: # 2024/01/15 14:30:15 INFO : ...progress: 27% done, 12.345 MB/s, 1h23m45s remaining # 自定义统计间隔 rclone copy source: dest: --stats 30s # 每30秒显示统计 rclone copy source: dest: --stats 1m # 每1分钟显示统计 rclone copy source: dest: --stats 0 # 禁用统计显示 # 显示传输速率 rclone copy source: dest: --stats-file-name-length 50 rclone copy source: dest: --stats-unit bits # 以比特为单位显示
2. 日志记录参数
# 记录到日志文件 rclone copy source: dest: \ --log-file=rclone.log \ --log-level INFO \ --use-json-log # 日志级别选项: # DEBUG, INFO, NOTICE, ERROR rclone copy source: dest: --log-level DEBUG # 最详细 rclone copy source: dest: --log-level INFO # 默认级别 rclone copy source: dest: --log-level ERROR # 只记录错误 # JSON格式日志 rclone copy source: dest: --use-json-log # 输出示例: # {"level":"info","msg":"file.txt: Copied (new)","source":"...","time":"2024-01-15T14:30:15Z"} # 详细调试输出 rclone copy source: dest: --dump flags rclone copy source: dest: --dump bodies # 输出HTTP请求/响应体(谨慎使用) rclone copy source: dest: --dump headers # 输出HTTP头部 rclone copy source: dest: --dump auth # 输出认证信息
网络与连接参数
1. 超时与重试设置
# 连接超时设置 rclone copy source: dest: \ --timeout 5m \ # 全局超时5分钟 --contimeout 30s \ # 连接超时30秒 --timeout 2h # 总超时2小时 # 重试策略 rclone copy source: dest: \ --retries 5 \ # 最大重试次数 --retries-sleep 10s \ # 重试间隔 --low-level-retries 10 # 低级重试(单个请求) # 限速重试 rclone copy source: dest: \ --retries 10 \ --retries-sleep 1s \ --multi-thread-retries 3
2. 代理与网络配置
# 使用代理服务器 rclone copy source: dest: \ --proxy http://proxy.example.com:8080 \ --proxy-auth username:password # SOCKS5代理 rclone copy source: dest: \ --socks5 socks5://user:pass@host:1080 # 绑定特定IP rclone copy source: dest: --bind 192.168.1.100 # 设置DNS服务器 rclone copy source: dest: --dns-servers "8.8.8.8,1.1.1.1" # 禁用TLS验证(仅测试用) rclone copy source: dest: --no-check-certificate
3. HTTP参数调整
# HTTP客户端设置 rclone copy source: dest: \ --user-agent "rclone/1.63" \ --header "X-Custom-Header: value" \ --header-upload "Content-Type: application/octet-stream" # 连接池设置 rclone copy source: dest: \ --expect-continue-timeout 2s \ --disable-http-keep-alives \ --max-upload-parts 10000 # 上传下载参数 rclone copy source: dest: \ --s3-upload-concurrency 4 \ --s3-no-head-object
同步与比较参数
1. 验证与检查
# 检查文件一致性 rclone check source: dest: --size-only rclone check source: dest: --md5sum rclone check source: dest: --sha1sum # 区别: # --size-only: 只比较大小 # --md5sum: 比较MD5(需要源支持) # --sha1sum: 比较SHA1(需要源支持) # 列出差异 rclone check source: dest: --differ --missing-on-dest --missing-on-source # 输出示例: # 2024/01/15 14:30:15 NOTICE: file1.txt: differ # 2024/01/15 14:30:15 NOTICE: file2.txt: missing on dest # 生成校验和文件 rclone md5sum remote:path --output-file checksums.md5 rclone sha1sum remote:path --base64
2. 同步模式控制
# 安全同步(不删除文件) rclone sync source: dest: --dry-run # 模拟运行,不实际操作 rclone sync source: dest: --interactive # 交互式确认 # 强制同步 rclone sync source: dest: --delete-during # 边复制边删除 rclone sync source: dest: --delete-after # 复制完成后删除(默认) rclone sync source: dest: --delete-before # 先删除再复制 # 备份模式同步 rclone sync source: dest: \ --backup-dir dest:backup/$(date +%Y%m%d) \ --suffix .$(date +%Y%m%d%H%M%S) # 效果: # 1. 被覆盖的文件会移动到 backup-dir # 2. 重名文件会添加后缀
实用脚本示例
1. 批量迁移脚本模板
#!/bin/bash # migration_template.sh - Rclone 批量迁移模板 set -e # 遇到错误立即退出 # 配置参数 SOURCE_REMOTE="sds3" DEST_REMOTE="hws3" LOG_DIR="./logs" BACKUP_DIR="./backup" DATE=$(date +%Y%m%d_%H%M%S) # 创建目录 mkdir -p "$LOG_DIR" "$BACKUP_DIR" # 通用参数 COMMON_PARAMS=" --transfers 16 --checkers 32 --stats 30s --progress --retries 5 --retries-sleep 10s --timeout 1h --log-level INFO --log-file $LOG_DIR/migration_${DATE}.log " # 排除规则 EXCLUDE_PARAMS=" --exclude *.tmp --exclude *.log --exclude .DS_Store --exclude Thumbs.db --exclude ._* --exclude .~* " # 执行迁移函数 migrate_bucket() { local source_bucket=$1 local dest_bucket=$2 local description=$3 echo "开始迁移: $description" echo "源: $SOURCE_REMOTE:$source_bucket" echo "目标: $DEST_REMOTE:$dest_bucket" # 首先进行dry-run检查 echo "正在检查差异..." rclone check "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \ --size-only \ --one-way \ --differ \ --missing-on-dest \ --combined "$LOG_DIR/diff_${DATE}.log" # 确认是否继续 read -p "是否继续执行迁移?(y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "迁移已取消" exit 1 fi # 执行迁移 echo "开始执行迁移..." rclone copy "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \ $COMMON_PARAMS \ $EXCLUDE_PARAMS \ --backup-dir "$DEST_REMOTE:backup/${DATE}" \ --suffix ".bak_${DATE}" # 验证迁移结果 echo "验证迁移结果..." rclone check "$SOURCE_REMOTE:$source_bucket" "$DEST_REMOTE:$dest_bucket" \ --size-only \ --one-way \ --differ \ --missing-on-dest \ --combined "$LOG_DIR/verify_${DATE}.log" echo "迁移完成: $description" } # 使用示例 migrate_bucket "source-bucket" "dest-bucket" "生产数据迁移"
2. 监控与报告脚本
#!/bin/bash # monitor_and_report.sh - 迁移监控与报告 # 参数配置 SOURCE="sds3:bucket" DEST="hws3:bucket" REPORT_FILE="migration_report_$(date +%Y%m%d).html" # 生成HTML报告 generate_html_report() { cat > "$REPORT_FILE" << EOF <!DOCTYPE html> <html> <head> <title>Rclone 迁移报告</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } .header { background: #f0f0f0; padding: 20px; border-radius: 5px; } .stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin: 20px 0; } .stat-card { border: 1px solid #ddd; padding: 15px; border-radius: 5px; } .success { color: green; } .warning { color: orange; } .error { color: red; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } </style> </head> <body> <div class="header"> <h1>Rclone 迁移报告</h1> <p>生成时间: $(date)</p> </div> EOF # 获取统计信息 local source_stats=$(rclone size "$SOURCE" --json 2>/dev/null || echo '{}') local dest_stats=$(rclone size "$DEST" --json 2>/dev/null || echo '{}') cat >> "$REPORT_FILE" << EOF <div class="stats"> <div class="stat-card"> <h3>源端统计</h3> <p>文件数: $(echo "$source_stats" | jq -r '.count // 0')</p> <p>总大小: $(echo "$source_stats" | jq -r '.bytes // 0 | . / 1024/1024/1024 | round') GB</p> </div> <div class="stat-card"> <h3>目标端统计</h3> <p>文件数: $(echo "$dest_stats" | jq -r '.count // 0')</p> <p>总大小: $(echo "$dest_stats" | jq -r '.bytes // 0 | . / 1024/1024/1024 | round') GB</p> </div> </div> EOF # 检查差异 echo "<h3>文件差异检查</h3>" >> "$REPORT_FILE" echo "<table>" >> "$REPORT_FILE" echo "<tr><th>状态</th><th>文件路径</th><th>大小</th></tr>" >> "$REPORT_FILE" # 使用rclone check获取差异 rclone check "$SOURCE" "$DEST" --size-only --combined /tmp/diff.log 2>/dev/null while IFS= read -r line; do if [[ "$line" == *"differ"* ]]; then echo "<tr class='warning'><td>差异</td><td>${line#* }</td><td>-</td></tr>" >> "$REPORT_FILE" elif [[ "$line" == *"missing on dest"* ]]; then echo "<tr class='error'><td>缺失</td><td>${line#* }</td><td>-</td></tr>" >> "$REPORT_FILE" fi done < /tmp/diff.log echo "</table>" >> "$REPORT_FILE" echo "</body></html>" >> "$REPORT_FILE" echo "报告已生成: $REPORT_FILE" } # 执行监控循环 monitor_loop() { while true; do clear echo "=== Rclone 迁移监控 ===" echo "时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" # 显示源端统计 echo "源端 ($SOURCE):" rclone size "$SOURCE" --human-readable 2>/dev/null || echo "无法访问" echo "" # 显示目标端统计 echo "目标端 ($DEST):" rclone size "$DEST" --human-readable 2>/dev/null || echo "无法访问" echo "" # 显示传输进度(如果有进行中的传输) echo "最近活动:" tail -5 logs/*.log 2>/dev/null | grep -E "(Transferred|Checks|Elapsed)" || echo "无活动记录" echo "" echo "按 Ctrl+C 退出监控" sleep 10 done } # 主菜单 case "$1" in "report") generate_html_report ;; "monitor") monitor_loop ;; *) echo "用法: $0 {report|monitor}" exit 1 ;; esac
3. 常用快捷命令集合
#!/bin/bash # rclone_cheatsheet.sh - 常用命令速查 # 1. 快速查看存储使用情况 alias rclone-du='rclone size remote:bucket --human-readable' # 2. 查找大文件 alias rclone-find-large='rclone lsf remote:bucket -R --files-only --format "tp" | sort -k2 -nr | head -20' # 3. 快速比较两个目录 alias rclone-quick-diff='rclone check source: dest: --size-only --one-way --missing-on-dest --quiet' # 4. 批量重试失败的传输 alias rclone-retry='rclone copy source: dest: --retries 10 --retries-sleep 30s --low-level-retries 20' # 5. 生成迁移报告 alias rclone-report='rclone size source: dest: --json --human-readable | jq' # 6. 清理空目录 alias rclone-cleanup='rclone rmdirs remote:bucket' # 7. 快速测试传输速度 alias rclone-speedtest='time rclone copy source:testfile dest: --progress --stats 5s' # 8. 备份配置 alias rclone-backup-config='cp ~/.config/rclone/rclone.conf ~/.config/rclone/rclone.conf.backup.$(date +%Y%m%d)' # 实用函数 rclone_progress() { # 监控特定传输的进度 watch -n 10 "rclone size $1 --human-readable" } rclone_stream_log() { # 实时查看日志 tail -f "$1" | grep -E "(Transferred|ERROR|WARN|INFO)" } rclone_summary() { # 显示迁移摘要 echo "=== 迁移摘要 ===" echo "开始时间: $(grep -h "started" logs/*.log | tail -1)" echo "当前状态:" rclone size "$1" "$2" --human-readable --json | jq -r ' "源端: \(.[0].bytes/1024/1024/1024 | round) GB (\(.[0].count) 文件)", "目标端: \(.[1].bytes/1024/1024/1024 | round) GB (\(.[1].count) 文件)" ' }
参数速查表
性能优化速查
# 小文件优化(<1MB) rclone copy source: dest: \ --transfers 32 \ --checkers 64 \ --fast-list \ --buffer-size 16M # 大文件优化(>100MB) rclone copy source: dest: \ --transfers 4 \ --checkers 8 \ --s3-chunk-size 128M \ --multi-thread-streams 4 \ --multi-thread-cutoff 128M # 高延迟网络优化 rclone copy source: dest: \ --timeout 10m \ --contimeout 2m \ --retries 10 \ --low-level-retries 20 \ --retries-sleep 30s
常用组合示例
# 示例1:安全的初始同步(带备份) rclone sync source: dest: \ --progress \ --stats 30s \ --backup-dir dest:backup/$(date +%Y%m%d) \ --suffix .$(date +%Y%m%d%H%M%S) \ --dry-run # 首次运行先检查 # 示例2:生产环境迁移 rclone copy source: dest: \ --transfers 8 \ --checkers 16 \ --bwlimit "09:00,2M 18:00,10M 23:00,off" \ --log-file migration.log \ --log-level INFO \ --stats-one-line \ --retries 5 \ --timeout 2h # 示例3:增量备份 rclone sync source: dest: \ --min-age 24h \ --max-age 30d \ --delete-excluded \ --fast-list \ --compare timestamp \ --backup-dir dest:archive/$(date +%Y%m)
故障排查命令
# 1. 测试连接 rclone lsd remote: --dump auth --dump headers # 2. 查看配置 rclone config show remote # 3. 测试速度 rclone about remote: # 4. 详细调试 rclone -vv --dump bodies copy source:test dest: 2>&1 | less # 5. 网络诊断 rclone copy source:test dest: --no-check-certificate --timeout 30s --contimeout 10s
这个速查表涵盖了 Rclone 最常用的参数和场景,可以根据具体需求组合使用。关键是要根据数据特性(文件大小、数量、网络条件)调整参数以获得最佳性能。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/318421.html