通过做这个,
# btrfs subvolume snapshot /mnt/1 /mnt/1/snapshot
# tree /mnt/1
/mnt/1
├── a
├── snapshot
│ ├── a
│ └── subv
└── subv
└── b
3 directories, 3 files
我们可以在btrfs上从/ mnt / 1创建快照.
我的问题是:
使用快照比使用rsync简化备份文件系统有什么好处?
解决方法:
快照可以被视为复制的一个特例,但不同于复制.
我不是很熟悉Btrfs的细节,但以下内容适用于ZFS,Btrfs从中吸取了很多灵感.显然是Btrfs snapshots are actually read/write,使它们与ZFS file system clones更相似,但这并没有改变它们与文件副本的关系.
快照是文件系统状态的只读时间点副本.
这是有效的,因为Btrfs和ZFS都是所谓的Copy On Write文件系统.每当更改数据块时,更改的数据将写入与原始副本不同的磁盘上的位置.这样做的主要好处是它大大提高了可靠性:因为需要覆盖的数据非常少,所以导致数据丢失的问题可能性大大降低.但是,还有其他优点.一个这样的优点是您可以有效地进行文件系统级快照.一个主要的缺点是,随着存储空间的填满,它会大大增加存储碎片,因为块分配器很难在任何地方找到物理存储副本的地方.事实上,建议到keep ZFS pool usage below 80%,大概不是因为这个原因.
快照基本上告诉文件系统代码“仍然需要这些块”.因此,它们不会被回收并可能被新数据覆盖.但是,它们仍然引用相同的旧数据块.
现在,与使用rsync,cp,cat或其他任何东西简单地制作副本有何不同?它是不同的,因为在数据实际更改之前,不会生成额外的数据物理副本.
这就像立体声的硬连接;在以不同名称访问文件时,使用相同的数据物理磁盘副本.不同之处在于,对于硬链接,对一个名称下的文件的更改会传播到每个其他副本,因为它们实际上引用了相同的数据块.通过写时复制和快照,更改的块仅显示在更改的位置. (对于只读快照,这意味着在文件的“当前”版本中.)您还只需要重写实际已更改的块;其余的块正好留在原处.例如,对于快照files containing VM disk images这样的事情,这可能会使存储在磁盘上所需的数据量产生巨大差异.
所以,回顾一下:
>快照只需要更改块所需的磁盘空间.复制需要的份数乘以文件大小.
>快照是只读或读/写,具体取决于文件系统设计.副本是按设计读/写的.
>副本是独立的.快照引用与文件当前版本相同的数据块,直到文件的当前版本发生变化(全部或部分).
标签:linux,backup,filesystems,snapshot,btrfs
来源: https://codeday.me/bug/20190812/1643981.html