====== Manipulations des périphériques ====== Les périphériques sont essentiels dans un système linux, ils hébergent les systèmes de fichiers lus par le système d'exploitation. ===== Opérations classiques ===== Il est commun de **monter et démonter** des périphériques, lorsque vous branchez des disques externes par exemple. mount [-t ] où: * '''' est le type du système de fichiers, la liste est disponible dans la page de manuel [[http://manned.org/filesystems/9562a8c0|filesystems(5)]]. Ce paramètre est optionnel, le système de fichier pouvant souvent être détecté automatiquement * '''' est le périphérique que l'on souhaite monter: ''/dev/sda2'' par exemple pour la seconde partition du disque ''/dev/sda''. * '''' est le répertoire où monter le système de fichiers. un dossier vide fait l'affaire, le répertoire ''/mnt'' a été [[http://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.html#MNTMOUNTPOINTFORATEMPORARILYMOUNT|créé dans ce but]] dans GNU/Linux. pour le **démonter,** la commande est la suivante: umount une autre opération courante est la **copie de disque ou de partition**. dd if= of= La source et destination peuvent être ce que l'on souhaite: un fichier, un périphérique, etc. par exemple la commande suivante fait une copie bloc à bloc du disque ''/dev/sda'' dans le fichier du répertoire courant ''backup.img''. Pour plus de détails, lire [[#Copie avancé de disques et partitions|la section dédiée]]. ===== Copie avancé de disques et partitions ===== ==== Rappels ==== Il est important de rappeler le fonctionnement du partitionnement d'un disque. Par exemple pour un disque avec trois partitions primaires (les partitions logiques ne sont pas décrites ici): |------|---------------|-------------------|------------------------|-----------------| header partition 1 partition 2 partitions 3 (second header) Nous appelons ici //header// tout ce qui est présent avant la première partition du disque contenant entre autres la table de partitions ([[https://en.wikipedia.org/wiki/Master_boot_record|MBR [en]]], [[https://en.wikipedia.org/wiki/GUID_Partition_Table|GPT [en]]], etc.) Le second header peut être présent dans le cas d'un partitionnement GPT. ==== disques et partitions ==== le répertoire ''/dev'' est peuplé de fichiers exemple avec une clef USB: $ file /dev/sdb # périphérique bloc décrivant le disque /dev/sdb: block special $ file /dev/sdb1 # périphérique bloc décrivant la première partition /dev/sdb1: block special ''/dev/sdb'' est le périphérique bloc décrivant la clef complète. Les partitions sont accessibles dans ''/dev/sdb{i}'' pour ''i'' entier. il est possible de lister ces partitions grâce à la commande ''[[#lsblk|lsblk]]'' $ lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 3.7G 0 disk ├─sdb1 8:17 0 56M 0 part └─sdb2 8:18 0 3G 0 part ==== copie bloc à bloc ==== La copie d'un disque complet dans un fichier peut se faire grâce à la commande ''[[#dd|dd]]'' dd if=/dev/sdb of=mondisque.img Il est également parfois possible de télécharger des images [[http://www.raspberrypi.org/downloads/|depuis internet]]. ==== périphériques boucle ==== Il est possible d'ajouter ce disque comme le système l'aurait fait avec un périphérique physique grâce aux périphériques boucle: # losetup /dev/loop0 mondisque.img Pour accéder aux différentes partitions, il est possible d'ajouter un offset. la taille d'un offset est le nombre de blocs multiplié par la taille d'un bloc. On peut récupérer la taille des blocs grâce à la commande ''[[#blkid|blkid]]'': # blkid -i /dev/loop0 MINIMUM_IO_SIZE=512 PHYSICAL_SECTOR_SIZE=512 LOGICAL_SECTOR_SIZE=512 On peut aussi trouver les secteurs où commencent les partitions grâce à la commande ''file'' $ file mondisque.img mondisque.img: x86 boot sector; partition 1: ID=0x83, starthead 32, startsector 2048, 20480 sectors; partition 2: ID=0x83, starthead 102, startsector 22528, 965769 sectors, code offset 0x0 En multipliant le secteur initial (''startsector'' dans le résultat de la commande ''file'') par la taille d'un bloc, on peut ajouter les différentes partitions aux périphériques pour travailler dessus. # losetup -o $[2048*512] /dev/loop1 mondisque.img # losetup -o $[22528*512] /dev/loop2 mondisque.img ces périphériques boucle peuvent ensuite [[#mount|être montés]] ou, une fois le travail terminé, supprimés: # losetup -d /dev/loop{0,1,2} Dans le cas où on souhaite monter directement ces partitions, il est possible d'éviter d'utiliser la commande losetup en passant directement par mount, par exemple pour monter la seconde partition de notre image: # mount -o loop,offset=$[22528*512] mondisque.img /mnt ===== Commandes utiles ===== ==== lsblk ==== > Afficher les périphériques bloc page //man//: [[http://manned.org/lsblk/5655603b|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/lsblk.8.html|man7.org [en]]] example (avec des disques chiffrés avec dm-crypt dans linux mint, pour plus d'infos sur ce sujet, voir [[https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS|le wiki d'Arch Linux]]): $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 117.4G 0 disk ├─sda1 8:1 0 243M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 117.1G 0 part └─sda5_crypt (dm-0) 252:0 0 117.1G 0 crypt ├─mint--vg-root (dm-1) 252:1 0 109.5G 0 lvm / └─mint--vg-swap_1 (dm-2) 252:2 0 7.6G 0 lvm [SWAP] sdb 8:16 0 3.7G 0 disk ├─sdb1 8:17 0 56M 0 part └─sdb2 8:18 0 3G 0 part sdc 8:32 1 29.8G 0 disk ├─sdc1 8:33 1 56M 0 part /media/k-yo/boot └─sdc2 8:34 1 29.8G 0 part /media/k-yo/fc254b57-8fff-4f96-9609-ea202d871acf1 ==== blkid ==== > Trouver ou afficher les attributs de périphérique bloc page //man//: [[http://manned.org/blkid/7fda2395|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/blkid.8.html|man7.org [en]]] example: # blkid -i /dev/sda MINIMUM_IO_SIZE=512 PHYSICAL_SECTOR_SIZE=512 LOGICAL_SECTOR_SIZE=512 ==== fdisk ==== > Manipuler la table de partitions d'un disque page //man//: [[http://manned.org/fdisk/794498a1|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/fdisk.8.html|man7.org [en]]] ==== dd ==== > Convertir et copier un fichier page //man//: [[http://manned.org/dd/169a1194|manned.org [fr]]], [[http://man7.org/linux/man-pages/man1/dd.1.html|man7.org [en]]] ==== dump ==== > //ext2/3/4 filesystem backup// page //man//: [[http://manned.org/dump.8|manned.org [en]]], [[|man7.org [en]]] ==== dmesg ==== > Afficher et contrôler le tampon des messages du noyau page //man//: [[http://manned.org/dmesg/07d42fa0|manned.org [fr]]], [[http://man7.org/linux/man-pages/man1/dmesg.1.html|man7.org [en]]] ==== losetup ==== > Mettre en place et contrôler des périphériques boucle page //man//: [[http://manned.org/losetup/83d4cabe|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/losetup.8.html|man7.org [en]]] ==== mount / umount ==== > Monter/Démonter un système de fichiers page //man// (mount): [[http://manned.org/mount/560a0730|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/mount.8.html|man7.org [en]]] page //man// (umount): [[http://manned.org/umount/81eb40a5|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/umount.8.html|man7.org [en]]] ==== mkfs ==== > Créer un système de fichiers Linux page //man//: [[http://manned.org/mkfs/aca7440e|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/mkfs.8.html|man7.org [en]]] ==== fsck ==== > Vérifier et réparer un système de fichiers Linux page //man//: [[http://manned.org/fsck/4ca99c7f|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/fsck.8.html|man7.org [en]]] ==== tune2fs ==== > Ajuster les paramètres des systèmes de fichiers ext2/ext3/ext4 page //man//: [[http://manned.org/tune2fs/452f9e5c|manned.org [fr]]], [[http://man7.org/linux/man-pages/man8/tune2fs.8.html|man7.org [en]]]