PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

原创:fastcopy低成本替代NAS自动备份数据的脚本

[复制链接]
haierccc 发表于 2021-9-7 12:26 | 显示全部楼层 |阅读模式
点击数:1813|回复数:14
本帖最后由 haierccc 于 2021-9-13 22:21 编辑

NAS好啊,各种好处。
不过呢,也不是每个人都会购买NAS,也不是每个人都需要NAS,比如我而言,就是用USB 3.0的易驱线+台式机械硬盘组成了一套廉价的离线备份磁盘。
(强调:绝对不是买不起NAS!
以下是正文。

说起备份数据的重要性,恐怕只有遭受过数据损失的人才会有深刻的感受。
那是一种切肤之痛,多少年的工作成果都灰飞烟灭。
所以定期备份数据是绝对必要的,最简单直接的方法就是手动拷贝,但这在数据量少的时候有效,如果数据量大,目录层次又多就很麻烦了,因为你要自行判断哪些文件是最新的文件,不再重复拷贝未变化的文件。
这里推荐一款工具软件:FastCopy,正如其名,它能快速地拷贝文件,但我们利用的是它的另一个功能:同步,仅仅把更改过的文件,或者新创建的文件拷贝到移动介质,未变化的文件不再重复拷贝,这就实现了增量备份。
fastcopy有图形界面,指定需要同步的源和目的磁盘,选择sync,点击Execute,就开始增量备份了:


人工操作固然可以,但如果经常做备份还是嫌麻烦,而且备份过程本身就有风险,因为每次都要选择源和目的磁盘,万一选错了,由于目的磁盘没有源盘文件,那就不是增量备份,而是从零开始的完整备份了,这会耗费大量时间,而且之前备份的数据会被清空。
为此我写了一个批处理,能自动化备份数据,并且能适应盘符的变化,其原理如下:

工作目标:PC本地有3个盘符:D、E、F,移动硬盘是G,每个盘符的卷标如上,编写批处理把PC本地磁盘的数据备份到移动硬盘。
在固定的盘符之间对拷是不行的,因为盘符可能发生变化,如上图,移动硬盘是G盘,如果在这之前插入U盘占用了G,随后插入的移动硬盘就会变为H,批处理要能够感知这种变化,获得正确的源盘符和目标盘符。
感知的关键是”卷标“,盘符虽然会变化,但卷标不会!批处理通过卷标找到变化之后的盘符,就能找到正确的源和目的磁盘,举例就是:
源盘卷标是”视频“,盘符是D;目的磁盘卷标是”移动硬盘“,盘符是G,备份方向是D→G
源盘卷标是”视频“,盘符是K;目的磁盘卷标是”移动硬盘“,盘符是H,备份方向是K→H

虽然盘符发生了变化,但仍然达到了目的:把卷标为”视频“的磁盘里的数据备份到了卷标为“移动硬盘”的磁盘。
批处理附文末,本例是把3个源盘(卷标分别是视频、照片、数据)备份到目标磁盘(卷标是“移动磁盘”),根据你的实际情况修改语句。
现在,你只需要定期/随意地接上外置硬盘,等待认出盘符,再运行一下这个批处理,内外硬盘的数据就一致了。

数据备份的一些注意事项。
数据一定要”离线备份“,也就是不能本机备份到本机,而要备份到独立于PC的移动存储设备上,而且移动存储设备要是机械硬盘,不能是U盘或者SSD(固态硬盘)。
因为U盘/SSD使用NAND闪存保存数据,这种存储器是有数据保质期的,过了保质期数据就会”挥发“,随着制程的提高,存储密度越来越高,保质期也越来越短,目前广泛使用的TLC闪存的保质期不到一年,理论上说,一年以后的SSD不一定能读出原始数据。
你可能会问,现在SSD的应用越来越广泛,大量PC已经内置了SSD,难道它们的数据都不能保存超过一年?非也,SSD厂商为了避免数据挥发,在固件里写了搬运程序,当判断出某块数据快到保质期,就将其拷贝到另一处,数据重新写入,保质期也就从头开始算了。
但很明显,SSD需要通电才能完成搬运,PC是长时间通电的设备,所以内置的SSD有时间搬运数据,而U盘/移动硬盘是长时间断电放置的,没有时间搬运数据。
由此可见,如果笔记本/台式机内置了SSD,长时间断电是有数据丢失的风险的,建议把数据拷贝出来,或者定期开机让SSD搬运数据。
最后说说数据备份设备的选择,高大上的选择当然是NAS,有好几个磁盘做冗余,但是价格不菲,如果对备份没有很高的要求,可以购买台式机机械硬盘+USB 3.0转SATA线以实现廉价的备份,注意一定要是 USB 3.0或更高版本且支持USAP,以获得尽可能高的拷贝速度。


::本批处理的目的是把PC硬盘里的数据自动同步(备份)到外置的机械硬盘。
::把fastcopy放入系统路径,或者本批处理的目录下。
::因为PC硬盘的”卷标“和”盘符“不是固定的对应关系(比如插入U盘之后),所以不能在2个固定的盘符之间对拷。
::为此,先获得指定卷标的盘符,然后把该盘符下的数据用fastcopy同步到外置指定卷标的硬盘。
::有容错机制,如果发现任何一个卷标找不到对应的盘符,会显示报错信息并退出。
::插入硬盘以后等待一会,让操作系统认出移动硬盘的盘符之后再备份。
::3个源盘的卷标:视频、照片、数据
::目标盘卷标:移动硬盘
@echo off
::=============获得卷标为“视频”的盘符==========
cls
set flag=0
set input=
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="视频" call :s2 %%i&set flag=1
)
if %flag% neq 1 echo 没有卷标为“视频”的盘符&pause
goto :eof
:s2
set sp1=%1
echo.
echo  卷标为“视频”的盘符是:%sp1%
echo.
::=============获得卷标为“照片”的盘符==========
set flag=0
set input=
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="照片" call :s4 %%i&set flag=1
)
if %flag% neq 1 echo 没有卷标为“照片”的盘符&pause
goto :eof
:s4
set ph=%1
echo.
echo  卷标为“照片”的盘符是:%ph%
echo.
::=============获得卷标为“数据”的盘符==========
set flag=0
set input=
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="数据" call :s5 %%i&set flag=1
)
if %flag% neq 1 echo 没有卷标为“数据”的盘符&pause
goto :eof
:s5
set xbf=%1
echo.
echo  卷标为“数据”的盘符是:%xbf%
echo.
::=============获得卷标为“移动硬盘”的盘符,这是备份用的移动硬盘==========
set flag=0
set input=
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    for /f "tokens=4" %%j in ('vol %%i: 2^>nul') do if /i "%%j"=="移动硬盘" call :s1 %%i&set flag=1
)
if %flag% neq 1 echo 没有卷标为“移动硬盘”的盘符&pause
goto :eof
:s1
set lxbf=%1
echo.
echo  卷标为“移动硬盘”的盘符是:%lxbf%
echo.
::=============将数据备份到移动硬盘==========
::变量:sp1,ph,xbf,lxbf
echo 正在将数据同步到移动硬盘 %lxbf%:(修改时间最新者,以及新创建的文件)
echo 同步: 视频 %sp1%:\ 到 移动硬盘 %lxbf%:
FastCopy.exe /cmd=sync /force_close  %sp1%:\* /to=%lxbf%:\视频
echo 同步: 照片 %ph%:\ 到 移动硬盘 %lxbf%:
FastCopy.exe /cmd=sync /force_close  %ph%:\* /to=%lxbf%:\照片
echo 同步: 数据 %xbf%:\ 到 移动硬盘 %lxbf%:
FastCopy.exe /cmd=sync /force_close  %xbf%:\* /to=%lxbf%:\数据
echo.
echo.
echo 备份完毕,请检查是否有报错信息,按任意键退出。
echo.
pause
:eof

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
尊称 发表于 2021-9-7 12:40 | 显示全部楼层
有瘾。
给你点赞!
尊称 发表于 2021-9-7 12:43 | 显示全部楼层
你何不尝试一下goodsync
haierccc  楼主| 发表于 2021-9-7 12:46 | 显示全部楼层
尊称 发表于 2021-9-7 12:43
你何不尝试一下goodsync

