eCryptfs 标头错误

eCryptfs 标头错误

我在通过 ecryptfs 加密分区的服务器上收到以下错误。

[3440851.003561] Valid eCryptfs headers not found in file header region or xattr region, inode 22545087
[3440830.026081] Valid eCryptfs headers not found in file header region or xattr region, inode 22553905

卸载下面的加密分区和 ext4 分区后,我执行了以下操作,fsck得到以下结果:

fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
/dev/sda3: clean, 65092/72302592 files, 54219978/289200384 blocks

我有点不明白发生了什么。我们在几个实例上使用相同的设置,但我们只在其中一个实例上观察到了这一点。

解决方案可能是更改底层磁盘!但我想了解发生了什么,以便最终检测并防止此类事件发生。

答案1

我曾见过系统未完全关闭时发生这种情况。特别是当加密数据存储在 USB 设备上时,主机和 USB 设备之间的连接有点不可靠时,我曾见过这种情况。但我相信在文件写入时其他非完全关闭也可能导致这种情况。

按照 inode 搜索回答经过乔瓦尼确实可以用来查找有问题的文件。由于 ecryptfs 保留了底层文件系统的 inode 编号,因此该命令可用于查找文件的加密路径和未加密路径。

通过这种方式在底层文件系统上搜索文件比通过 ecryptfs 文件系统搜索要快得多。我对一个系统的测量显示,使用冷缓存时两者之间的速度减慢了 8 倍,而使用热缓存时两者之间的速度减慢了 350 倍。

由于存在这些开销,我建议您首先在底层文件系统上找到加密文件。例如,在 Ubuntu 系统的默认配置中,可以使用以下命令:

find /home/.ecryptfs -inum 22545087

这应该会找到加密文件的路径,其中包括找到该文件的主目录的名称。然后在搜索未加密文件名时,您可以立即将搜索限制在一个主目录中:

find /home/username -inum 22545087

如果用户的文件太多,速度太慢,您可以利用 inode 编号一次查找一个目录级别。例如,如果加密文件名为

/home/.ecryptfs/username/.Private/ECRYPTFS_FNEK_ENCRYPTED.AAAAAA/ECRYPTFS_FNEK_ENCRYPTED.BBBBBB/ECRYPTFS_FNEK_ENCRYPTED.CCCCCC

您可以先运行

ls -i /home/.ecryptfs/username/.Private/ECRYPTFS_FNEK_ENCRYPTED.AAAAAA

这将为您提供最外层目录的 inode 编号。然后您可以查找该目录名称的未加密版本:

ls -i /home/username | grep $INODE_NUMBER_FROM_LS

您可以对目录层次结构中的每个级别重复此操作以获取未加密的路径,而不必使用尽可能多的 CPU 时间来解密该主目录中的每个文件名。

答案2

通过以下方式发现导致此问题的文件:

find / -inum <inode number>

您可能会发现一个被截断的文件,这就是 ecryptfs 发出该警告的原因。

尝试使用 cat 读取文件,然后 rm 它以修复警告。

相关内容