Linux 上节省空间的磁盘快照

Linux 上节省空间的磁盘快照

我喜欢 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

相关内容