web-dev-qa-db-fra.com

problèmes de cp avec la copie racine

J'ai un petit script bash qui vérifie si le système a été sauvegardé aujourd'hui et s'il ne le fait pas, il copie l'intégralité du système de fichiers dans le dossier backups:

date=$(date +"%m%d%y")
Sudo mkdir -p "/backups/system/$date"
Sudo cp -r "/" "/backups/system/$date"

Mon problème est que lorsque je saisis ceci, il me donne ces erreurs:

cp: error reading ‘/proc/1/task/1/mem’: Input/output error
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/mem’: Input/output error
cp: error reading ‘/proc/1/task/1/clear_refs’: Invalid argument
cp: failed to extend ‘/backups/system/040315/proc/1/task/1/clear_refs’: Invalid argument
2
Demosthenes

Sous Linux tout est un fichier

(Cela ne signifie pas que vous pouvez les sauvegarder)

Techniquement, tout n'est pas un fichier (je ne suis pas un expert). Cependant, certains dossiers sont spéciaux en ce sens qu'ils ne sont pas de vrais dossiers. /proc n'est qu'un exemple. Il s'agit d'un système de fichiers virtuel contenant des informations sur les fichiers à l'exécution . En d'autres termes, son contenu ne cesse de changer au fur et à mesure de l'exécution du système. Vous ne devriez pas essayer de le sauvegarder.

Les autres dossiers de ce type sont /sys, /mnt, /media, /run et /dev. /sys like /proc est un autre système de fichiers virtuel qui fournit des fenêtres aux variables du noyau en cours d'exécution. Vous ne souhaitez donc pas essayer de les sauvegarder ou de les restaurer. /dev est un fichier tmpfs dont le contenu est créé et supprimé dynamiquement par udev, vous ne souhaitez donc pas le sauvegarder ni le restaurer. De même, /run est un fichier tmpfs contenant des variables relatives au système en cours d'exécution qui n'ont pas besoin d'être sauvegardées. Ce paragraphe est adapté de Backup Your System/TAR .

En général, copier / n'est pas une bonne idée. Remarque, /backups/system/$date fait également partie de /. Il est donc possible que vous finissiez par préparer la sauvegarde jusqu'à ce que Kingdom soit venu ou que vous manquiez d'espace disque.

J'espère que cela t'aides

7
user68186

Ignore les. Vous essayez de copier des fichiers de /proc, ce qui est inutile et ne fonctionnera pas, comme vous l'avez vu. Ce sont essentiellement des fichiers d'exécution créés par le système d'exploitation. Il n'y a pas besoin ni raison d'avoir des sauvegardes de tels fichiers.

L’approche simple consiste donc simplement à ignorer les erreurs. Vous pouvez également empêcher leur apparition en redirigeant la sortie d'erreur vers /dev/null:

Sudo cp -r / "/backups/system/$date" 2>/dev/null

Une approche plus sophistiquée consisterait à spécifier les répertoires que vous souhaitez copier. Par exemple:

Sudo cp -r /lib /usr /mnt /bin /opt /lib64 /tmp /home /sbin /media /etc /root  /boot /var "/backups/system/$date"

Ce sont ceux qui vous intéressent. Vous n'avez probablement pas besoin de /mnt ni de /media.

2
terdon