# filesnapshot **Repository Path**: mars4u/filesnapshot ## Basic Information - **Project Name**: filesnapshot - **Description**: 一个 文件差异备份、增量备份和快照程序,可以通过快照回滚不同时间点里文件的状态 - **Primary Language**: Shell - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-10-15 - **Last Updated**: 2024-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # filesnapshot ### 功能介绍 **这是一个利用 linux 硬链接原理实现的文件快照及存档程序** filesnapshot非常小,使用起来也很简单,但实现了增量备份,快照存档,让您能非常方便地备份并管理您的重要文档和数据。它自动拷贝您指定目录下的所有文件,备份到一个您指定的安全的地方。采用增量备份的方式以节省备份时间和磁盘空间,并按照您的设定自动删除过期的旧备份。您可以根据备份的时间点来回溯您文档和数据的历史版本。 ### 特别之处 虽然是增量备份,但每个增量备份里都包含被备份目录里所有的文件,每个生成的增量备份都不依赖任何一个其它的备份!每个备份都是一个独立的快照,不会因为其它备份的丢失、损坏而变的不可用。这是很多其它差异备份、增量备份软件不具备的。 ### filesnapshot增量备份的工作原理 只拷贝上次备份后新产生的文件和修改过的文件到新的备份里,其它没有被改动过的文件将从上一个备份里硬链接到新的备份里。关于硬链接可看此文档的最后部分,或其它专业文档。 ### 应用案例 我有一台 Windows Server 服务器上面有重要的数据,为了防止因为服务器硬盘损坏或是病毒等原因导致数据丢失,我必需把数据备份到另一台机器上。 我在 Windows Server 上以 “只读” 方式共享一个文件夹,用一台 Linux 机器挂载这个共享文件夹,在 Linux 上用crontab定时执行这个程序来进行备份。然后在这台 Linux 上把保存备份的目录用samba以 “只读” 的方式共享出来给 Windows Server 服务器。(一定要以只读方式共享,防止病毒把备份也损坏掉) 这台 Linux 备份机我用的是j4105 CPU、 2TB硬盘的无风扇微型主机,总成本1500 RMB。 ### 软件架构 Linux shell ### 使用说明 1. 根据您的实际情况,修改 filesnapshot.sh “程序配置”中的变量 2. 把 filesnapshot.sh 复制到任何您喜欢的目录下,手动执行或用 crontab 添加一个定时执行任务 3. 程序每次运行都会寻找并删除过期的快照和日志,过期策略由您在“程序配置”中指定 ### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ### 关于硬链接 1. 文件是实际存储在硬盘上的数据块,文件名只是指向这个数据块的索引,系统是通过文件名索引到文件在硬盘上真实的数据块,你可以给数据块创建多个索引。 2. 我们平时用 rm 命令删除一个文件时实际只是删除了这个文件名————一个索引,Linux 系统只有在一个数据块被索引数为0的时候才真正删除这个数据块。 3. 做个实验,在/home目录下新建a,b,c,三个文件夹,然后: echo "abcdefg" > /home/a/text.txt ln /home/a/text.txt /home/b/text.txt ln /home/b/text.txt /home/c/text.txt 现在删除a,b,c,中任意两个文件夹,cat 剩下的那个text.txt,文件完好无损。