场景

要将大约60T的文件从一台服务器上搬到另外一台上。两边分区还不一样大,一边是一个整的60T大分区,另一边是15T一个的小分区。

解决思路

类比茶壶倒水,一个分区一个分区的填,填满一个再填第二个。

步骤

先将要同步的目录名全路径按时间排序写到一个文件里。每次从文件里取一行来做同步,成功则写入日志1中,失败则写入日志2中并记下时间戳。

每次同步前先检查日志1,如果存在则跳过。

代码实现

#!/bin/bash

prefix=/root/rsync/xvdf1/sync_1_300
mkdir -p $prefix input_file=$prefix/fdlist.txt success_log=$prefix/sync_status1.log
failure_log=$prefix/sync_status2.log
process_log=$prefix/sync_status3.log
details_log=$prefix/sync_status4.log du_log=$prefix/tmp_du.log touch $success_log $failure_log $process_log $du_log $details_log DEST=/xyz/xvdf1/192.168.10.112/ifs/home/xyftp/xyftpdir06/ count=
toltal=`wc -l $input_file|awk '{print $1}'`
while read src_fd
do while read line_st
do
if [[ $line_st == $src_fd ]]
then
rate=`echo "scale=4;($count/$toltal)*100"|bc`
echo -e "[$count/$toltal]\t$rate\t$src_fd\tSkip"
count=`echo $count+|bc`
continue
fi
done <$success_log rate=`echo "scale=4;($count/$toltal)*100"|bc`
echo -e "[$count/$toltal]\t$rate%\t$src_fd" >$process_log
du_str=`du -sh $src_fd` echo -e "$count\t$du_str ... ..."
rsync -avz --delete $src_fd root@192.168.240.69:$DEST > $details_log ret=$? if [[ $ret -eq ]]
then
echo -e "[$count/$toltal]\t$rate\t$src_fd\tSuccess"
echo -e "$count\t$du_str">>$du_log
echo "$src_fd">>$success_log
count=`echo $count+|bc`
else
time_stap=`date "+%Y-%M-%d %H:%m:%S"`
echo -e "[$count/$toltal]\t$rate\t$src_fd\tFailure"
echo -e "[$count/$toltal]\t$rate\t$src_fd\tFailure\t$time_stap" >>$failure_log
du_str=""
count=`echo $count+|bc`
break
fi
done <$input_file echo "Summary:"
echo "====================================="
echo "Success list:"
echo "-------------------------------------"
cat $success_log
echo "Failure list:"
echo "-------------------------------------"
cat $failure_log
echo "Last one:"
echo "-------------------------------------"
cat $process_log  

备注

  • 因为目录太大,可以拆片执行。比如 cat ../folder_list.txt | sed -n '1,300p' > fdlist.txt 每300行作为一个输入文件,这样可以并行执行。
  • rsync走ssh-ftp传输时要输入密码的,可以提前做ssh-public-key配好就不会被阻断了。
  • 因bash兼容性问题,调试前将rsync改为 -dry-run 模式,可能不同的linux发行版执行时会出错。

rsync续传大目录一例的更多相关文章

  1. 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)

    现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...

  2. Android应用开发之使用Socket进行大文件断点上传续传

    http://www.linuxidc.com/Linux/2012-03/55567.htm http://blog.csdn.net/shimiso/article/details/8529633 ...

  3. NuGet包断线续传下载

    NuGet包断线续传下载(金庆的专栏)NuGet是VC的扩展,用来下载依赖包.NuGet下载没有断线续传,下载源又很容易断开.  https://nuget.org/api/v2/  https:// ...

  4. vue上传大文件控件

    文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹.今天研究了一下这个问题,在 ...

  5. Web上传大文件的解决方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  6. js+分布上传大文件

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  7. web页面上传大文件有没有好的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  8. QQ上传大文件为什么这么快

    今天和同事在群里讨论“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的. 有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的 ...

  9. php无法上传大文件完美解决方案

    php.ini无法上传大文件完美解决办法 1.打开php.ini(打开方式就不用说了,百度一大堆) 2.查找post_max_size 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表 ...

随机推荐

  1. Nunit测试工具使用

    Nunit是什么 Nunit是一种TDD工具,和Junit一样的! 怎么样获取Nunit 打开Visual Studio工具,然后在菜单栏中的工具->扩展管理器中的联机库中搜索"nun ...

  2. Zabbix4.2.0基本配置和邮件报警

    目录 1. 修改中文 2. 添加监控本机 3. 监控本机mysql 4. 配置邮件报警 4.1 添加FTP模板 4.2 报警媒介类型 4.3 配置报警到用户 4.4 配置动作 4.5 模拟FTP故障 ...

  3. Linux下lz4解压缩命令小结

    lz4是一个让"人见人爱.花见花开"的压缩算法,能够在多核上很好的扩展.lz4在压缩率上略微逊色, 但是在解压速度上有着惊人的优势 (大概是gzip的3倍(多次测试对比)).因为压 ...

  4. 国内高速Maven仓库

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  5. 【学习笔记】深入理解HTTP协议

    参考:关于HTTP协议,一篇就够了,感谢作者认真细致的总结,本文在理解的基础上修改了内容,加深印象的同时也希望对大家有所帮助 HTTP是什么? HTTP协议是Hyper Text Transfer P ...

  6. 2017ACM/ICPC亚洲区沈阳站(部分解题报告)

    HDU 6225 Little Boxes 题意 计算四个整数的和 解题思路 使用Java大整数 import java.math.BigInteger; import java.util.Scann ...

  7. MongoDB框架Jongo的使用介绍

    1.Jongo可以用来做什么?   Jongo框架的目的是使在MongoDB中可以直接使用的查询Shell可以直接在Java中使用.在官网首页有一个非常简洁的例子:   SHELL:这种查询方式是Mo ...

  8. Python使用@property装饰类方法

    Python版本:3.5.2 假如我们有一个Student类,并在其中定义了一个score属性,但是score属性会被显露出去,没办法检查参数,导致成绩可以随意更改: stu = Student() ...

  9. [PHP] 算法-把数组排成最小的数的PHP实现

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 解法1 1.数组排序, ...

  10. Linux常用基本命令:三剑客命令之-awk格式化动作

    我们之前说过,awk是一个超强的文本格式化工具,而本文的printf动作就是经常用来做格式化文本的.使用方式跟c语言的printf差不多. 1,printf默认不会回车换行 ghostwu@dev:~ ...