Backup externo - erro "cp: cannot create common file"

6

Eu sempre fiz backup do meu diretório pessoal para um disco rígido externo usando o comando cp -r .

Até recentemente, funcionava bem, mas agora recebo regularmente a mensagem de erro cp: cannot create regular file seguido por invalid argument ou cp: cannot create symbolic link seguidos por operation not permitted .

Eu testei sudo cp -r , mas o problema persiste. O que estou fazendo errado?

    
por Lolwhites 02.03.2011 / 14:09

4 respostas

4

cp -rv deveria pelo menos dizer em qual arquivo ele está se esquivando.

O problema que você está tendo parece estar copiando um link simbólico (que é um arquivo que apenas aponta para outro) para um sistema de arquivos que não suporta links simbólicos. Existem três opções para isso:

  • Transforme seu volume de backup em um sistema de arquivos que aceita links simbólicos (por exemplo, reformate-o de FAT ou NTFS para EXT3 ou EXT4). Pode ser uma dor dependendo de quantos dados você tem lá (que você pode ter que fazer malabarismos enquanto faz isso).

  • Apenas ignore links simbólicos e não os copie. Isso pode quebrar coisas se você tentar restaurar, pois alguns arquivos estarão faltando.

  • Expanda links simbólicos para que eles contenham uma cópia dos dados reais. Isso ocupa mais espaço.

A primeira opção seria minha, mas se você precisar da unidade para outro sistema que não suporta volumes EXTx, isso é um problema.

Independentemente de as duas opções serem ou não realistas, eu executei cp com sua sinalização detalhada para ver com o que você está lidando. Se for um arquivo único, talvez uma cópia simples esteja bem, se não for, e é apenas um ajudante inútil, talvez omitir isso seria bom.

Mas, como observação, a maioria das pessoas parece preferir usar rsync para fazer backups. Tem um monte de opções que o tornam perfeito para o trabalho. Você pode ler uma versão do seu manual aqui . Ele tem várias opções (como descrito acima) sobre como lidar com links simbólicos.

    
por Oli 02.03.2011 / 15:03
3

Um conflito entre os nomes de arquivos de origem e o sistema de arquivos de destino pode causar o erro cannot create regular file . Se você estiver copiando para um pendrive USB, provavelmente está usando o sistema de arquivos vfat ou fat32, que está sujeito ao usual R restrições de nomenclatura do Windows .

Para observar isso, tente criar um arquivo chamado : , que é um caractere reservado do Windows.

$ cp /dev/null /path/to/dest/:
cp: cannot create regular file '/path/to/dest/:': Invalid argument

Para ver o erro Operation not permitted separadamente, tente criar um symlink sem copiar.

$ ln -s somesillysymlink /path/to/dest/symlink
ln: failed to create symbolic link '/path/to/dest/symlink': Operation not permitted

Se você vir esses erros, essa provavelmente é a causa do seu problema.

Provavelmente, a abordagem mais simples é criar um arquivo livre das restrições de nomenclatura que você encontrou e também preservar links simbólicos. Por padrão, tar e 7z preservam links simbólicos. zip preserva links simbólicos com o sinalizador apropriado. Cada um deles pode armazenar arquivos que possuem caracteres reservados do Windows em seus nomes. Veja também “ Como posso compactar / zip um link simbólico?

Substituir o sistema de arquivos vfat por algo mais amigável ao Linux - como o ext4 - poderia aliviar o seu problema, mas ao custo da portabilidade reduzida. Quase qualquer sistema Linux seria capaz de montar a unidade, mas outros sistemas comuns exigiriam trabalho extra. Vejo “ Criando a partição ext4 do console ” e o mke2fs manpage para detalhes sobre o final da criação do processo. Vejo  “Como ler partições ext4 no Windows?” Como ler partições ext4 no Windows? ”,“ Como montar o Ext4 usando o OS X Fuse ”se você precisar mover essa unidade para outros sistemas operacionais.

    
por wyrm 21.07.2015 / 10:46
1

Veja seu dmesg . O problema usual é o problema do sistema de arquivos ou o disco rígido com falha (e, portanto, o problema do sistema de arquivos).

Você pode extrair o disco externo e executar fsck . Por exemplo

umount /dev/sdb1
fsck -f /dev/sdb1
    
por Olli 02.03.2011 / 14:20
0

Acabei de me deparar com o mesmo problema (na verdade, no Cent OS via VirtualBox) e o problema estava relacionado às permissões. Eu tinha um diretório compartilhado com minha máquina local (um Mac no OSX Mavericks), tentei um cp e ele empatou em Protocol error . Na minha máquina local, mudei o proprietário do diretório para o usuário regular (eu) (de root ) e o grupo para algo mais genérico do que wheel . Então, acabou sendo um problema básico de permissões.

    
por cdmo 21.01.2015 / 15:52