У меня настроен sftp на экземпляре aws ec2. Клиент, передающий файл размером 20–30 МБ каждую ночь. Примерно половину времени передача не работает, и я не могу понять, почему. Я сам пробовал это у разных клиентов и никогда не видел, чтобы это не работало. Сегодня я был на сервере во время передачи файлов и смотрел журналы в прямом эфире. Вот пример вывода:
Aug 17 09:01:19 internal-sftp[16260]: session opened for local user someuser from [55.66.77.88]
Aug 17 09:01:19 internal-sftp[16260]: received client version 4
Aug 17 09:01:19 internal-sftp[16260]: realpath "."
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3294: sent names count 1
Aug 17 09:01:19 internal-sftp[16260]: opendir "/somedir"
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 1110: sent handle handle 0
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: readdir "/somedir" (handle 0)
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: sent names count 3
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: readdir "/somedir" (handle 0)
Aug 17 09:01:19 internal-sftp[16260]: sent status End of file
Aug 17 09:01:20 internal-sftp[16260]: closedir "/somedir"
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
Aug 17 09:01:20 internal-sftp[16260]: open "/somedir/thefile.zip" flags WRITE,CREATE,TRUNCATE mode 0666
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1383: sent handle handle 0
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 0 len 32739
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 32739 len 32739
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
(more of the same...)
Aug 17 09:01:54 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 27238848 len 10072
Aug 17 09:01:55 internal-sftp[16260]: sent status Success
Aug 17 09:01:55 internal-sftp[16260]: close "/somedir/thefile.zip" bytes read 0 written 27248920
Aug 17 09:01:55 internal-sftp[16260]: sent status No such file
Aug 17 09:01:55 internal-sftp[16260]: debug1: read eof
Aug 17 09:01:55 internal-sftp[16260]: session closed for local user someuser from [55.66.77.88]
Если вы сравните эти журналы с журналами для успешной передачи файлов, разница будет только в самом конце. Когда передача файла успешно, он говорит
Aug 16 09:01:20 internal-sftp[12200]: sent status Success
Принимая во внимание, что, когда это терпит неудачу, это говорит
Aug 17 09:01:55 internal-sftp[16260]: sent status No such file
Передача файла занимает 20 - 30 секунд, и в тот момент, когда я запускал ls
в somedir
файл фактически не отображался на диске. Когда передача прошла успешно, файл сразу же появился на диске, даже до завершения передачи. Таким образом, журнал правильный, там действительно нет файла, но я не могу понять, почему нет. Как вы можете видеть, он записывает на сервер более 27 МБ.
Необходимо учитывать, что у меня есть инструмент s3fs-fuse, работающий в /somedir
. Этот инструмент синхронизирует каталог с корзиной AWS S3, так что все, что записывается или удаляется из каталога, записывается или удаляется из корзины. Я думаю, что это может сделать некоторые вещи низкого уровня с файловой системой. Не уверен, может быть, это как-то связано с этим.
Есть идеи?