我去看看。         
红色狂想 发表于 2021-9-7 13:37 | 显示全部楼层
你这叫系统集成方案,自己的需求自己解决,其乐无穷。不知为毛,这么多年了,我一直不敢用fastcopy这类第三方拷贝工具,总觉得用它备份大量数据时有可能会导致file某些byte出错。所以我只相信系统自带的,每次备份转移files都是不怕麻烦的打开多个windows资源管理器窗口纯手动复制粘贴
haierccc  楼主| 发表于 2021-9-7 14:05 | 显示全部楼层
红色狂想 发表于 2021-9-7 13:37
你这叫系统集成方案,自己的需求自己解决,其乐无穷。不知为毛,这么多年了,我一直不敢用fastcopy这类第三 ...

如果调用的是Windows的API,那就不会出问题。
但Fastcopy之所以这么快,可能不是调用API,或者不完全是调用API。
kingyesx1 发表于 2021-9-7 14:07 | 显示全部楼层
红色狂想 发表于 2021-9-7 13:37
你这叫系统集成方案,自己的需求自己解决,其乐无穷。不知为毛,这么多年了,我一直不敢用fastcopy这类第三 ...

你的担心是多余了。
系统(WIN,LINUX等)提供了文件读写复制之类的接口(不同的文件打开方式,文件块,文件流等)
无论是COPY,还是FASTCOPY或者NAS都只是调用了系统接口
不会出现你担心的情况(硬件问题或软件编写逻辑错误或代码错误之类另说)

