Estou tentando criar um link físico, mas recebo uma mensagem de erro "Operação não permitida"
tikey@helios64:/data/$ ln /data/dir1/img1.jpg /data/dir2/
ln: failed to create hard link '/data/dir2/img1.jpg' => '/data/dir1/img1.jpg': Operation not permitted
Ao adicionar um -s
ao comando, posso, no entanto, criar um softlink. Eu também posso copiar o arquivo. Então meu usuário tem permissão para criar arquivos no diretório.
Por que recebo um erro de permissão ao tentar criar o link físico e o que posso fazer para evitar isso?
Editar - Informações adicionais com base em algumas respostas:
O sistema de arquivos é ext4 e também há uma montagem de ligação de dir1
on /srv
(mas a desmontagem /srv/dir1
não faz diferença):
/dev/md127 on /data type ext4 (rw,relatime,stripe=256)
/data/dir1 on /srv/dir1 type fuse (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other)
O dispositivo está configurado como raid 5:
md127 : active raid5 sdc[1] sdb[2] sdd[0]
7813772288 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
bitmap: 0/30 pages [0KB], 65536KB chunk
lsattr
para o arquivo mostra:
tikey@helios64:/data$ lsattr dir1/img1.jpg
--------------e------- dir1/img1.jpg
As respostas fornecidas me colocaram no caminho certo - obrigado. O problema era a propriedade do arquivo. O arquivo pertence a um ID de usuário que não existe mais.
É por isso que depois de copiar o arquivo para
copy.jpg
o link físico pode ser criado. Depois de alterar a propriedade deimg1.jpg
, também o link físico paraimg1.jpg
pode ser criado.Conforme apontado nos comentários, esse comportamento pode ser configurado, veja esta resposta em Unix&Linux SE . Para verificar qual comportamento está configurado, verifique
/proc/sys/fs/protected_hardlinks
.Se revelar 1, significa que - entre outras condições - o UID do sistema de arquivos do processo que cria o link deve corresponder ao proprietário (UID) do arquivo de destino
Observe que isso diz
Operation not permitted
em vez dePermission denied
.Além das permissões, há vários motivos pelos quais um link físico não pode ser feito:
Invalid cross-device link
Operation not permitted
hard link not allowed for directory
Portanto, provavelmente o sistema de arquivos no qual você está tentando fazer o link físico não suporta links físicos para este arquivo por algum motivo.
Nota: esta resposta foi escrita antes do OP usado
lsattr
e mostrou que a premissa da resposta não se aplica ao seu caso específico. Ainda assim, acho que a imutabilidade é uma hipótese sã em geral. A resposta está para futuros usuários para quem pode ser útil.Pode ser que o arquivo seja imutável. Corra
lsattr /data/dir1/img1.jpg
para confirmar. A presença dei
significa "imutável".De
man 1 chattr
:Você limpa o
i
atributo commas o recurso mencionado é necessário, portanto, provavelmente você precisará do
sudo
. Antes de remover o atributo, é bom pensar por que o atributo está lá. Se você precisar configurá-lo de volta:chattr +i …
. Observe que isso altera os metadados do arquivo real (pense: inode), não de sua entrada de diretório (nome, caminho); então, se você conseguir criar um hardlink depoischattr -i
e depoischattr +i
o caminho original, seu hardlink se tornará imutável porque é o mesmo arquivo.