Монтирование SSHFS в AWS Transfer для SFTP: невозможно создать обычный файл

Я пытаюсь настроить точку монтирования SSHFS с помощью нового сервиса Amazon Transfer for SFTP. Я могу sftp в конечную точку просто отлично, используя sftp и может получить / положить файлы.

Я могу смонтировать его используя sshfs, У меня проблемы, когда при копировании и перемещении файлов появляются ошибки. Всякий раз, когда я делаю это создает 0-байтовые файлы. У меня нет проблем с использованием rm удалить их. Что также странно, это то, что если я выпускаю 2-й cp команда, он спрашивает, хочу ли я перезаписать, и тогда файл там отлично.

Вот несколько примеров с отладкой SSHFS.

Обратите внимание, что я делаю все как root:

~$ sshfs -o workaround=all -o reconnect -o delay_connect -o sshfs_sync \
-o sync_readdir -o no_readahead -o debug -o noauto_cache \
-o cache=no user@my.endpoint:/my-bucket /mnt/s3

FUSE library version: 2.9.7
nullpath_ok: 1
nopath: 1
utime_omit_ok: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.26
flags=0x001ffffb
max_readahead=0x00020000
   INIT: 7.19
   flags=0x00000011
   max_readahead=0x00020000
   max_write=0x00020000
   max_background=0
   congestion_threshold=0
   unique: 1, success, outsize: 40
unique: 2, opcode: ACCESS (34), nodeid: 1, insize: 48, pid: 2285
access / 04
   unique: 2, success, outsize: 16
unique: 3, opcode: LOOKUP (1), nodeid: 1, insize: 47, pid: 2285
LOOKUP /.Trash
getattr /.Trash
X11 forwarding request failed on channel 0
   unique: 3, error: -2 (No such file or directory), outsize: 16
unique: 4, opcode: LOOKUP (1), nodeid: 1, insize: 52, pid: 2285
LOOKUP /.Trash-1000
getattr /.Trash-1000
   unique: 4, error: -2 (No such file or directory), outsize: 16

Это, кажется, успешно смонтировать. Я могу ls и получить быстрый ответ.

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

Но когда я пытаюсь cp что-нибудь:

~$ cp temp.txt /mnt/s3
cp: cannot create regular file './temp.txt': No such file or directory

unique: 86, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 18222
getattr /
   unique: 86, success, outsize: 120
unique: 87, opcode: LOOKUP (1), nodeid: 1, insize: 49, pid: 18222
LOOKUP /temp.txt
getattr /temp.txt
   unique: 87, error: -2 (No such file or directory), outsize: 16
unique: 88, opcode: LOOKUP (1), nodeid: 1, insize: 49, pid: 18222
LOOKUP /temp.txt
getattr /temp.txt
   unique: 88, error: -2 (No such file or directory), outsize: 16
unique: 89, opcode: CREATE (35), nodeid: 1, insize: 65, pid: 18222
create flags: 0x80c1 /temp.txt 0100644 umask=0022
   unique: 89, error: -2 (No such file or directory), outsize: 166

Что странно, так это то, что он создает 0-байтовый файл после небольшой задержки:

~$ ls /mnt/s3
-rwxr--r-- 1 root root 0 Mar  7 12:19 temp.txt

Если я выпущу второй cp он будет перезаписан без проблем:

~$ cp temp.txt /mnt/s3
cp: overwrite './temp.txt'? y

unique: 65, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 18131
getattr /
   unique: 65, success, outsize: 120
unique: 66, opcode: LOOKUP (1), nodeid: 1, insize: 49, pid: 18131
LOOKUP /temp.txt
getattr /temp.txt
   NODEID: 6
   unique: 66, success, outsize: 144
unique: 67, opcode: LOOKUP (1), nodeid: 1, insize: 49, pid: 18131
LOOKUP /temp.txt
getattr /temp.txt
   NODEID: 6
   unique: 67, success, outsize: 144
unique: 68, opcode: OPEN (14), nodeid: 6, insize: 48, pid: 18131
open flags: 0x8001 /temp.txt
   open[139699381340688] flags: 0x8001 /temp.txt
   unique: 68, success, outsize: 32
unique: 69, opcode: SETATTR (4), nodeid: 6, insize: 128, pid: 18131
truncate /temp.txt 0
getattr /temp.txt
   unique: 69, success, outsize: 120
unique: 70, opcode: WRITE (16), nodeid: 6, insize: 539, pid: 18131
write[139699381340688] 459 bytes to 0 flags: 0x8001
   write[139699381340688] 459 bytes to 0
   unique: 70, success, outsize: 24
unique: 71, opcode: FLUSH (25), nodeid: 6, insize: 64, pid: 18131
flush[139699381340688]
   unique: 71, success, outsize: 16
unique: 72, opcode: RELEASE (18), nodeid: 6, insize: 64, pid: 0
release[139699381340688] flags: 0x8001
   unique: 72, success, outsize: 16

~$ ls /mnt/s3
-rwxr--r-- 1 root root 459 Mar  7 12:26 temp.txt

С помощью rm не проблема Работает как положено.

mv команда имеет ту же проблему, что и cp,

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

1 ответ

Не для того, чтобы некротизировать тему, но s3ql может делать то, что вы хотите. Представляет собой совершенно обычную файловую систему POSIX, которую вы монтируете и сохраняете в хранилище объектов S3. Дедупликация, выбор сжатия (для скорости использую zlib), еще и шифровать можно. Он использует кеш (по умолчанию 5 ГБ)

Он представляет собой вполне обычную файловую систему POSIX, я скомпилировал ее, запустил с нее образы VirtualBox, приложения Wine, помимо sshfs и rsync. Я использую локальный сервер (укажите ему каталог, и он сохранит там объекты, в результате вы получите дерево каталогов, состоящее из множества файлов размером 10 МБ или меньше.) Но, конечно, как следует из названия, это в первую очередь для S3, а также поддерживает несколько других облачных систем хранения объектов. Он использует кеш для используемых в данный момент фрагментов файлов (как для чтения, так и для записи), который, как мне кажется, по умолчанию равен 5 ГБ, для моего использования я установил его на 50. (Я использую его для расширения своего хранилища из-за дедупликации и Сжатие У меня около 6 ТБ файлов на жестком диске емкостью 4 ТБ, и еще около 1 ТБ свободно.)

Одна из возможных ложек дегтя: s3ql — это монопольный доступ, вы не можете иметь несколько экземпляров, указывающих на одно и то же хранилище объектов. Вы можете смонтировать его на одном из них, а затем поделиться им через sshfs, nfs или что-то еще.

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