背景
在做项目中,需要将windows服务器上的附件迁移到linux服务器中,附件大部分都是word、pdf、wbs等格式文件,存量文件大小达到500G,原计划是通过开通21、22端口进行服务器对服务器传输文件,但是提交的网络策略申请单被打回,不允许开通服务器之间的21、22端口,只能通过堡垒机传输。
实施办法
经过和团队成员讨论研究,发现文件都是按时间节点的文件夹进行存放的,如/2024/1/1/11/20/test.doc,这种类似路径存储,系统从2016年开始运行,按年度来分的话,平均每年的文件量100G不到,所以我们采取“蚂蚁搬家”的策略,逐年打包迁移附件。
实施步骤
- 从windows服务器中打包,分卷压缩
- 将压缩的文件下载到固态硬盘中
- 由本地电脑登录堡垒机将分卷压缩的文件传输到linux服务器
- 在linux服务器合并分卷压缩的文件,并解压
1)安装7z.zip工具
2)合并分卷文件
cat 2016.zip.00* > 2016.zip
#文件较大时,后台运行这个命令,可以这样
nohup cat 2016.zip.00* > 2016.zip &
#查看后台任务是否结束
jobs -l
3)解压
7zz x 2016.zip
#文件较大时,后台运行这个命令,可以这样
nohup 7zz x 2016.zip &
#查看后台任务是否结束
jobs -l
实施校验
- MD5文件夹校验
- 核对文件数量是否对应
ls -lR | grep "^-" | wc -l > 2016.log
#这个命令会统计不到"."开头的文件,所以需要在对应目录查询"."开头的文件数量
find /2016 -name ".*"
- 抽查文件下载是否能正常打开,是否会乱码
存在问题
ERROR: Cannot open output file : errno=36 文件名称过长
Linux 上最长文件名就只支持 255 字节,换算成汉字,最多只能支持到 85 个汉字左右。
linux 底层以及文件系统本身的限制。