双系统(Windows+Ubuntu)下跨分区同步两个文件夹的方案求助
双系统(Windows+Ubuntu)下跨分区同步两个文件夹的方案求助
嘿,我来帮你搞定这个双系统跨分区同步的问题!之前我也帮不少人解决过类似的需求,咱们一步步来捋清楚~
首先得明确:不管用rsync还是robocopy,第一步都是让当前系统能访问到另一个系统的分区,不然同步根本无从谈起对吧?下面分别给你讲两个系统下的具体操作方案:
Ubuntu 下用 rsync 同步
- 第一步:挂载Windows分区。比如你的目标文件夹在Windows的D盘(NTFS格式),先手动创建挂载点并挂载:
要是想开机自动挂载,不用每次手动输命令,可以编辑sudo mkdir -p /mnt/win_d sudo mount /dev/sdaX /mnt/win_d # 这里的sdaX是你的Windows分区,用lsblk命令就能查到具体盘符/etc/fstab文件,添加一行(记得替换成你自己的分区UUID和挂载路径,UUID可以用blkid命令查):UUID=xxxx-xxxx /mnt/win_d ntfs defaults,uid=1000,gid=1000 0 0 - 第二步:写同步脚本。比如你要把Ubuntu里的
~/my_sync_folder同步到Windows的D:\my_sync_folder(对应Ubuntu里的/mnt/win_d/my_sync_folder),脚本内容可以这样:
给你解释下关键参数:#!/bin/bash # 同步Ubuntu文件夹到Windows分区 rsync -avh --delete --exclude='.*' ~/my_sync_folder/ /mnt/win_d/my_sync_folder/-a是归档模式,能保留文件的权限、修改时间等属性;-v会显示同步过程,方便排查问题;-h把文件大小显示成人能看懂的格式;--delete会删掉目标文件夹里有但源文件夹没有的文件,保证两边完全一致;--exclude='.*'是排除隐藏文件,要是你需要同步隐藏文件,把这个参数去掉就行。 - 第三步:设置定时同步。先给脚本加执行权限:
然后用crontab设置定时任务,比如每天凌晨2点自动同步:chmod +x sync_to_win.shcrontab -e # 在打开的文件里加一行,替换成你的脚本路径 0 2 * * * /home/你的用户名/sync_to_win.sh
Windows 下用 robocopy 同步
- 第一步:访问Ubuntu的ext4分区。Windows默认不支持ext4格式,你需要装个能识别Linux分区的工具,装好之后就能在资源管理器里看到Ubuntu的分区了。
- 第二步:写bat同步脚本。比如要把Windows的
D:\my_sync_folder同步到Ubuntu里的~/my_sync_folder(对应Windows里的E:\home\你的用户名\my_sync_folder,假设Ubuntu分区在Windows里显示为E盘),脚本内容:
关键参数说明:@echo off :: 同步Windows文件夹到Ubuntu分区 robocopy "D:\my_sync_folder" "E:\home\你的用户名\my_sync_folder" /MIR /FFT /R:3 /W:5/MIR是镜像同步模式,会让目标文件夹和源文件夹完全一致,多余的文件会被删除;/FFT是为了兼容Windows和Linux的文件时间差异;/R:3是同步失败时重试3次;/W:5是每次重试间隔5秒。 - 第三步:设置定时任务。打开Windows的「任务计划程序」,创建一个定时任务,把这个bat脚本加进去,设置好你想要的同步时间就行。
双向同步的小提醒
如果你的需求是双向同步(两边的修改都要同步到对方),单纯用rsync或robocopy要小心文件冲突。可以考虑写个脚本先从Windows同步到Ubuntu,再从Ubuntu同步到Windows,但一定要加冲突检测(比如比较文件的修改时间,保留最新的版本)。不过我建议先明确自己的同步方向,单向同步会更稳妥,不容易出问题~
备注:内容来源于stack exchange,提问作者Mikelenjilo
相关产品推荐
相关产品推荐

