eCryptfs头错误

在分区通过ecryptfs进行encryption的服务器上出现以下错误。

[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 

卸载下面的encryption分区和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 

我有点不知道发生了什么事。 我们在几个实例上使用相同的设置,我们只在其中一个上观察。

解决scheme可能是更改底层磁盘! 但是我想了解发生了什么事情,以便最终发现并防止这种事件。

当系统没有完全closures时,我已经看到了这种情况。 特别是当encryption的数据存储在主机和USB设备之间的连接有点不可靠的USB设备上时,我已经看到了这种情况。 但是我相信在文件被写入时其他非干净的closures也可能导致它。

按照乔万尼的回答build议的inodesearch确实可以用来find有问题的文件。 由于ecryptfs保留底层文件系统的inode编号,因此可以使用该命令查找文件的encryption和未encryptionpath。

以这种方式在底层文件系统上search文件比searchecryptfs文件系统快得多。 我在一个系统上的测量结果显示,两者之间的caching速度减缓了8倍,而热caching则减less了350倍。

由于这个开销,我build议你先在底层文件系统上findencryption文件。 例如,在Ubuntu系统的默认configuration中,可以使用以下命令:

 find /home/.ecryptfs -inum 22545087 

这应该findencryption文件的path,其中包括它所在的主目录的名称。 然后,在search未encryption的文件名时,可以立即将search限制在一个主目录中:

 find /home/username -inum 22545087 

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

 /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号码。 然后,您可以查找该目录名称的未encryption版本:

 ls -i /home/username | grep $INODE_NUMBER_FROM_LS 

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

发现哪个文件是通

 find / -inum <inode number> 

你可能会find一个截断的文件,这就是ecryptfs提出这个警告的原因。

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