Time Machine 的工作原理?

2017-08-21 19:12:17 +08:00
 nichijou

是不是每次备份只是创建一个快照,需要备份的全复制一遍呀,没有增量备份之类的功能?

看 Backups.backupdb 文件夹下就是备份日期作文件名的文件夹,每个体积都差不多

所以我需求基本上就是备份我的 Documents 等几个资料文件夹,所以还不如我直接拷贝了?更加安全可靠。

不过 time machine 备份是我点击任务栏看它显示正在备份的体积才不到两个 g,远远小于他要备份的体积,但速度又不像仅在做两个 g 的拷贝,所以它底层在做什么动作,和我自己手动备份有什么优势咩?

♥️

3338 次点击
所在节点    macOS
20 条回复
Wao
2017-08-21 19:24:16 +08:00
nichijou
2017-08-21 19:27:18 +08:00
@Wao 他讲是增量备份 可我查看每次备份(Backups.backupdb 文件夹下就是备份日期作文件名的文件夹)体积都像是在做全拷贝,体积感人
lengjian
2017-08-21 19:38:27 +08:00
硬链接
chinvo
2017-08-21 19:38:54 +08:00
增量和 hard link
nichijou
2017-08-21 19:41:22 +08:00
@lengjian
@chinvo
哦哦,每次备份是对照前一次备份,我有手动删过以前的备份是不是药丸啊
chinvo
2017-08-21 19:42:34 +08:00
@nichijou 不会,会在后面增量的时候补全。

当然之前的版本就没了
chinvo
2017-08-21 19:43:13 +08:00
TM 的一个主要功能就是同一文件的不同历史时期版本的恢复
nichijou
2017-08-21 19:43:36 +08:00
@lengjian
@chinvo
没弄过硬链接,不过应该和以前的备份没关了了吧,只是类似磁盘上文件有多个指针指向,删除以前的指针并不会影响现在的,我理解对么?
lightening
2017-08-21 19:48:44 +08:00
@nichijou 可以理解为指针,两个指针指向一个磁盘区块。删除操作就是移除指针。当区块没有指针指向就会被垃圾回收掉。
nichijou
2017-08-21 19:54:06 +08:00
@chinvo
@lightening
阿里嘎多
chztv
2017-08-22 11:29:29 +08:00
如果仅仅备份 Documents 等几个资料文件夹,可以用 iCloud 或者 Google Backup,或者 Dropbox。
TM 的备份不仅仅是资料文件,是备份的整个 Mac 环境,哪天硬盘挂了,TM 会让你感觉到原来硬盘没坏过。
以上是我亲身感受,所以 TM 备份很重要。不用每天,至少每周备份下。
QAPTEAWH
2017-08-22 14:08:17 +08:00
HFS+ 有个神奇的 directory hard link 机制。

不过俱往矣,APFS 直接快照就行了( SSD 当备份盘的话...)。
shadownet
2017-08-22 15:01:47 +08:00
@QAPTEAWH 我直接被 TM 的超频繁备份搞懵了,500G 的 ssd,不到 4 天就满

APFS 的快照会好一些吗?
QAPTEAWH
2017-08-22 15:20:32 +08:00
@shadownet 你把该排除的排除掉。仔细看看说明,备份是频繁的(每小时),但留下来的不算频繁( 24 小时内的每小时,一个月内的每天,一个月前只是每周)。
nichijou
2017-08-22 15:23:54 +08:00
@QAPTEAWH
哦,所以这就是 tm 备份盘必须是 hfs+格式的原因
nichijou
2017-08-22 15:27:17 +08:00
@chztv
其他包括系统部分我全部手动 exclude 了,我有一种系统 pure 的强迫症,哪天系统挂了希望软件全部重新部署,当然必要的配置文件全都在 dropbox 里面
QAPTEAWH
2017-08-22 15:29:02 +08:00
@nichijou EXFAT + disk image 也行。disk image 里面是个 HFS+文件系统。
ItzhacLea
2017-08-24 02:13:27 +08:00
Time Machine 的實現依賴於 HFS+ 的 directory hard links,而 HFS+ 實現 directory hard links 是一個骯髒的 trick。

其他現代文件系統 (NTFS, EXT4, APFS...etc) 把 hard link 看作是同一個 inode 的不同文件名,但是 HFS+ 不是這麼做的。

如果你在其他系統下觀察 Time Machine 的目錄,你會發現大多數文件都不存放在 /Backups.backupdb 下,而是在 「.HFS+ Private Directory Data 」 文件夾下。這個文件夾在 macOS 下即使是 root 也是不可見的。

「.HFS+ Private Directory Data 」 文件夾就是 HFS+ 實現 directory hard links 的 trick。當一個文件 /文件夾被硬連結 (ln) 的時候,系統首先會把它挪入到這個文件夾中,並以 CNIDs 重命名;然後在原有位置建立一個 link,指向該文件 /文件夾。

這麼做的弊端非常明顯:一旦「.HFS+ Private Directory Data 」損壞,整個分區上的“硬連結”都會受到影響,不得不說這種設計十分可笑。

ItzhacLea
2017-08-24 02:52:11 +08:00
回到你的問題:

1. “是不是每次备份只是创建一个快照”
不是。但因為 HFS+ 實現硬連結的奇葩方式,導致整個備份過程看起來非常地繁瑣:
a. 在 /Backups.backupdb 下建立新的文件夾,將新(發生了改動)的文件複製進去;
b. 對自上一次備份後沒有發生改變的文件有兩種處理方式:如果在 /Backups.backupdb 下就硬連結,從 /Backups.backupdb 挪到「.HFS+ Private Directory Data 」文件夾;如果已經被硬連結,也就是文件已經在「.HFS+ Private Directory Data 」文件夾內,就原地建立一個 link,指向相應的文件;
c. 修改 “ Latest ”,使其指向最新的備份文件夾,完成備份。

2. “没有增量备份之类的功能?”
有,因為是“硬連結”,所以不能從文件大小上判斷。

3. “所以我需求基本上就是备份我的 Documents 等几个资料文件夹,所以还不如我直接拷贝了?更加安全可靠。”
是。Time Machine 優勢在於全盤備份,但是基於 HFS+,需要靠自己對蘋果的信仰戰勝 HFS+ 的不穩定。


PS. 由於 HFS+ 特立獨行地處理 hard link,這裡的文件=文件夾。
nichijou
2017-08-24 15:15:19 +08:00
@ItzhacLea 哈 感谢你全面细致的回答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/384654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX