一条命令即可把当前目录下的 save 文件夹压成 save.tar.gz(文件名与文件夹同名,方便后面下载):
tar -czf save.tar.gz save/
tar 本身没有“快照”功能,它只能“当时目录里有什么就压什么”,而且一旦扫描完文件列表,后面再新建、再删除它都会继续报 “file removed before we read it” 或 “file changed”。
所以靠一条 tar 命令不可能“只压开始那一刻的文件”,必须先把目录“定格”,再让 tar 去压定格后的那份数据
# 1. 建一个空目录当快照点
mkdir save_snap
# 2. 用 cp -al 做硬链接副本(秒级完成,不占额外磁盘,除了 inode 几乎 0 空间)
cp -al save/* save_snap/ 2>/dev/null # 2>/dev/null 忽略“已删除”报错
# 3. 压这份静态快照
tar -czf save.tar.gz -C save_snap .
# 4. 清理快照
rm -rf save_snap
-
原理:cp -al 只是给相同数据块多建一个目录入口,原目录继续删改都不影响快照里的硬链接文件。
-
空间:只有被后续覆盖写入的文件才会真正多占一份空间,普通删除不会多占。
-
时间:几十万张小图也能在几秒内完成“复制”。
1321

被折叠的 条评论
为什么被折叠?



