Когда я пытаюсь создать базу с sqlite3
в каталоге EFS, это приводит к ошибке:
$ sqlite3 foo.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .log stderr
sqlite> CREATE TABLE foo (int bar);
Error: disk I/O error
Рассматриваемая база данных Sqlite3 должна содержать только метаданные и будет обновляться нечасто. Одновременный доступ не требуется. Однако требуется, чтобы, если процесс, создающий базу данных, умирает, процесс можно было перезапустить на другом хосте и продолжить там, где был завершен предыдущий экземпляр.
Amazon утверждает, что EFS - это «файловая система, доступная для инстансов Amazon EC2 через интерфейс файловой системы (использующий стандартные API-интерфейсы файлового ввода-вывода операционной системы) и поддерживающий полную семантику доступа к файловой системе (например, строгую согласованность и блокировку файлов) ». Таким образом, я предполагаю, что он подходит для поставленной задачи.
Варианты монтирования в /etc/fstab
:
eu-west-1a.fs-ID.efs.eu-west-1.amazonaws.com:/ / efs nfs4 nfsvers = 4.1, rsize = 1048576, wsize = 1048576, hard, timeo = 600, retrans = 2 0 0
Я понимаю, что обычно не рекомендуется размещать базы данных в NFS. Однако я считаю, что, учитывая язык, используемый как Amazon, так и SQLite, разработчики будут продолжать попытки.
.log stderr
, чтобы получить дополнительную информацию об ошибках. - person CL.   schedule 06.02.2017.log stderr
не дает дополнительных результатов - person Jan   schedule 06.02.2017sqlite3
инструмент. - person CL.   schedule 06.02.2017strace
процесс, чтобы увидеть, какие системные вызовы задействованы. Я заметил, что EFS использует очень большие (›32-битные) номера inode, fwiw. - person Michael - sqlbot   schedule 07.02.2017