dubai 发表于 2021-9-7 16:30 | 显示全部楼层
一直在用FreeFileSync。
我连拷贝点多的文件都用这货。
haierccc  楼主| 发表于 2021-9-8 06:35 | 显示全部楼层
dubai 发表于 2021-9-7 16:30
一直在用FreeFileSync。
我连拷贝点多的文件都用这货。

怎么有这么多sync
红色狂想 发表于 2021-9-8 14:18 | 显示全部楼层
haierccc 发表于 2021-9-7 14:05
如果调用的是Windows的API,那就不会出问题。
但Fastcopy之所以这么快,可能不是调用API,或者不完全是调 ...

很多软件长时间运行都会导致内存溢出,对于那些免费产品,想必作者不会花费过多的精力去优化代码消除BUG
红色狂想 发表于 2021-9-8 14:25 | 显示全部楼层
kingyesx1 发表于 2021-9-7 14:07
你的担心是多余了。
系统(WIN,LINUX等)提供了文件读写复制之类的接口(不同的文件打开方式,文件块,文 ...

实际上,所有OS不都是通过API向应用层提供服务的吗?所以我说的本来就是软件编写逻辑错误等问题
yhhuada66 发表于 2021-9-8 20:38 | 显示全部楼层
我过一段时间用微软官方的synctoy软件同步本地磁盘和nas里的内容(非标准nas,迅雷下载宝pro+3.5寸机械盘的简易nas,哈哈)
zsbstephen 发表于 2021-9-12 13:33 | 显示全部楼层
dubai 发表于 2021-9-7 16:30
一直在用FreeFileSync。
我连拷贝点多的文件都用这货。

+1,超好使,挂在后台全自动运行
Crowley 发表于 2021-9-13 00:33 | 显示全部楼层
因为工作性质比较敏感,一直会存储所有工作文档。试过很多国内外推荐的之后,家庭的照片、音乐、视频及简单性的文档用synctoy,所有涉及工作的自动备份用toucan,个人觉得够了。但是作者的这个真的是自己动手丰衣足食,佩服!我也抄你作业试试。
haierccc  楼主| 发表于 2021-9-13 09:48 | 显示全部楼层
Crowley 发表于 2021-9-13 00:33
因为工作性质比较敏感,一直会存储所有工作文档。试过很多国内外推荐的之后,家庭的照片、音乐、视频及简单 ...

尽管抄     
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部