在一个 LV 上写入数据是否会保持同一组中另一 LV 上已删除的文件完好无损?

在一个 LV 上写入数据是否会保持同一组中另一 LV 上已删除的文件完好无损?

假设我们有一个包含 2 个逻辑卷的 LV 组:/dev/lvm/home/dev/lvm/root。假设我不小心删除了 上的一些重要数据/dev/lvm/home,然后在我意识到这一点时关闭了电脑,/dev/lvm/home从 fstab 更改为仅以只读模式挂载,从它启动/dev/lvm/root并开始使用它,在上面写东西等等。是我的吗?删除的数据安全吗?我不知道LVM是如何工作的,是否可以通过在同一LV组中的另一个逻辑卷上写入数据来覆盖一个逻辑卷上删除的数据?fdisk -l不显示逻辑卷的几何形状,所以我想不存在逻辑卷的几何形状之类的东西?

答案1

简短回答:是的,您删除的数据在这种情况下是尽可能安全的。

当您配置普通逻辑卷(与“精简”逻辑卷相反)时,将为每个逻辑卷分配特定的磁盘块延伸,并且如果不再次使用 LVM 配置命令,这些磁盘块就不会更改。除非您开始更改逻辑卷的大小,否则homeLV 上保存已删除文件的块将保留分配给该 LV,并且不会被其他文件系统触及。

lvdisplay -m /dev/lvm/home您可以使用、pvdisplay -m /dev/sdXX或 来查看分配给每个 LV 的块延伸列表dmsetup table

(对于“瘦”LV,问题在于文件系统是否使用该discard选项挂载。设置该选项后,文件系统将告诉底层已删除的块现在是空闲的,对于瘦 LV,它意味着这些块可以释放回“精简池”,准备好重新分配给属于同一池的任何其他精简LV,但discard安装选项不是默认选项,不再建议一般使用。)

您应该注意的是 的计划运行fstrim,特别是如果您的磁盘是 SSD。许多现代发行版往往fstrim每周为每个已安装的文件系统运行一次,或者作为cron/anacron作业,或者通过 systemd*.timer单元运行。如果您想尝试恢复已删除的数据,为了安全起见,您应该禁用它。


除非您热衷于逆向计算或以其他方式处理小于 8 GB 的 HDD,否则您应该考虑磁盘几何结构作为“为了兼容性,我们对旧软件/固件撒谎”。任何大于此大小的磁盘都使用 LBA(逻辑块寻址),基本上只是一个块号。

只有磁盘本身的固件关心真正的磁盘几何结构,这可能比经典的 C/H/S 三元组可以表示的更复杂:例如,现在外柱面包含比内柱面更多的扇区已成为标准那些。所报告的任何 C/H/S 数字fdisk本质上都是完全虚构的,以防万一将新磁盘插入非常旧的系统中。

答案2

逻辑卷都是独立的,写入一个卷不会影响另一个卷。 LV 确实有“几何形状”,你可以通过运行看到它

sudo dmsetup table

这将显示每个 LV(由组成的 DM 设备表示)是如何映射的。

由于您使用的是 LV,因此在这种情况下,快照的可用性是一个有用的工具:您可以对homeLV 进行快照,以保留其当前状态,并利用该状态来恢复数据。

答案3

对于普通逻辑卷,每个 LV 都是独立的,就像分区是独立的一样。

LVM 将其物理卷中的范围分配给每个 LV。除了快照之外,同一范围不能给出两次。因此/dev/lvm/root可能使用范围 0-1023,也/dev/lvm/home可能使用范围 1024-2047。没有重叠,因此您可以向 Root-LV 写入任何内容,而不会损害 Home-LV。

然而,还有其他特殊情况,例如精简配置逻辑卷,其中范围是动态分配的。在这种情况下,LV-Home 可能已经释放了一些扩展区,这些扩展区随后可能会被 LV-Root 使用和覆盖。

这是通过fstrimdiscard机制来实现的。如果您使用 SSD 存储,fstrim那么一旦您使用,数据就会消失。不幸的是,fstrim即使对于只读安装的文件系统也可能有效。

因此,除了将其设置为只读 ( lvchange -p r) 之外,还要禁用fstrim(计时器、cron 和/或chmod -x二进制文件本身)、挂载选项,如果已启用,discard还要在 lvm.conf 中禁用它。issue_discards

不幸的是,保证只读性是相当困难的。安装只读可能还不够。

相关内容