Btrfs 詳解:快照
這篇文章會(huì)探討什么是 Btrfs 快照,它們?nèi)绾喂ぷ鞯?,你在日常生活中進(jìn)行快照的好處。這篇文章是《Btrfs 詳解》系列文章中的一篇。從 Fedora Linux 33 開始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默認(rèn)文件系統(tǒng)。
如果你錯(cuò)過了,這里是本系列的上一篇文章:Btrfs 詳解:基礎(chǔ)概念
簡介
想象一下,你長時(shí)間處理一個(gè)文件,反復(fù)添加和撤銷修改。然后,在某個(gè)時(shí)刻你意識(shí)到:兩小時(shí)前你撤銷的部分修改,現(xiàn)在會(huì)非常有用。而昨天在你銷毀那個(gè)設(shè)計(jì)之前,你也已經(jīng)修改了這個(gè)特殊的部分。當(dāng)然,由于你會(huì)定期保存文件,所以舊的改動(dòng)會(huì)丟失。很多人可能都遇到過這樣的情況。如果能恢復(fù)舊版本的文件,而無需定期手動(dòng)復(fù)制,豈不美哉?
這是一個(gè) Btrfs 快照可以幫助你的特別場景。當(dāng)你使用正確的話,快照同時(shí)也為你的電腦提供了很好的備份方案。
下面你會(huì)找到一些關(guān)于快照的例子。如果你想跟著操作,你必須擁有訪問某些 Btrfs 文件系統(tǒng)的權(quán)限和 root 權(quán)限。你可以通過下面命令來驗(yàn)證一個(gè)目錄的文件系統(tǒng)。
$ findmnt -no FSTYPE /home
btrfs
這個(gè)命令會(huì)輸出你 /home/
目錄的文件系統(tǒng)名稱。如果它是 btrfs
,那就可以了。讓我們創(chuàng)建一個(gè)新的目錄去做實(shí)驗(yàn):
$ mkdir ~/btrfs-snapshot-test
$ cd ~/btrfs-snapshot-test
在下面的文本中,你會(huì)看到很多像上面顯示的那樣的命令輸出框。請?jiān)陂喿x/比較命令輸出時(shí)請記住,框中的內(nèi)容在行末會(huì)被換行。這使得識(shí)別跨多行的長行變得困難,降低了可讀性。如果有疑問,試著調(diào)整瀏覽器窗口的大小,看看文本的變化!
Btrfs 快照
讓我們從一個(gè)基本的問題開始:什么是 Btrfs 快照?如果你在文檔 [1] 和維基 [2] 中查找,你不會(huì)立刻找到這個(gè)問題的答案。事實(shí)上,從“功能”一節(jié)里是找不到的。如果你搜索一下,你會(huì)發(fā)現(xiàn)快照和 Btrfs 子卷一起被大量地提及 [3]。所以現(xiàn)在做什么呢?
還記得快照在系列前面的文章里兩次被提到嗎?是這樣說的:
CoW 的優(yōu)勢在哪里?簡單的說:文件被修改和編輯的歷史被保存了下來。Btrfs 保存文件舊版本的引用(inode)可以輕易地被訪問。這個(gè)引用就是快照:文件系統(tǒng)在某個(gè)時(shí)間點(diǎn)的狀態(tài)鏡像。這將是這系列文章里的單獨(dú)的一篇,所以暫時(shí)留到后面介紹。
以及:
另外一個(gè)分離
/
和/home
的優(yōu)勢是我們可以分別進(jìn)行 快照—— Btrfs 詳解:子卷
看起來快照是和 Btrfs 子卷相關(guān)的。你可能之前在其他地方聽到過快照,比如說 LVM(邏輯卷管理器)。雖然技術(shù)角度上它們都是為了同一個(gè)目的,但它們在實(shí)現(xiàn)方面有所不同。
每個(gè) Btrfs 快照是一個(gè)子卷。但是,不是每個(gè)子卷都是一份快照。區(qū)別在于子卷里面包含的內(nèi)容。一個(gè)快照是子卷加上一些內(nèi)容:它包含對現(xiàn)在和過去版本的文件的引用(inode)。讓我們看看快照是從哪來的!
創(chuàng)建 Btrfs 快照
想使用快照功能,你需要一個(gè) Btrfs 子卷來進(jìn)行快照。讓我們在測試目錄(~/btrfs-snapshot-test
)里創(chuàng)建一個(gè):
$ cd ~/btrfs-snapshot-test
$ sudo btrfs subvolume create demo
Create subvolume './demo'
$ sudo chown -R $(id -u):$(id -g) demo/
$ cd demo
因?yàn)?Btrfs 子卷默認(rèn)是被 root 所有的,你必須用 chown
去修改子卷里的文件的所有權(quán)到普通用戶上?,F(xiàn)在我們在里面新加一些文件:
$ touch foo bar baz
$ echo "Lorem ipsum dolor sit amet, " > foo
你的目錄現(xiàn)在看起來像這樣:
$ ls -l
total 4
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 bar
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 baz
-rw-r--r--. 1 hartan hartan 29 Dec 20 08:11 foo
讓我們從這里創(chuàng)建第一次快照:
$ cd ..
$ sudo btrfs subvolume snapshot demo demo-1
Create a snapshot of 'demo' in './demo-1'
這就好了。讓我們看看發(fā)生了什么:
$ ls -l
total 0
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo-1
$ tree
.
├── demo
│ ├── bar
│ ├── baz
│ └── foo
└── demo-1
├── bar
├── baz
└── foo
2 directories, 6 files
這看起來是一份拷貝!為了驗(yàn)證,我們從快照里讀取 foo
的內(nèi)容:
$ cat demo/foo
Lorem ipsum dolor sit amet,
$ cat demo-1/foo
Lorem ipsum dolor sit amet,
當(dāng)我們修改原始文件時(shí),真正的效果變得明顯:
$ echo "consectetur adipiscing elit, " >> demo/foo
$ cat demo/foo
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
$ cat demo-1/foo
Lorem ipsum dolor sit amet,
這表明快照仍然持有“舊”版本的數(shù)據(jù):foo
的內(nèi)容沒有改變。到目前為止,你可以通過一個(gè)簡單的文件復(fù)制來實(shí)現(xiàn)完全相同的目標(biāo)?,F(xiàn)在你也可以繼續(xù)處理舊文件了。
$ echo "sed do eiusmod tempor incididunt" >> demo-1/foo
$ cat demo-1/foo
Lorem ipsum dolor sit amet,
sed do eiusmod tempor incididunt
但是在底層,我們的快照實(shí)際上是一個(gè)新的 Btrfs 子卷。你可以通過下面的命令來驗(yàn)證這一點(diǎn):
$ sudo btrfs subvolume list -o .
ID 259 gen 265 top level 256 path home/hartan/btrfs-snapshot-test/demo
ID 260 gen 264 top level 256 path home/hartan/btrfs-snapshot-test/demo-1
Btrfs 子卷 vs. 文件復(fù)制
這一切有什么意義呢?到目前為止快照看起來是一個(gè)更加復(fù)雜的復(fù)制文件的方式。事實(shí)上,快照不僅僅是表面上看起來那么簡單。讓我們來創(chuàng)建一個(gè)更大的文件:
$ dd if=/dev/urandom of=demo/bigfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.3454 s, 399 MB/s
現(xiàn)在有一個(gè)512 MB 大小的新文件 demo/bigfile
。讓我們創(chuàng)建另一個(gè)快照,這樣在你修改數(shù)據(jù)的時(shí)候就不會(huì)丟失:
$ sudo btrfs subvolume snapshot demo demo-2
Create a snapshot of 'demo' in './demo-2'
現(xiàn)在我們通過追加少量字符串到文件來模擬變化:
$ echo "small changes" >> demo/bigfile
這是生效后的文件結(jié)構(gòu):
$ tree
.
├── demo
│ ├── bar
│ ├── baz
│ ├── bigfile
│ └── foo
├── demo-1
│ ├── bar
│ ├── baz
│ └── foo
└── demo-2
├── bar
├── baz
├── bigfile
└── foo
3 directories, 11 files
但是真正的神奇的發(fā)生在其他地方。你已經(jīng)復(fù)制了 demo/bigfile
,你現(xiàn)在擁有了兩個(gè)大約 512 MiB 的文件。但是,因?yàn)樗鼈兪遣煌目截?,它們?yīng)該會(huì)占據(jù)共 1 GiB 的空間。記住兩個(gè)文件的差異不超過 10 字節(jié) —— 和原文件大小相比這幾乎沒什么差別。
Btrfs 快照工作原理與文件復(fù)制不同:而是它們保持對當(dāng)前和過去的 inode 的引用。當(dāng)你在文件追加更新時(shí),在底層 Btrfs 分配更多的空間去存儲(chǔ)更新,同時(shí)在原來的 inode 增加對新數(shù)據(jù)的引用。之前的內(nèi)容保持不變。為了便于理解,你可以認(rèn)為這是僅僅“存儲(chǔ)”原文件和修改版本的差異。
讓我們看看這個(gè)效果:
$ sudo compsize .
Processed 11 files, 5 regular extents (9 refs), 3 inline.
Type Perc Disk Usage Uncompressed Referenced
TOTAL 100% 512M 512M 1.0G
none 100% 512M 512M 1.0G
這個(gè)有趣的數(shù)字出現(xiàn)在 TOTAL
一行:
Referenced
是當(dāng)前目錄下所有文件大小的總和Disk Usage
是用于在磁盤上存儲(chǔ)文件分配空間的大小
你有一共 1 GiB 的文件,但存儲(chǔ)它們僅僅占據(jù)了 512 MiB。
Btrfs 快照和備份
目前為止,在這篇文章中,你已經(jīng)看到如何創(chuàng)建 Btrfs 快照和它們的特別之處。有人可能會(huì)想:如果我在我的 PC 本地進(jìn)行一系列的快照,我就有一個(gè)可靠的備份策略。 其實(shí)不是這樣的 。如果 Btrfs 子卷共享的底層數(shù)據(jù)被偶然破壞了(被 Btrfs 之外的東西影響,比如宇宙射線),所有指向這些數(shù)據(jù)的子卷都會(huì)存在相同的錯(cuò)誤。
為了讓快照成為真正的備份,你應(yīng)該將它們存儲(chǔ)到一個(gè)不同的 Btrfs 系統(tǒng)上,例如在一個(gè)外部驅(qū)動(dòng)器上。為了本文的目的,讓我們在一個(gè)文件里創(chuàng)建一個(gè)新的 Btrfs 系統(tǒng),并掛載它來模擬一個(gè)外部驅(qū)動(dòng)。如果你有一個(gè)格式為 Btrfs 的外部驅(qū)動(dòng)器,請隨意替換以下命令中提到的所有路徑來試試!讓我們創(chuàng)建一個(gè)新的 Btrfs 文件系統(tǒng):
注意:下面的命令會(huì)在你的文件系統(tǒng)上創(chuàng)建一個(gè) 8 GB 大小的新文件。如果你想跟著下面的步驟,請確保你的磁盤空間至少有 8 GB 剩余。請不要分配小于 8 GB 到這個(gè)文件,否則 Btrfs 可能在掛載時(shí)會(huì)遇到問題。
$ truncate -s 8G btrfs_filesystem.img
$ sudo mkfs.btrfs -L "backup-drive" btrfs_filesystem.img
btrfs-progs v5.18
See http://btrfs.wiki.kernel.org for more information.
[ ... ]
Devices:
ID SIZE PATH
1 8.00GiB btrfs_filesystem.img
這些命令創(chuàng)建了名為 btrfs_filesystem.img
的 8 GB 新文件,同時(shí)在上面格式化了一個(gè) Btrfs 文件系統(tǒng)?,F(xiàn)在你可以像外部驅(qū)動(dòng)器一樣掛載它:
$ mkdir backup-drive
$ sudo mount btrfs_filesystem.img backup-drive
$ sudo chown -R $(id -u):$(id -g) backup-drive
$ ls -lh
total 4.7M
drwxr-xr-x. 1 hartan hartan 0 Dec 20 08:35 backup-drive
-rw-r--r--. 1 hartan hartan 8.0G Dec 20 08:37 btrfs_filesystem.img
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo-1
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo-2
妙,現(xiàn)在掛載在 backup-drive
下面有一個(gè)獨(dú)立的 Btrfs 文件系統(tǒng)!讓我們嘗試進(jìn)行快照并且把快照放進(jìn)去:
$ sudo btrfs subvolume snapshot demo backup-drive/demo-3
Create a snapshot of 'demo' in 'backup-drive/demo-3'
ERROR: cannot snapshot 'demo': Invalid cross-device link
發(fā)生了什么?噢,你嘗試對 demo
進(jìn)行一次快照并把它存在不同的 Btrfs 文件系統(tǒng)里(從 Btrfs 視角來看是一個(gè)不同的設(shè)備)。還記得一個(gè) Btrfs 子卷僅持有對文件和內(nèi)容的引用(inode)?這正是問題所在:文件和內(nèi)容存在于我們的 home
文件系統(tǒng),但不在新創(chuàng)建的 backup-drive
。你得找到一種方式去傳輸子卷和其內(nèi)容到新的文件系統(tǒng)里。
在不同的 Btrfs 文件系統(tǒng)存儲(chǔ)快照
針對這個(gè)目的 Btrfs 工具有兩個(gè)特殊的命令。讓我們首先來看看它們是如何工作的:
$ sudo btrfs send demo | sudo btrfs receive backup-drive/
ERROR: subvolume /home/hartan/btrfs-snapshot-test/demo is not read-only
ERROR: empty stream is not considered valid
另一個(gè)錯(cuò)誤!這時(shí)它告訴你我們想要傳輸?shù)淖泳聿皇侵蛔x的。這是對的:你可以寫入新內(nèi)容到所有目前為止創(chuàng)建的快照/子卷。你可以像這樣創(chuàng)建一個(gè)只讀的快照:
$ sudo btrfs subvolume snapshot -r demo demo-3-ro
Create a readonly snapshot of 'demo' in './demo-3-ro'
不像之前那樣,這里 -r
選項(xiàng)被加到了 snapshot
子命令里。這創(chuàng)建一個(gè)只讀的快照,這很容易去驗(yàn)證:
$ touch demo-3-ro/another-file
touch: cannot touch 'demo-3-ro/another-file': Read-only file system
現(xiàn)在你可以重新嘗試傳輸子卷:
$ sudo btrfs send demo-3-ro | sudo btrfs receive backup-drive/
At subvol demo-3-ro
At subvol demo-3-ro
$ tree
├── backup-drive
│ └── demo-3-ro
│ ├── bar
│ ├── baz
│ ├── bigfile
│ └── foo
├── btrfs_filesystem.img
├── demo
[ ... ]
└── demo-3-ro
├── bar
├── baz
├── bigfile
└── foo
6 directories, 20 files
成功了!你成功傳輸原來子卷 demo
的一個(gè)只讀快照到一個(gè)外部的 Btrfs 文件系統(tǒng)。
在非 Btrfs 文件系統(tǒng)存儲(chǔ)快照
上面你已經(jīng)看到你如何能存儲(chǔ) Btrfs 子卷/快照到其他的 Btrfs 文件系統(tǒng)。但如果你沒有其他的 Btrfs 文件系統(tǒng)并且不能新創(chuàng)建一個(gè),比如說外部驅(qū)動(dòng)器需要一個(gè)和 Windows 或 MacOS 兼容的文件系統(tǒng),你可以做什么呢?在這種情況下你可以存儲(chǔ)子卷在文件里:
$ sudo btrfs send -f demo-3-ro-subvolume.btrfs demo-3-ro
At subvol demo-3-ro
$ ls -lh demo-3-ro-subvolume.btrfs
-rw-------. 1 root root 513M Dec 21 10:39 demo-3-ro-subvolume.btrfs
文件 demo-3-ro-subvolume.btrfs
現(xiàn)在包含了隨后重建 demo-3-ro
子卷需要的所有東西。
增量地發(fā)送快照
如果你對不同的子卷重復(fù)執(zhí)行這個(gè)操作,你會(huì)發(fā)現(xiàn)在某些時(shí)間點(diǎn)不同的子卷不再共享它們的文件內(nèi)容。這是因?yàn)橄裆厦嬉粯影l(fā)送一個(gè)子卷,去重建這個(gè)單獨(dú)的子卷的所有數(shù)據(jù)將被傳送到目標(biāo)位置。但是,你可以引導(dǎo) Btrfs 只向目標(biāo)位置發(fā)送不同子卷的差異!所謂的增量發(fā)送將保證共享的引用在子卷中仍然共享。為了展示這一點(diǎn),新增一些變動(dòng)到我們原來的子卷:
$ echo "a few more changes" >> demo/bigfile
然后創(chuàng)建另一個(gè)只讀子卷:
$ sudo btrfs subvolume snapshot -r demo demo-4-ro
Create a readonly snapshot of 'demo' in './demo-4-ro'
然后現(xiàn)在發(fā)送它:
$ sudo btrfs send -p demo-3-ro demo-4-ro | sudo btrfs receive backup-drive
At subvol demo-4-ro
At snapshot demo-4-ro
在上面的命令,-p
選項(xiàng)指定了一個(gè)父子卷用來計(jì)算差異。重要的是記住原 Btrfs 文件系統(tǒng)和目標(biāo) Btrfs 文件系統(tǒng)都必須包含相同的、未被修改過的父子卷!確保新的子卷真的在那里:
$ ls backup-drive/
demo-3-ro demo-4-ro
$ ls -lR backup-drive/demo-4-ro/
backup-drive/demo-4-ro/:
total 524296
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 bar
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 baz
-rw-r--r--. 1 hartan hartan 536870945 Dec 21 10:49 bigfile
-rw-r--r--. 1 hartan hartan 59 Dec 20 08:13 foo
但你怎樣知道增量發(fā)送只傳輸了子卷間的差異呢?讓我們傳輸數(shù)據(jù)流到一個(gè)文件里然后看看它有多大:
$ sudo btrfs send -f demo-4-ro-diff.btrfs -p demo-3-ro demo-4-ro
At subvol demo-4-ro
$ ls -l demo-4-ro-diff.btrfs
-rw-------. 1 root root 315 Dec 21 10:55 demo-4-ro-diff.btrfs
根據(jù) ls
,這個(gè)文件僅僅只有 315 字節(jié)大小!這意味著增量傳輸只傳輸子卷間的差異,和額外的 Btrfs 相關(guān)的元數(shù)據(jù)。
從快照中恢復(fù)子卷
在繼續(xù)之前,讓我們清理掉這時(shí)候不再需要的東西:
$ sudo rm -rf demo-4-ro-diff.btrfs demo-3-ro-subvolume.btrfs
$ sudo btrfs subvolume delete demo-1 demo-2 demo-3-ro demo-4-ro
$ ls -l
total 531516
drwxr-xr-x. 1 hartan hartan 36 Dec 21 10:50 backup-drive
-rw-r--r--. 1 hartan hartan 8589934592 Dec 21 10:51 btrfs_filesystem.img
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo
到目前為止你已經(jīng)成功創(chuàng)建了可讀/寫和只讀的 Btrfs 子卷快照,并把它們發(fā)送到外部。但是,為了把這作為備份策略,還要有一種方式去發(fā)送子卷回原來的文件系統(tǒng)和讓它們再次變?yōu)榭蓪憽3鲇谶@個(gè)目的,我們移動(dòng) demo
子卷到其他地方并且嘗試從最近的快照中重建它。第一步:重命名為 broken
子卷。一旦恢復(fù)成功它會(huì)被刪除:
$ mv demo demo-broken
第二步: 傳回最近的快照到這個(gè)文件系統(tǒng):
$ sudo btrfs send backup-drive/demo-4-ro | sudo btrfs receive .
At subvol backup-drive/demo-4-ro
At subvol demo-4-ro
[hartan@fedora btrfs-snapshot-test]$ ls
backup-drive btrfs_filesystem.img demo-4-ro demo-broken
第三步: 從快照創(chuàng)建一個(gè)可讀寫的子卷:
$ sudo btrfs subvolume snapshot demo-4-ro demo
Create a snapshot of 'demo-4-ro' in './demo'
$ ls
backup-drive btrfs_filesystem.img demo demo-4-ro demo-broken
上一步非常重要:你不能重命名 demo-4-ro
為 demo
,因?yàn)檫@仍然是一個(gè)只讀子卷!最后你可以檢查你所有你想要的東西是不是在那里:
$ tree demo
demo
├── bar
├── baz
├── bigfile
└── foo
0 directories, 4 files
$ tail -c -19 demo/bigfile
a few more changes
最后的命令告訴你 bigfile
的最后 19 個(gè)字符實(shí)際上是上次變更執(zhí)行的結(jié)果。這個(gè)時(shí)候,你可能想從 demo-broken
復(fù)制最近的更新到新的 demo
子卷。因?yàn)槟銢]有執(zhí)行任何更新,你可以過時(shí)的子卷:
$ sudo btrfs subvolume delete demo-4-ro demo-broken
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-4-ro'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-broken'
就是這樣!你成功從一個(gè)之前存在不同 Btrfs 文件系統(tǒng)(外部介質(zhì))的快照中恢復(fù) demo
子卷。
子卷作為快照的邊界
在本系列的第二篇文章中我提到子卷作為快照的邊界,但這到底是什么意思呢?簡單來說,子卷的一份快照僅包含這個(gè)子卷的內(nèi)容,而不是下面嵌套的子卷。讓我們來看看這個(gè):
$ sudo btrfs subvolume create demo/nested
Create subvolume 'demo/nested'
$ sudo chown -R $(id -u):$(id -g) demo/nested
$ touch demo/nested/another_file
讓我們像以前一樣進(jìn)行一次快照:
$ sudo btrfs subvolume snapshot demo demo-nested
Create a snapshot of 'demo' in './demo-nested'
然后查看里面的內(nèi)容:
$ tree demo-nested
demo-nested
├── bar
├── baz
├── bigfile
├── foo
└── nested
1 directory, 4 files
$ tree demo
demo
├── bar
├── baz
├── bigfile
├── foo
└── nested
└── another_file
1 directory, 5 files
注意到 another_file
不見了,僅僅是目錄 nested
還在。這是因?yàn)?nbsp;nested
是一個(gè)子卷:demo
的快照包含嵌套子卷的目錄(掛載點(diǎn)),但里面的內(nèi)容是缺失的。目前沒有方法遞歸地執(zhí)行快照去包含嵌套子卷。但是,我們可以利用這個(gè)優(yōu)勢去從快照中排除一些目錄!這通常對那些你容易再現(xiàn)的數(shù)據(jù)有用,或者它們很少變化。例子有虛擬機(jī)或者容器鏡像,電影,游戲文件等等。
在總結(jié)之前,我們移除所有測試過程中創(chuàng)建的東西:
$ sudo btrfs subvolume delete demo/nested demo demo-nested
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo/nested'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-nested'
$ sudo umount backup-drive
$ cd ..
$ rm -rf btrfs-snapshot-test/
基于 Btrfs 備份最后思考
如果你決定使用 Btrfs 來執(zhí)行數(shù)據(jù)的定期備份,那么你可能需要使用一個(gè)工具來自動(dòng)完成這項(xiàng)任務(wù)。Btrfs 維基有一個(gè)專門針對 Btrfs [4] 的備份工具列表。在那里,你還將看到另一個(gè)手動(dòng)執(zhí)行 Btrfs 備份步驟的摘要。就我個(gè)人而言,我對 btrbk
[5] 有很多很好的體驗(yàn),我正在使用它來執(zhí)行我自己的備份。除了備份之外,btrbk
還可以在你的 PC 本地保存 Btrfs 快照列表。我使用它來防止意外的數(shù)據(jù)刪除。
如果你想要了解更多有關(guān)使用 Btrfs 進(jìn)行備份的內(nèi)容,歡迎在下面評論,我會(huì)考慮寫一篇專門討論這個(gè)話題的后續(xù)文章。
總結(jié)
本文研究了 Btrfs 快照,它們本質(zhì)上是 Btrfs 子卷。你了解了如何創(chuàng)建可讀寫和只讀快照,以及這種機(jī)制如何有助于防止數(shù)據(jù)丟失。
本系列的后續(xù)文章將討論:
- 壓縮 - 透明地節(jié)省存儲(chǔ)空間
- 配額組 - 限制文件系統(tǒng)大小
- RAID - 替代 mdadm 配置
如果你還想了解與 Btrfs 相關(guān)的其他主題,請查看 Btrfs 維基 [2:1] 和文檔 [1:1]。不要忘記查看本系列的前兩篇文章!如果你認(rèn)為本文缺少了一些內(nèi)容,請?jiān)谙旅娴脑u論中告訴我們。再會(huì)!