Graças à dica do @ Kenster, encontrei o problema. Eu estava enganado ao supor que a montagem NFS do AWS File Storage Gateway suportava links físicos, como a documentação afirma claramente que isso não acontece.
Eu estava tão certo de que era o caso que acabei rastreando as chamadas do sistema com strace. Se você anexar um cliente sftp ao seu servidor enquanto estiver ssh, adicione o pid do processo sftp atual com ps -eaf | grep sftp
. Então você pode rastrear as chamadas do sistema com strace e salvar a saída em um arquivo com este comando: strace -ff -p 2116 -o sftp_rename.log
onde -ff está seguindo os processos filhos, -p é o pid e -o é o arquivo de saída.
Isso vai te dar uma saída realmente terrível, mas o que achei interessante foi esse:
write(7, "# ln asdfasdf.txt link.txt
ln: failed to create hard link ‘link.txt’ => ‘asdfasdf.txt’: Unknown error 524
#
oldpath = self._adjust_cwd(oldpath)
newpath = self._adjust_cwd(newpath)
self._log(DEBUG, 'posix_rename({!r}, {!r})'.format(oldpath, newpath))
self._request(
CMD_EXTENDED, "[email protected]", oldpath, newpath
)
write(7, "# ln asdfasdf.txt link.txt
ln: failed to create hard link ‘link.txt’ => ‘asdfasdf.txt’: Unknown error 524
#
oldpath = self._adjust_cwd(oldpath)
newpath = self._adjust_cwd(newpath)
self._log(DEBUG, 'posix_rename({!r}, {!r})'.format(oldpath, newpath))
self._request(
CMD_EXTENDED, "[email protected]", oldpath, newpath
)
%pre%L%pre%%pre%%pre%%pre%%pre%%pre%Drename old \"/testuse"..., 80) = 80
lstat("/testuser/test/asdfasdf.txt", {st_mode=S_IFREG|0664, st_size=159, ...}) = 0
link("/testuser/test/asdfasdf.txt", "/testuser/test/as.txt") = -1 ENOTSUPP (Unknown error 524)
L%pre%%pre%%pre%%pre%%pre%%pre%Drename old \"/testuse"..., 80) = 80
lstat("/testuser/test/asdfasdf.txt", {st_mode=S_IFREG|0664, st_size=159, ...}) = 0
link("/testuser/test/asdfasdf.txt", "/testuser/test/as.txt") = -1 ENOTSUPP (Unknown error 524)
Que eu então testei com um simples comando de link para criar um link físico, que falhou.
%pre% O que me levou de volta à documentação da AWS. Isso não é tudo, aparentemente, renomear SFTP vai trabalhar com determinados clientes (como a Paramiko) que implementam um protocolo CMD_EXTENDED
específico do vendedor, como A Paramiko faz :
Parece não haver nenhuma maneira de forçar o uso da opção posix-rename
para todos os clientes, mas pelo menos sabemos o que aconteceu e por quê.