# Comment créer une image disque à partir d'un répertoire {{METATOC 4-5}} Cet article examine plusieurs façons de créer une image disque à partir d'un répertoire. #### Utilisation genisoimage et mkisof Il existe de nombreux outils tels que **genisoimage** et **mkisof** à cet effet. Pour installer **genisoimage** Sous Ubuntu/Debian exécuter les commandes suivantes: ``` sudo apt-get update -y sudo apt-get install -y genisoimage ``` Sous CentOS/Redhat/Fedora télécharger le paquet puis installer avec yum: ``` sudo yum installer wget -y sudo wget http://mirror.centos.org/centos/7/os/x86_64/Packages/genisoimage-1.1.11-25.el7.x86_64.rpm sudo yum install genisoimage-1.1.11-25.el7.x86_64.rpm -y ``` Une fois **genisoimage** installé, on peut créer une image ISO à partir du répertoire avec la commande suivante. ``` $ sudo genisoimage -o nom_fichier.iso /chemin/vers/répertoire ``` De même, on peut également utiliser la commande mkisofs pour créer une image ISO à partir du répertoire. ``` $ sudo mkisofs -o nom_fichier.iso /chemin/vers/répertoire ``` #### Utilisation de dd et losetup Voici un ensemble de commandes pour créer un fichier image à partir du répertoire. Créer un dossier pour l'image disque ``` $ sudo mkdir dossier_image $ cd dossier_image ``` Créee un fichier image pour contenir le dossier. Nous allons créer un fichier image.ext3 de 750 mb. ``` dd if=/dev/zero of=image.ext3 bs=1024 count=768000 ``` Depuis la version 2.6.31 du noyau Linux, l'appel système fallocate(2) est pris en charge pour les systèmes de fichiers Btrfs, ext4, OCFS2 et XFS permettant de réserver rapidement des blocs pour un fichier. C'est bien plus rapide que de créer un fichier en le remplissant de zéros.\\ \\ `fallocate -l [taille] "$iname.img"` Utiliser la commande losetup pour configurer le périphérique **loop0** et l'attacher au fichier ci-dessus. ``` sudo losetup /dev/loop0 image.ext3 ``` Formater ce périphérique loop0 en ext3 ``` sudo mkfs.ext3 /dev/loop0 ``` Le monter sur `/mnt` ``` sudo mount /dev/loop0 /mnt ``` Copier les fichiers du répertoire pour créer un fichier image. Par ex. `/home/data`: ``` cp -a /home/data/* /mnt ``` Démonter le device une fois les fichiers copiés. ``` sudo umount /mnt ``` Détacher le périphérique **loop0**. ``` sudo losetup -d /dev/loop0 ``` Maintenant, l'image disque sera disponible sur image.ext3. #### Archives cpio La commande **cpio** permet également de faire des archives. Contrairement à la commande tar, elle n'est pas récursive. Tous les noms de fichiers entrant dans la composition de l'archive doivent être lus sur l'entrée standard. L'archive est envoyée sur la sortie standard. La commande est presque toujours utilisée derrière un pipe lui-même précédé de la commande **find** qui permet de générer les noms de fichiers souhaités. Principales options : * **-c**: Création/vérification/extraction d'une archive ayant un format d'en-tête d'archive portable entre les systèmes UNIX * **-d**: Extraction avec création des répertoires s'ils n'existent pas * **-i**: Extraction d'une archive * **-it**: Vérification d'une archive * **-o**: Création d'une archive * **-v**: Mode verbeux ^ Créer une archive cpio à partir d’un dossier | `find dossier | cpio -ov > filename.cpio` | ^ Créer une archive cpio à partir du répertoire courant | `find | cpio -ov > filename.cpio` | ^ Créer une archive cpio à partir d’une liste de fichiers/dossiers | `find fichiers/dossiers | cpio -ov > filename.cpio` | ^ Lister le contenu d’une archive cpio | `cpio -it < filename.cpio` | ^ Créer une archive cpio compressée au format gzip | `find dossier | cpio -ov | gzip > filename.cpio.gz`\\ Equivaut à :\\ `find dossier | cpio -ov | gzip -c > filename.cpio.gz` | ^ Créer une archive cpio compressée au format bzip2 | `find dossier | cpio -ov | bzip2 > filename.cpio.bz2`\\ Equivaut à :\\ `find dossier | cpio -ov | bzip2 -c > filename.cpio.bz2` | ^ Créer une archive cpio compressée au format xz | `find dossier | cpio -ov | xz > filename.cpio.xz -d < filename.cpio.xz | cpio -idv`\\ Equivaut à :\\ `xz -dc filename.cpio.xz | cpio -idv` | ^ Extraire un fichier particulier d’une archive | `cpio -idv fichier < filename.cpio` | ^ Préserver la date de modification lors de l’extraction d’une archive cpio | `cpio -idvm < filename.cpio`\\ \\ Par défaut, le **mtime** devient la date d’extraction. Avec l’option -m, le **mtime** des fichiers/dossiers de l’archive est préservé. | ^ Créer une archive cpio à partir d’une sélection de fichiers | `find dossier -iname "extension" -print | cpio -ov > filename.cpio` | ^ Vérifier une archive | `cpio -it [-cv] < archive [fichiers_a_verifier ...]` |