博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下快速迁移海量文件的操作记录
阅读量:6872 次
发布时间:2019-06-26

本文共 1999 字,大约阅读时间需要 6 分钟。

 

有这么一种迁移海量文件的运维场景:由于现有网站服务器配置不够,需要做网站迁移(就是迁移到另一台高配置服务器上跑着),站点目录下有海量的小文件,大概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

#!/bin/bashhome=/var/www/htmlcd $home  if [ `pwd` == $home ];then     a="1 100000 200000 300000 400000 500000 600000 700000 800000 900000"             //比100万低一级单位,即10万的单位     for b 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)

[root@bastion-IDC ~]# cat /root/rsync.sh#!/bin/bashhome=/var/www/htmlcd $home  if [ `pwd` == $home ];then     a="1 100000 200000 300000 400000 500000 600000 700000 800000 900000"                 for b 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://orsfl.baihongyu.com/

你可能感兴趣的文章
[LeetCode]Climbing Stairs
查看>>
浏览器如何工作-转
查看>>
OC——Foundation—常用的类(2)----NSArray
查看>>
一号对外、诉求汇总、分类处置、按责转办、协调联动、限时办结、统一督办、统一考核...
查看>>
个人总结
查看>>
5月15号下午
查看>>
四个月工作和生活总结
查看>>
css 去掉苹果手机按钮的默认样式,网页布局单位,边框透明度(hsla)
查看>>
Redis构建分布式锁
查看>>
freemarker入门
查看>>
WordPress 批量关闭和打开评论功能
查看>>
OO第四单元作业总结暨完结撒花
查看>>
python中的正则表达式
查看>>
一些js常用函数
查看>>
机器学习总论:三种应用之模式识别、函数拟合、概率密度估计
查看>>
加速度传感器检测物体倾角的原理
查看>>
ReentrantLock的简单使用
查看>>
求一个int型整数的两种递减数之和(java)--2015华为机试题
查看>>
pseudo-class与pseudo-element的区别
查看>>
RAC执行root.sh报libcap.so.1: cannot open shared object file
查看>>