这两天刚好工作中需要做数据迁移,原老系统的电子档案数据存放在windows目录下,需要迁移到minio中
一、迁移需求
1、需要将原windows目录下的图片及子目录中的图片迁移出来,并按需求输出。
需求图
二、迁移环境
1、原系统windows和新上线的代理服务器服务器在同一个局域网
网络环境
三、服务免密登录操作步骤
1、先将windows目录共享出来,为了安全加下用户权限访问,具体操作步骤百度。
2、将代理服务器访问minio设置免输密码登录
ssh-keygen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.20.142
#上述操作完测试下
四、在linux上挂载windows共享目录及安装同步工具
mount -t cifs -o username="administrator",password="************",vers=2.0 //192.168.20.154/erm-upload /database/erm #挂载共享目录到Linux代理服务器上,vers=2.0这参数试过几次才成,之前版本一直用不了
yum install -y cifs-utils #安装同步工具
先迁移文件,再迁移子目录下的文件,因为原数据挺重要的,谨慎操作还是分开迁移。
文件迁移脚本
#!/bin/bash
LOG_FILE="/root/opt_transfer.log"
REMOTE="root@192.168.20.142:/backup/minio/data"
{
echo "==== 开始传输 $(date '+%F %T') ===="
rsync -avz --progress
--exclude='*/'
--log-file=$LOG_FILE
-e ssh /database/erm/ $REMOTE
[ $? -eq 0 ] && echo "状态:成功" || echo "错误:传输异常"
} | tee -a $LOG_FILE
子目录文件迁移脚本,这里比较复杂我用的python脚本
#!/usr/bin/env python3.7
-*- coding: utf-8 -*-
import os
import shutil
from PIL import Image # 导入Image库来验证文件是否为图片(可选)
def is_image_file(filename):
"""判断文件是否为图片"""
try:
with Image.open(filename) as img:
img.verify() # PIL will raise an IOError if it's not a valid image
return True
except (IOError, SyntaxError) as e:
return False
def rename_and_copy_images(src_dir, dest_dir):
"""遍历src_dir下的文件夹,并重命名其中的图片文件到dest_dir"""
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
for root, dirs, files in os.walk(src_dir): for dir_name in dirs: subdir_path = os.path.join(root, dir_name) for filename in os.listdir(subdir_path): full_path = os.path.join(subdir_path, filename) if is_image_file(full_path): # 提取文件名和扩展名 file_name, file_ext = os.path.splitext(filename) # 构建新的文件名 new_file_name = f"bygls_{dir_name}_{file_name}{file_ext}" # 构建目标路径 new_full_path = os.path.join(dest_dir, new_file_name) # 复制并重命名文件 shutil.copy2(full_path, new_full_path) print(f"Copied: {full_path} -> {new_full_path}")
if __name__ == "__main__":
src_directory = r'/database/erm/' # 源目录
dest_directory = r'/backup/erm/' # 目标目录
rename_and_copy_images(src_directory, dest_directory)
五、minio通过mc来同步文件,如果直接拷贝到minio数据目录下,minio无法自动识别,因为没有索引
1、下载mc工具,并赋予执行755权限
2、minio设置别名
./mc alias set minio_142 http://192.168.20.142:9000 用户 密码
3、同步数据即可
./mc cp --recursive /backup/minio/img/ minio_142/zhbz/
./mc cp --recursive /backup/minio/data/ minio_142/zhbz/
上述同步方式比较啰嗦,大家可以留言,分享更便捷的同步方式