当前位置: 首页 > news >正文

Linux下快速迁移海量文件的操作记录

有这么一种迁移海量文件的运维场景:由于现有网站服务器配置不够,需要做网站迁移(就是迁移到另一台高配置服务器上跑着),站点目录下有海量的小文件,大概100G左右,图片文件居多。目测直接拷贝过去的话,要好几天的时间。那么问题来了,这种情况下的网站数据要怎么迁移呢?另外,此网站还在运行中,白天是断然不能停止了,只能运行深夜停掉几个小时

可以采用的方案如下:
1.利用rsync进行同步。这种方法速度会慢,不过好在支持续传,在带宽不高或网站不稳定的情况下强烈建议用此方法:
1)先修改一下旧站上传图片的功能,确保新上传的图片保存到另一个新的目录地址下;
2)用rsync把旧图片同步到新的机器上;rsync可限速,同步操作时不会影响网站的对外服务。
3)可以写个rsync同步脚本,在夜里定时执行(比如凌晨1点执行,6点结束同步),100G的文件,要不了几个晚上就能搞定。
4)待旧站图片全都同步过去了,再一次性把新上传的图片rsync同步过去。并迁移网站代码。
2.如果网速快,网络稳定,可以考虑tar打包(压缩)后传输。不过打包后,要在一个停站周期内完成迁移,对于100G的量的文件传输,这种方法不太靠谱。
3.可以分块打包,比如根据图片大小适当的分块筛选(find)打包,然后再传输。
4.如果数据不重要,通过HTTP(wget)传输会更快些。
5.直接把旧站服务器的硬盘拿下来,然后将硬盘挂载到新站服务器上,再在新服务器上将nginx站点目录指向新挂载的硬盘。

实例说明:
比如本机站点目录/var/www/html下有100多万个小文件,需要将这些文件迁移到远程服务器192.168.1.101的/var/www/html目录下。
操作思路:
直接用rsync把文件一个一个的迁移过去,因为文件数量比较大,如果一下子在循环脚本里操作,会非常慢。
所以决定用分批操作,采用化整为零的方法

为了试验效果,可以先在/var/www/html目录下造数
[root@bastion-IDC ~]# cd /var/www/html
[root@bastion-IDC ~]# for i in `seq 1 1000000`;do touch test$i;done

1)采用rsync同步方法

[root@bastion-IDC ~]# cat /root/rsync.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
home= /var/www/html
cd  $home
   if  [ ` pwd ` == $home ]; then
      a= "1 100000 200000 300000 400000 500000 600000 700000 800000 900000"              // 比100万低一级单位,即10万的单位
      for  in  $a
      do
        c=` expr  $b + 10000`                                        // 比10万低一级单位
        for  loop  in  $( ls  -l| sed  -n  "$b,$c" p| awk  -F " "  '{print $9}' )
        do
          rsync  $loop 192.168.1.101:$home
        done
     done
   fi

[root@bastion-IDC ~]# chmod 755 /root/rsync.sh
[root@bastion-IDC ~]# /bin/bash /root/rsync.sh

2)采用wget方式(假设本机ip为192.168.1.99)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@bastion-IDC ~] # cat /root/rsync.sh
#!/bin/bash
home= /var/www/html
cd  $home
   if  [ ` pwd ` == $home ]; then
      a= "1 100000 200000 300000 400000 500000 600000 700000 800000 900000"           
      for  in  $a
      do
        c=` expr  $b + 10000`                                      
        for  loop  in  $( ls  -l| sed  -n  "$b,$c" p| awk  -F " "  '{print $9}' )
        do
          /usr/bin/ssh  root@192.168.1.101  "/usr/bin/wget http://192.168.1.99/$loop -P /var/www/html"
        done
     done
   fi

 

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/6245488.html ,如需转载请自行联系原作者

相关文章:

  • 如何:创建和使用 C# DLL(C# 编程指南)
  • 看电商发展过程中,前端技术的演进
  • 又来了,拖后腿没?全国各城市最新平均月薪出炉
  • JZ2440 裸机驱动 第7章 内存管理单元MMU
  • php验证身份证合法性
  • gcc/g++ 编译选项
  • Metro Style App 异步-简洁而不简单的异步
  • centos 7 环境变量PATH 、 cp命令、mv命令、 文档查看cat/more/less/head/tail
  • Oracle基本操作命令
  • 【Java学习笔记之三十四】超详解Java多线程基础
  • An unexpected exception has been detected in native code outside the VM
  • FFmpeg AVPacket和AVFrame区别
  • 我为什么选择Angular 2?
  • 安装OpenStack问题
  • Java 大写字母转下划线加小写字母
  • 深入了解以太坊
  • 【译】JS基础算法脚本:字符串结尾
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【mysql】环境安装、服务启动、密码设置
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • ECMAScript入门(七)--Module语法
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6 ...操作符
  • ES6 学习笔记(一)let,const和解构赋值
  • input实现文字超出省略号功能
  • Javascript编码规范
  • JavaScript学习总结——原型
  • js操作时间(持续更新)
  • October CMS - 快速入门 9 Images And Galleries
  • Python学习之路16-使用API
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 编写符合Python风格的对象
  • 码农张的Bug人生 - 初来乍到
  • 前嗅ForeSpider教程:创建模板
  • 译自由幺半群
  • 阿里云服务器如何修改远程端口?
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.ajax()
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (阿里云万网)-域名注册购买实名流程
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net/c# memcached 获取所有缓存键(keys)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [04] Android逐帧动画(一)
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心