web-dev-qa-db-fra.com

Sauvegarde externe - erreur "cp: impossible de créer un fichier normal"

J'ai toujours sauvegardé mon répertoire personnel sur un disque dur externe à l'aide de la commande cp -r.

Jusqu'à récemment, cela fonctionnait bien, mais maintenant, le message d'erreur cp: cannot create regular file est suivi régulièrement par invalid argument ou cp: cannot create symbolic link suivi de operation not permitted.

J'ai essayé Sudo cp -r mais le problème persiste. Qu'est-ce que je fais mal?

6
Lolwhites

cp -rv devrait au moins vous dire sur quel fichier il se perd.

Le problème que vous rencontrez semble vouloir dire que vous copiez un lien symbolique (c'est-à-dire un fichier pointant simplement vers un autre) vers un système de fichiers ne prenant pas en charge les liens symboliques. Il y a trois options pour cela:

  • Transformez votre volume de sauvegarde en un système de fichiers acceptant les liens symboliques (par exemple, reformatez-le de FAT ou NTFS en EXT3 ou EXT4). Cela peut être pénible en fonction de la quantité de données que vous avez là-bas (que vous pourriez avoir à jongler pendant que vous le faites).

  • Ignorez simplement les liens symboliques et ne les copiez pas. Cela pourrait casser des choses si vous essayez de restaurer car certains fichiers seront manquants.

  • Développez les liens symboliques pour qu'ils contiennent une copie des données réelles. Cela prend plus de place.

Le premier serait mon choix, mais si vous avez besoin du lecteur pour un autre système qui ne prend pas en charge les volumes EXTx, c'est un problème.

Que les deux deuxièmes options soient réalistes ou non, je lancerais cp avec son drapeau de commentaires pour voir à quoi vous avez affaire. S'il s'agit d'un seul fichier, peut-être qu'une copie ordinaire conviendrait, si ce n'est pas le cas et qu'il ne s'agit que d'une aide temporaire, peut-être que le fait de l'omettre serait acceptable.

Cependant, la plupart des gens semblent préférer utiliser rsync pour effectuer des sauvegardes. Il a beaucoup d'options qui le rendent parfait pour le travail. Vous pouvez lire une version de sa page de manuel ici . Comme indiqué ci-dessus, il propose différentes options pour gérer les liens symboliques.

4
Oli

Un conflit entre les noms de fichier source et le système de fichiers cible peut provoquer l'erreur cannot create regular file. Si vous copiez sur une clé USB, vous utilisez probablement le système de fichiers vfat ou fat32, qui est soumis aux règles habituelles restrictions de nommage de Windows .

Pour observer cela, essayez de créer un fichier nommé :, qui est un caractère réservé à Windows.

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

Pour voir l'erreur Operation not permitted séparément, essayez de créer un lien symbolique sans copier.

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

Si vous voyez ces erreurs, c'est probablement la cause de votre problème.

L'approche la plus simple consiste probablement à créer une archive exempte des restrictions de dénomination rencontrées et à préserver les liens symboliques. Par défaut, tar et 7z préservent les liens symboliques. Zip préserve les liens symboliques avec le drapeau approprié. Chacun de ceux-ci peut stocker des fichiers dont le nom contient des caractères réservés à Windows. Voir aussi “ Comment puis-je compresser/compresser un lien symbolique?

Remplacer le système de fichiers vfat par quelque chose de plus convivial pour Linux, tel que ext4, permettrait de résoudre votre problème, mais au prix d'une portabilité réduite. Presque tous les systèmes Linux seraient capables de monter le lecteur, mais d'autres systèmes courants nécessiteraient un travail supplémentaire. Voir “ Création d'une partition ext4 à partir de la console ” et de la page de manuel mke2fs pour obtenir des détails sur la fin de la création du processus. Voir “ Comment lire des partitions ext4 sous Windows? ”, “ Comment puis-je monter un système de fichiers ext4 sous OS X? ”, et “ Comment Montez Ext4 avec OS X Fuse ”si vous devez déplacer ce lecteur vers un autre système d’exploitation.

3
wyrm

Voir votre dmesg. Le problème habituel est soit un problème de système de fichiers, soit un disque dur défaillant (et donc un problème de système de fichiers).

Vous pouvez démonter un disque externe, puis exécuter fsck. Par exemple

umount /dev/sdb1
fsck -f /dev/sdb1
1
Olli

Je viens de rencontrer le même problème (en fait sur Cent OS via VirtualBox) et le problème était lié aux autorisations. J'ai eu un répertoire partagé avec ma machine locale (un Mac sur OSX Mavericks), j'ai tenté une cp et le résultat a été annulé sur Protocol error. Dans ma machine locale, j'ai changé le propriétaire du répertoire en utilisateur normal (moi) (de root) et le groupe en un nom plus générique que wheel. Donc, s'est avéré être un problème d'autorisations de base.

0
cdmo