如何“取消删除”系统上充满文件的文件夹GNU/LINUX
,其中分区LUKS
使用加密和格式化btrfs
*
?
在我的Debian Stable (currently Bullseye)
机器上,我的所有数据都位于LUKS
加密分区中(除了/boot
)。在该加密分区上,我使用 LVM 来组织不同的卷**
,这些卷使用 btrfs 进行格式化,这是我的实际数据所在。
所以我的磁盘设置如下:
lsblk -o path,type,fstype,mountpoint
PATH TYPE FSTYPE MOUNTPOINT
/dev/sda disk
/dev/sda1 part ext2 /boot
/dev/sda2 part
/dev/sda5 part crypto_LUKS
/dev/sr0 rom
/dev/mapper/sda5_crypt crypt LVM2_member
/dev/mapper/vg-root lvm btrfs /
/dev/mapper/vg-var lvm btrfs /var
/dev/mapper/vg-swap lvm swap [SWAP]
/dev/mapper/vg-tmp lvm btrfs /tmp
/dev/mapper/vg-home lvm btrfs /home
在我的一个分区中,我不小心删除了***
一个/home/USERNAME/mail/somefolderfullofimportantmessages
充满电子邮件的文件夹 ( )(文本文件,因为我使用的是maildir
- 格式)。
虽然我能够找到一些工具来恢复丢失的文件,但它们都有局限性,例如仅适用于extX
-filesystems(例如extundelete
)或仅适用于图像或整个分区(例如foremost
)或仅适用于特定文件类型(例如testdisk
和photorec
)。
就我而言,最合适的工具是应用btrfs restore
-命令 ****
经过与它的使用方式斗争了相当长的时间后regex
(或使用btrfs-undelete
- 工具这里),但是这样我只能“重新发现”文件夹路径中的一些未删除的文件,但不能“重新发现”已删除的文件。
为什么会这样?这可能是由于LUKS
-加密造成的吗?如果是:我还应该/可以做什么?
*
免责声明:我有一个备份,并且能够从那里恢复所有内容,但让我们只是为了证明这个备份不存在。是的,我知道,如果你没有备份,那是你自己的错。
**
是的,我知道,我本来可以使用btrfs subvolumes
,但我用来安装系统的自动安装程序没有提供该选项。但在我的下一次安装中,我计划摆脱LVM
.
***
从技术上讲,我曾经isync/mbsync
将远程IMAP
文件夹(不受我的管理控制)与本地文件夹同步。但由于某种原因(我不明白),该工具认为我的本地文件夹是空的,因此向远程文件夹发送了“删除所有内容”命令。下次我执行同步时,该工具删除了我的本地文件夹,因为它假定我的远程IMAP
文件夹是最新的。
****
在没有外部启动驱动器的情况下做到这一点很棘手。我切换到 a tty
,杀死了所有访问/home
(使用lsof /home
)的进程,然后卸载/home
(在屏蔽了一些systemd
持续访问/home
且不想停止的服务之后),这样我就能够执行该btrfs restore -Dv /dev/mapper/vg-home --path-regex '^/(|home(|/USERNAME(|/mail/(|/.*))))$' /tmp
命令(-D
is --dry-run
,仅当您删除它时确保您不会意外炸毁您的系统)。