Ошибки заголовков 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

Я немного не в силах понять, что происходит. Мы используем одну и ту же настройку в нескольких экземплярах, и мы наблюдаем это только на одном из них.

Решением может быть изменение базовых дисков! Но я хотел бы понять, что происходит, чтобы в конечном итоге обнаружить и предотвратить подобные инциденты.

2 ответа

Я видел, как это происходило, когда система не была полностью отключена. В частности, я видел, как это происходило, когда зашифрованные данные хранились на устройстве USB, где соединение между хостом и устройством USB было немного ненадежным. Но я считаю, что другие неочищенные завершения работы во время записи файлов также могут быть причиной этого.

Поиск по индоду, как предложено в ответе Giovanni Toraldo, действительно может быть использован для поиска проблемного файла. Поскольку ecryptfs сохраняет номера инодов базовой файловой системы, эту команду можно использовать для поиска как зашифрованного, так и незашифрованного пути к файлу.

Поиск файла в основной файловой системе таким способом значительно быстрее, чем поиск в файловой системе ecryptfs. Мои измерения на одной системе показали замедление в 8 раз между двумя с холодным кэшированием и разницей в 350 раз с горячим кэшем.

Из-за этих накладных расходов я предлагаю вам сначала найти зашифрованный файл в базовой файловой системе. Например, в конфигурации по умолчанию в системе Ubuntu эта команда может быть использована:

find /home/.ecryptfs -inum 22545087

Это должно найти путь к зашифрованному файлу, который включает имя домашнего каталога, в котором он был найден. Затем при поиске незашифрованного имени файла вы можете сразу же ограничить поиск только одним домашним каталогом:

find /home/username -inum 22545087

Если у пользователя так много файлов, что это слишком медленно, вы можете воспользоваться номерами инодов для поиска одного уровня каталога за раз. Например, если зашифрованное имя файла было

/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

Это даст вам номер инода внешнего каталога. Затем вы можете посмотреть незашифрованную версию этого имени каталога:

ls -i /home/username | grep $INODE_NUMBER_FROM_LS

Вы можете повторить это для каждого уровня в иерархии каталогов, чтобы получить незашифрованный путь без необходимости использовать столько процессорного времени, сколько требуется для расшифровки каждого имени файла в этом домашнем каталоге.

Узнайте, какой файл вызывает это, с помощью:

find / -inum <inode number>

Вы, вероятно, найдете усеченный файл, и именно поэтому ecryptfs выдает это предупреждение.

Попробуйте прочитать файл с помощью команды cat, и нажмите на него, чтобы исправить предупреждение.

Другие вопросы по тегам