Normalmente, um link simbólico é inerte: ele pode armazenar qualquer seqüência de bytes (exceto bytes nulos e somente até um determinado comprimento). Ao criar um link simbólico, é irrelevante se o conteúdo aponta para um arquivo existente. É somente ao acessar o link simbólico que a existência do alvo é importante. Então, o que você está vendo no seu VPS é anormal (e incomum, para iniciar).
O Virtfs é um sistema de arquivos projetado para máquinas virtuais KVM / QEMU onde o convidado e o host estão executando o Linux. Este sistema de arquivos apresenta uma parte do sistema de arquivos do host no guest. Ele permite compartilhar arquivos entre o convidado e o host de maneira fácil e rápida (mais rápido que um sistema de arquivos de rede). É útil em um VPS, por exemplo, em que todos os convidados estão executando o mesmo sistema operacional, portanto, os arquivos do sistema operacional são compartilhados (somente leitura, espera-se) entre o host e todos os convidados. Ele também pode ser usado para arquivos específicos de convidados (que não são compartilhados com nenhum outro convidado).
O Virtfs oferece dois modos de armazenamento: mapeado e passthrough . O modo Passthrough, como o nome sugere, simplesmente passa os comandos de manipulação de arquivos do convidado para o host; por exemplo, criar um symlink no guest cria um symlink no host. O modo mapeado usa atributos estendidos no host para armazenar metadados de arquivos e torna todos os arquivos de propriedade do usuário que está executando o QEMU. O modo mapeado é apropriado para armazenar arquivos por convidado, porque eles pertencem ao único usuário que está executando o QEMU, não importando o usuário que os possui no guest. Seu site é presumivelmente armazenado em uma instância do virtfs no modo mapeado.
No modo mapeado, os links simbólicos são armazenados como um arquivo regular, com um atributo estendido indicando que eles são um link simbólico. Isso, por si só, não explica o seu problema. No entanto, abre uma janela de oportunidade para algo dar errado. Parece que algo está verificando a existência de alvos de links simbólicos e negando a criação deles se o destino não existir.
Eu não tenho experiência com virtfs, então não posso dizer se isso é devido a alguma opção de configuração. Eu encontrei um problema semelhante ao seu . O usuário afetado também estava em um VPS e também recebeu erros de “permissão negada” ao tentar criar um link simbólico pendente. Sua conclusão foi
FYI, the problem is not RedHat 4.4 - the
ln -s
command is broken on purpose by the system provider to prevent users from installing things like RVM.
Você pode entrar em contato com seu provedor de VPS para solicitar uma explicação e, com sorte, uma correção.
Se você não conseguir obter uma correção, uma solução alternativa seria primeiro copiar diretórios e arquivos regulares e, em seguida, copiar os links simbólicos. Eu não acho que nenhum dos programas de cópia usuais (GNU cp
, rsync, cpio, tar, pax) tenha qualquer forma de copiar tudo, mas deixar apenas os links simbólicos. Uma solução simples é executar a cópia duas vezes (com rsync, para que os arquivos já copiados não sejam copiados novamente), ignorando os erros na primeira rodada:
rsync -a source/ destination/ 2>/dev/null
rsync -a source/ destination/