Linux : comment utiliser cpio pour sauvegarder et restaurer des fichiers
Il existe de nombreuses façons de sauvegarder des fichiers sur des machines Linux. Cet article montre comment utiliser la commande cpio pour copier des fichiers dans une archive, afin de créer des sauvegardes fiables.
L’utilitaire cpio est un outil dédié aux archives, tout comme tar. Il copie les fichiers dans une archive à des fins de sauvegarde et les extrait d’une archive pour les restaurer. En fait, si l’on considère la commande de copie de Linux, cp, le nom de l’outil décrit sa fonction : copier à l’intérieur (inside), copier à l’extérieur (outside).
L’outil cpio est flexible et rapide. Vous pouvez facilement l’utiliser pour automatiser des tâches de sauvegarde ou regrouper des fichiers pour en faciliter le transfert. Cet article explique comment se servir de cpio sur tout système Linux, pour sauvegarder et restaurer des fichiers. Ces exemples fonctionnent de façon similaire sur macOS.
Pour utiliser cpio, commencez par vérifier qu’il est installé sur votre système Linux. Il n’est pas présent dans toutes les distributions. Ouvrez un terminal et tapez la commande suivante :
$ which cpio
Vous devriez voir une sortie indiquant que cpio existe sur le système. Sur la plupart des systèmes, la sortie indique /usr/bin/cpio.
Si nécessaire, installez cpio à l’aide du gestionnaire de paquets de votre distribution. Sur Red Hat et les distributions similaires, tapez la commande suivante :
$ sudo dnf install cpio
Sur Debian et les distributions similaires, tapez cette commande :
$ sudo apt install cpio
Ensuite, exécutez les commandes suivantes pour créer quelques ressources que nous sauvegarderons/restaurerons à titre d’exercice, dans le cadre de cet article.
$ cd ~
$ mkdir projects
$ cd projects/
$ touch file1.txt file2.txt file3.txt
$ echo "File 1 Contents" > file1.txt
Cpio s’appuie plus fortement sur les redirecteurs que d’autres commandes Linux. Voici une présentation rapide des trois redirecteurs que vous utiliserez fréquemment avec cpio.
Redirecteur | Description |
> | Redirige la sortie vers un emplacement particulier. |
< | Récupère les données depuis un emplacement particulier. |
| | Utilise la sortie de la première commande comme entrée de la seconde. |
Utilisez la commande find
La commande find est l’outil principal pour diriger les fichiers vers cpio en vue de leur archivage. Elle permet d’effectuer des recherches en fonction de la propriété, des autorisations, de la taille et d’un grand nombre d’autres paramètres. Vous commencerez probablement par une recherche de base spécifiant tous les fichiers d’un répertoire. La syntaxe de la commande find est la suivante :
$ find /where/to/search parameters
Par exemple, pour spécifier des fichiers dans le répertoire /home/student/projects, tapez ce qui suit :
$ find /home/student/projects
Notez que find affiche une liste de résultats. Cette liste servira d’entrée à cpio. Une autre variante consiste à rechercher plus spécifiquement des fichiers .txt dans le répertoire projects :
$ find /home/student/projects -iname "*.txt"
Dans cet exemple, /home/student/projects est l’emplacement à rechercher ; -iname indique une recherche par nom, en ignorant la casse ; et "*.txt" signifie trouver les fichiers avec l’extension .txt.
Sauvegardez vos fichiers
Les utilisateurs sont parfois déconcertés par les deux options principales de cpio : -o et -i. Cpio opère du point de vue du système de fichiers hôte ; vous copiez donc les fichiers hors du système de fichiers pour créer une sauvegarde. Pour restaurer les fichiers manquants, vous les recopiez à l’emplacement d’origine.
Pour commencer à utiliser cpio, créez une archive et copiez-y les fichiers texte que vous avez créés précédemment. Voici les options de cpio nécessaires à la création d’une archive :
Option | Description |
-o | Crée l’archive de fichiers et y copie les fichiers. Il s’agit de la commande de sauvegarde. |
-v | Mode verbose, affichant les noms des fichiers copiés. |
-p | Préserve les autorisations et la propriété. |
-A | Ajoute des fichiers à une archive existante. |
Assurez-vous d’être dans le répertoire /projects, puis tapez la commande suivante pour créer une archive nommée backup.cpio.
$ find /home/student/projects | cpio -o > /home/student/backup.cpio
Cette commande commence par find pour spécifier le répertoire à copier. Elle crée ensuite l’archive backup.cpio dans le répertoire /home/student et y copie les fichiers sélectionnés. Gardez à l’esprit que vous devez ensuite copier l’archive dans un endroit sûr, tel qu’un disque externe ou un NAS. Si votre archive est vide, vérifiez que vous avez correctement spécifié les fichiers à copier.
Utilisez les options de la commande find ou combinez la commande ls avec des jokers si vous avez seulement besoin de copier des fichiers spécifiques dans l’archive.
Ajoutez des fichiers à une archive
Il peut être utile de combiner des arborescences de répertoires ou d’ajouter des fichiers à une archive existante. Utilisez l’option -A avec -o pour ajouter les fichiers. Ici, par exemple, le contenu du répertoire /old_projects est ajouté à l’archive backup.cpio existante.
$ find /home/student/old_projects | cpio -oA > /home/student/backup.cpio
Simulez des données perdues pour effectuer un test de restauration
Vous avez maintenant sauvegardé vos fichiers texte à l’aide de cpio. Exécutez soigneusement la commande suivante dans le répertoire /projects ; elle aura le même effet que si vous aviez accidentellement supprimé vos fichiers.
$ rm -f *.txt
Utilisez la commande ls pour confirmer que les fichiers ont disparu.
Le processus de restauration de cpio copie les fichiers de l’archive vers l’emplacement de destination. Comme pour l’utilitaire tar, l’extraction des fichiers est juste une action de copie ; elle ne détruit pas l’archive.
Affichez d’abord le contenu de l’archive backup.cpio. Affichez la table des matières de l’archive à l’aide de l’option -t, comme indiqué ci-dessous.
$ cpio -tv < backup.cpio
Veillez à indiquer le chemin d’accès au fichier .cpio s’il ne se trouve pas dans votre répertoire actuel. Vous pouvez visualiser le contenu de l’archive cpio pour confirmer les fichiers que vous souhaitez restaurer.
Voici les options de restauration de cpio :
Option | Description |
-i | Copie les fichiers depuis l’archive. C’est la commande de restauration. |
-v | Mode Verbose. Affiche les noms des fichiers copiés. |
-d | Crée des répertoires selon les besoins. Utilisé pour préciser un répertoire de restauration. |
Ensuite, tapez la commande ci-dessous pour restaurer les fichiers de l’archive :
$ cpio -iv < /home/student/
Vous pouvez dresser la liste du contenu du répertoire à l’aide de la commande ls. Vous devriez voir vos fichiers texte restaurés. Si les fichiers n’apparaissent pas ou ne se trouvent pas à l’emplacement correct, vérifiez le chemin d’accès utilisé avec l’option -d. Tapez cat file1.txt pour afficher le contenu du fichier.
L’archive est extraite dans votre répertoire actuel si vous ne spécifiez pas d’emplacement de destination. Utilisez l’option -d pour définir une destination de restauration. Notez que cpio n’écrase pas les fichiers existants portant le même nom. Voici un exemple :
$ cpio -ivd /home/student/restoreditems < /home/student/
Il existe de nombreux cas d’usage pour cpio. La suite de cet article donne quelques exemples alternatifs de son utilité.
Travaillez avec des archives tar
Cpio peut créer et extraire des archives tar. Cela peut être pratique si vous vous sentez plus à l’aise avec cpio, mais que vous recevez ou téléchargez des fichiers tar. Pour générer une archive tar, tapez ce qui suit :
$ ls | cpio -o -H tar > archive.tar
Pour restaurer les fichiers contenus dans une archive tar, tapez ceci :
$ cpio -i -F < archive.tar
Copiez des arborescences de répertoires
Une variante intéressante de cpio consiste à copier des arborescences de répertoires. Il s’agit du mode "pass-through", qui permet de copier des fichiers d’une arborescence vers une autre sans créer d’archive. Cette fonction peut s’avérer utile pour dupliquer des données entre des disques ou même entre des serveurs.
Cet exemple copie le contenu de /home/student/projects vers /devteam/projects sans créer d’archive :
$ find /home/student/projects | cpio -pdv /devteam/projects
Suivez les liens symboliques
Par défaut, cpio ne suit pas les liens symboliques pour copier le fichier original. Utilisez l’option -L pour récupérer ces fichiers et les ajouter à l’archive. Voici un exemple qui suppose que vous savez que vous avez des liens symboliques dans le répertoire /old_projects.
$ find /home/student/old_projects | cpio -oL > /home/student/backup.cpio
N’oubliez pas que la page de manuel de cpio est très utile pour les options et les exemples. Pour consulter la page de manuel, tapez man cpio.