rsync «Opération non autorisée»

9

J'essaye donc une simple rsync sur un disque dur USB, la commande est

rsync -az --modify-window=2 /home /mnt/exthd/tmp/

Je lance ceci en tant que root.

mais je reçois beaucoup d'erreurs qui semblent toutes liées à des autorisations insuffisantes:

rsync: chown "/mnt/exthd/tmp/home/someuser" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bash_logout" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bash_profile" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bashrc" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bash_logout" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bash_profile" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bashrc" failed: Operation not permitted (1)
rsync: symlink "/mnt/exthd/tmp/home/guest/fred2" -> "fred" failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1042) [sender=3.0.7]

Ceci est la version 3.0.7. J'ai essayé d'utiliser l'option --super sans effet. Des idées?

Tim l'Enchanteur
la source
Quel est le système de fichiers sur le disque USB?
Caleb
Le disque externe est-il formaté en FAT (32)? Cela ne fonctionnerait pas car FAT ne connaît pas les attributs de propriété des fichiers.
Sven
@Caleb Je suppose que c'est FAT, mais comment dire?
Tim the Enchanter
La course mount | grep /mnt/exthddevrait vous le dire.
Caleb
@Caleb est dit vfat
Tim l'Enchanteur

Réponses:

14

Le système de fichiers FAT (que le montage de Linux appelle vfat) n'est pas capable de stocker certaines des données d'autorisation et de propriété qui sont stockées sur vos fichiers du côté Linux.

Vos options semblent être:

  • Formatez le disque avec ext3 / 4 ou un autre système de fichiers qui prend en charge ces attributs. Je pense que même NTFS ferait le travail si vous partagez avec Windows.
  • Stockez ces propriétés supplémentaires en utilisant l' --fake-superoption pour que rsync écrit des xattrs dans le fichier au lieu d'utiliser les attributs du système de fichiers
  • Ignorez l'erreur, ces propriétés seront simplement perdues.
  • Enveloppez votre ensemble de données dans un fichier tar et placez le fichier tar sur le système FAT. Tous les attributs sont conservés et seront présents si vous les extrayez jamais.
Caleb
la source
--fake-super ne fonctionne pas non plus, bien que l'erreur passe de Opération non autorisée (1) à Opération non prise en charge (95)
Tim the Enchanter
Hm. Vous pouvez utiliser --no-ownerpour ne pas essayer de définir le propriétaire pour qu'il corresponde. (FAT n'a pas de propriété propriétaire) et possible --no-permsaussi.
Caleb
merci pour votre aide, vraiment bien, ne fonctionne toujours pas bien que l'erreur ait changé à nouveau, chaque ligne d'erreur a maintenant rsync: failed to write xattr user.rsync.%statau début.
Tim the Enchanter
3

Rsync tente une opération (chown et symlink) que le système de fichiers n'autorise pas ou ne peut pas effectuer. Je suppose que votre disque dur externe possède un système de fichiers FAT.

Si vous souhaitez effectuer une sauvegarde correcte, vous pouvez utiliser tar.

Sgaduuw
la source
1
Ou un système de fichiers décent.
womble
FAT ressemble plus à un référentiel de fichiers, pas à un système de fichiers. :-)
Janne Pikkarainen
Personnellement - je déteste rsync. J'ai vu trop d'erreurs de différents types lors de son utilisation pour copier des fichiers et des répertoires de mon MAC vers un partage réseau sur mon routeur qui utilise le système de fichiers NFS. J'ai également dû reformater ce lecteur plusieurs fois car rsync a créé des fichiers qui étaient verrouillés et ne pouvaient pas être supprimés. La raison pour laquelle j'ai continué à essayer d'utiliser rsync vs cp était qu'il prend en charge les filtres d'exclusion et qu'il est censé être plus rapide. En fin de compte, j'ai écrit quelques classes Java très simples - Copy.java et CopyJob.java qui est un Runnable pour prendre en charge le multithread et ajouter la prise en charge des filtres ... :)
jrobertsz66