![Linux 上节省空间的磁盘快照](https://linux22.com/image/5923/Linux%20%E4%B8%8A%E8%8A%82%E7%9C%81%E7%A9%BA%E9%97%B4%E7%9A%84%E7%A3%81%E7%9B%98%E5%BF%AB%E7%85%A7.png)
我喜欢 VirtualBox 即时创建和恢复快照的能力,我想知道是否可以在主机上执行类似的操作。
首先我研究了lvm
快照,但经过一番挖掘,我发现与动态分配的映像相比,快照有太多缺点。例如:
- 它们很占用空间。如果将 10% 写入逻辑卷然后拍摄快照,则该卷的其他 90% 将变得不可用。
- 拍摄快照是即时的,但恢复到该快照是一个漫长的操作。
- 如果写入太多,则无法保护快照免遭自动失效。
在 Windows 7 上,我成功地将附加差异 .vhd 图像到主机的功能与 VirtualBox GUI 结合起来以管理快照,并且正在寻找适用于 Linux 的类似选项。
答案1
为了完成@Lambert的回答,还有Btrfs(Linux 文件系统)允许创建和恢复快照文件系统的子卷。对于两者之间的差异,请阅读Reddit 上的这篇文章。
Btrfs 包含在 Linux 内核中,您可以将它用作根文件系统。似乎有可能启动它。
关于其“实验”状态,我已经使用了两年多了,没有任何问题。
答案2
它们很占用空间。如果将 10% 写入逻辑卷然后拍摄快照,则该卷的其他 90% 将变得不可用。
呃,不,不是。 LVM 快照提供两个块设备:原始 LV(您正在创建快照的内容)和快照 LV。只有任一 LV 上发生更改的数据才会实际写入快照 LV。您可以将任一 LV 作为常规文件系统挂载并 100% 使用其中任一者。与用户空间的唯一区别是快照 LV 似乎没有改变(当然,这就是重点)。
拍摄快照是即时的,但恢复到该快照是一个漫长的操作。
取决于您在“恢复”时执行的操作,您可以像任何常规 LV 一样创建快照(使用命令lvcreate
)。您可以保留一系列快照 LV,并告诉虚拟机从几周前的一个启动,这只是为其提供到块设备的不同路径的问题。
如果您对快照进行更改并希望将这些更改提交到原始 LV您可以合并快照
如果写入太多,则无法保护快照免遭自动失效。
不确定你的意思是什么。您的意思是说快照 LV 是否因为原始或快照 LV 写入太多而填满?据我所知,写入的唯一问题是,可能需要向快照 LV 记录比可用数据更多的数据,但如果您为了节省空间而将快照 LV 做得比其原始大小小,那么这只是一个问题。
答案3
您可能会查看 ZFS Fuse 或 Linux 上的 ZFS 项目。 ZFS 文件系统能够制作快照和克隆。我认为不可能从 Linux 的 ZFS 启动,但您可以将数据/工作存储在 ZFS 池中。
也可以看看:http://zfsonlinux.org/或在网上搜索 ZFS Fuse
答案4
正如 derobert 所建议的,我现在使用 LVM 的精简快照:
# create pool
lvcreate -L 10000M -T vg_oktestapp1/pool
# create thin vol
lvcreate -V 10000M -T vg_oktestapp1/pool -n lv_ibm
# mount
mkfs.ext4 /dev/vg_oktestapp1/lv_ibm
mount /dev/vg_oktestapp1/lv_ibm /media/ibm
# do stuff ...
# create snapshot
lvcreate -s vg_oktestapp1/lv_ibm --name lv_ibm_20150411090827
# do stuff ...
# instant restore snapshot
lvcreate -s vg_oktestapp1/lv_ibm_20150411003856 --name lv_ibm_new --setactivationskip n
umount /media/ibm
mount /dev/vg_oktestapp1/lv_ibm_new /media/ibm