假设我们有一个包含 2 个逻辑卷的 LV 组:/dev/lvm/home
和/dev/lvm/root
。假设我不小心删除了 上的一些重要数据/dev/lvm/home
,然后在我意识到这一点时关闭了电脑,/dev/lvm/home
从 fstab 更改为仅以只读模式挂载,从它启动/dev/lvm/root
并开始使用它,在上面写东西等等。是我的吗?删除的数据安全吗?我不知道LVM是如何工作的,是否可以通过在同一LV组中的另一个逻辑卷上写入数据来覆盖一个逻辑卷上删除的数据?fdisk -l
不显示逻辑卷的几何形状,所以我想不存在逻辑卷的几何形状之类的东西?
答案1
简短回答:是的,您删除的数据在这种情况下是尽可能安全的。
当您配置普通逻辑卷(与“精简”逻辑卷相反)时,将为每个逻辑卷分配特定的磁盘块延伸,并且如果不再次使用 LVM 配置命令,这些磁盘块就不会更改。除非您开始更改逻辑卷的大小,否则home
LV 上保存已删除文件的块将保留分配给该 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,因此在这种情况下,快照的可用性是一个有用的工具:您可以对home
LV 进行快照,以保留其当前状态,并利用该状态来恢复数据。
答案3
对于普通逻辑卷,每个 LV 都是独立的,就像分区是独立的一样。
LVM 将其物理卷中的范围分配给每个 LV。除了快照之外,同一范围不能给出两次。因此/dev/lvm/root
可能使用范围 0-1023,也/dev/lvm/home
可能使用范围 1024-2047。没有重叠,因此您可以向 Root-LV 写入任何内容,而不会损害 Home-LV。
然而,还有其他特殊情况,例如精简配置逻辑卷,其中范围是动态分配的。在这种情况下,LV-Home 可能已经释放了一些扩展区,这些扩展区随后可能会被 LV-Root 使用和覆盖。
这是通过fstrim
或discard
机制来实现的。如果您使用 SSD 存储,fstrim
那么一旦您使用,数据就会消失。不幸的是,fstrim
即使对于只读安装的文件系统也可能有效。
因此,除了将其设置为只读 ( lvchange -p r
) 之外,还要禁用fstrim
(计时器、cron 和/或chmod -x
二进制文件本身)、挂载选项,如果已启用,discard
还要在 lvm.conf 中禁用它。issue_discards
不幸的是,保证只读性是相当困难的。安装只读可能还不够。