<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Guillaume Orsal</title>
	<link>https://www.orsal.fr/</link>
	<description>Ing&#233;nieur informatique, d&#233;veloppeur Web Freelance, cr&#233;ation site Internet, conseil en r&#233;f&#233;rencement, expert Laravel, SEO, Intelligence Artificielle</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.orsal.fr/spip.php?id_rubrique=20&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Automatisation de la reconnexion du clavier apr&#232;s la veille sous Linux</title>
		<link>https://www.orsal.fr/Automatisation-de-la-reconnexion</link>
		<guid isPermaLink="true">https://www.orsal.fr/Automatisation-de-la-reconnexion</guid>
		<dc:date>2024-06-23T13:27:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Sur mon laptop, sous Ubuntu, parfois apr&#232;s la sortie de veille je rencontre des probl&#232;mes avec mon clavier qui ne r&#233;pond plus. Impossible de le d&#233;brancher / rebrancher &#233;videmment et je suis oblig&#233; de passer par un clavier externe pour le relancer. Voici la solution d'automatisation mise en place pour la reconnexion. Une analyse longue et minutieuse des logs syst&#232;me m'a permis d'identifier le message d'erreur suivant lorsque mon clavier cessait de fonctionner : Failed to enable keyboard on (...)&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton68-a7855.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff68-83989.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton68-a7855.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Sur mon laptop, sous Ubuntu, parfois apr&#232;s la sortie de veille je rencontre des probl&#232;mes avec mon clavier qui ne r&#233;pond plus. Impossible de le d&#233;brancher / rebrancher &#233;videmment et je suis oblig&#233; de passer par un clavier externe pour le relancer. Voici la solution d'automatisation mise en place pour la reconnexion.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Une analyse longue et minutieuse des logs syst&#232;me m'a permis d'identifier le message d'erreur suivant lorsque mon clavier cessait de fonctionner :
&lt;strong&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;Failed to enable keyboard on isa0060/serio0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Si je ne veux plus me retrouver bloqu&#233; au r&#233;veil de l'appareil, il va falloir mettre en place un script qui va d&#233;tecter et corriger l'erreur automatiquement.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Cr&#233;er un script de surveillance et de reconnexion&lt;/h2&gt;
&lt;p&gt;La premi&#232;re &#233;tape consiste &#224; cr&#233;er un script qui v&#233;rifiera les erreurs de clavier dans les logs du noyau (dmesg) et reconnectera le clavier si n&#233;cessaire.&lt;/p&gt; &lt;p&gt;Pour &#233;viter de relancer le clavier ind&#233;finiment, il faut v&#233;rifier que la d&#233;connexion est intervenue apr&#232;s la derni&#232;re relance du clavier, d'o&#249; le stockage de la date de derni&#232;re relance dans &lt;code class='spip_code' dir='ltr'&gt;/var/log/last_keyboard_reconnect&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Cr&#233;er le script avec la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /usr/local/bin/check_keyboard.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Puis y ins&#233;rer le code suivant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt; &lt;br /&gt; # Chemin du fichier de log&lt;br /&gt; LOGFILE=&quot;/var/log/keyboard_monitor.log&quot;&lt;br /&gt; &lt;br /&gt; # Fichier pour stocker l'heure de la derni&#232;re reconnexion&lt;br /&gt; LAST_RECONNECT_FILE=&quot;/var/log/last_keyboard_reconnect&quot;&lt;br /&gt; &lt;br /&gt; # Initialisation de la date de derni&#232;re reconnexion&lt;br /&gt; last_reconnect=0&lt;br /&gt; &lt;br /&gt; # Test s'il y a d&#233;j&#224; eu des d&#233;connexions du clavier dans la session courante&lt;br /&gt; if sudo dmesg | grep -q &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot;;&lt;br /&gt; then&lt;br /&gt; # Oui, alors on r&#233;cup&#232;re la date de derni&#232;re connexion depuis le fichier&lt;br /&gt; if [ -f $LAST_RECONNECT_FILE ]; then&lt;br /&gt; last_reconnect=$(cat $LAST_RECONNECT_FILE)&lt;br /&gt; fi&lt;br /&gt; else&lt;br /&gt; # Non, alors on initialise le fichier contenant la date de derni&#232;re reconnexion&lt;br /&gt; echo 0 &gt; $LAST_RECONNECT_FILE&lt;br /&gt; fi&lt;br /&gt; &lt;br /&gt; # V&#233;rifier les erreurs de clavier dans dmesg depuis la derni&#232;re reconnexion&lt;br /&gt; if sudo dmesg | awk -v ref=&quot;$last_reconnect&quot; '{&lt;br /&gt; # Extraire le timestamp en enlevant les crochets&lt;br /&gt; match($0, /^\[([0-9]+\.[0-9]+)\]/, arr)&lt;br /&gt; timestamp = arr[1]&lt;br /&gt; &lt;br /&gt; # Comparer le timestamp avec la r&#233;f&#233;rence&lt;br /&gt; if (timestamp &gt; ref) {&lt;br /&gt; print $0&lt;br /&gt; }&lt;br /&gt; }' | grep -q &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot; ; then&lt;br /&gt; &lt;br /&gt; # Reconnexion du clavier&lt;br /&gt; sudo sh -c 'echo -n &quot;reconnect&quot; &gt; /sys/bus/serio/devices/serio0/drvctl'&lt;br /&gt; &lt;br /&gt; # Mise &#224; jour de la date de derni&#232;re reconnexion&lt;br /&gt; last_error_time=$(sudo dmesg | grep &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot; | tail -1 | awk '{print substr($1, 2, length($1) - 2)}')&lt;br /&gt; echo $last_error_time &gt; $LAST_RECONNECT_FILE&lt;br /&gt; &lt;br /&gt; # Log&lt;br /&gt; echo &quot;$(date +%Y%m%d-%T);$last_error_time;Clavier reconnect&#233;&quot; &gt;&gt; $LOGFILE&lt;br /&gt; else&lt;br /&gt; echo &quot;$(date +%Y%m%d-%T);$last_reconnect;Pas de probl&#232;me d&#233;tect&#233;&quot; &gt;&gt; $LOGFILE&lt;br /&gt; fi&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La reconnexion logiciel du clavier s'effectue dans le script par la commande :&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sh -c 'echo -n &quot;reconnect&quot; &gt; /sys/bus/serio/devices/serio0/drvctl'&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;N'oubliez pas de rendre le script ex&#233;cutable :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/check_keyboard.sh&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Cr&#233;er un hook systemd-sleep pour la sortie de veille&lt;/h2&gt;
&lt;p&gt;Pour moi le probl&#232;me se pr&#233;sente en sortie de veille de l'ordinateur. Je vais donc utiliser le hook de systemd adapt&#233; : systemd-sleep&lt;/p&gt; &lt;p&gt;Pour cela, je vais placer un script dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;/lib/systemd/system-sleep/&lt;/code&gt;. Assurez-vous qu'il existe et sinon vous pouvez le cr&#233;er par la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mkdir -p /lib/systemd/system-sleep/&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'ensemble des scripts dans ce r&#233;pertoire sont ex&#233;cut&#233;s &#224; chaque mise en veille et sorte de veille. Je vais donc y cr&#233;er un script :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /lib/systemd/system-sleep/keyboard_resume.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Lors de l'appel de ce script, il re&#231;oit plusieurs param&#232;tre. Le premier param&#232;tre &lt;code class='spip_code' dir='ltr'&gt;$1&lt;/code&gt; contient soit la valeur &lt;code class='spip_code' dir='ltr'&gt;pre&lt;/code&gt; indiquant la mise en veille, soit la valeur &lt;code class='spip_code' dir='ltr'&gt;post&lt;/code&gt; indiquant la sortie de la veille. Voici donc le script pour jouer le script de relancer du clavier au r&#233;veil de l'ordinateur :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt; &lt;br /&gt; case $1 in&lt;br /&gt; post)&lt;br /&gt; /usr/local/bin/check_keyboard.sh&lt;br /&gt; ;;&lt;br /&gt; esac&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ne pas oublier de rendre le script ex&#233;cutable.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo chmod +x /lib/systemd/system-sleep/keyboard_resume.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'analyse du fichier de log &lt;code class='spip_code' dir='ltr'&gt;/var/log/keyboard_monitor.log&lt;/code&gt; apr&#232;s un r&#233;veil de l'ordinateur permettra de v&#233;rifier que le script s'est bien ex&#233;cut&#233;, et au besoin a reconnect&#233; le clavier.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Gestion des disques sous Linux &#8211; m&#233;mo de commandes shell (Ubuntu &amp; Debian)</title>
		<link>https://www.orsal.fr/Gestion-des-disques-sous-Linux</link>
		<guid isPermaLink="true">https://www.orsal.fr/Gestion-des-disques-sous-Linux</guid>
		<dc:date>2022-12-27T20:32:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Une compilation de commandes shell Linux que j'utilise r&#233;guli&#232;rement pour la gestion de disques et partitions (Ubuntu/Debian).&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton67-6785f.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff67-a1011.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton67-6785f.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Une compilation de commandes shell Linux que j'utilise r&#233;guli&#232;rement pour la gestion de disques et partitions (Ubuntu/Debian).&lt;/p&gt; &lt;p&gt;Elle ne se veut ni exhaustive, ni p&#233;dagogique, mais sert de m&#233;mo technique bas&#233; sur mon exp&#233;rience de terrain en d&#233;veloppement et administration de syst&#232;mes Linux.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Cette pratique s'inscrit dans un usage quotidien de Linux depuis Debian Slink, pour le d&#233;veloppement et la mise en production de projets web Laravel et de travaux en intelligence artificielle.&lt;/p&gt; &lt;p&gt;Elles sont regroup&#233;es par th&#233;matique :&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#find-disk-part&quot; class='spip_ancre'&gt;Identifier disques et partitions disponibles sur l'ordinateur&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskRepair&quot; class='spip_ancre'&gt;R&#233;parer un disque d&#233;fectueux&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskCheck&quot; class='spip_ancre'&gt;Automatiser les contr&#244;les&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#gptDisk&quot; class='spip_ancre'&gt;Fdisk pour disques GPT&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskFormat&quot; class='spip_ancre'&gt;Formatage d'un disque vierge&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#luksPartition&quot; class='spip_ancre'&gt;Partitions chiffr&#233;es avec LUKS&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#fat32repair&quot; class='spip_ancre'&gt;R&#233;parer une cl&#233; usb FAT32 en lecture seule sous Linux&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskspace&quot; class='spip_ancre'&gt;Voir l'espace disque utilis&#233;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#smart&quot; class='spip_ancre'&gt;V&#233;rifier l'&#233;tat SMART d'un disque&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#mount&quot; class='spip_ancre'&gt;Monter / d&#233;monter une partition&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diag&quot; class='spip_ancre'&gt;Diagnostics bas niveau&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#inspect&quot; class='spip_ancre'&gt;Inspection ext* sans montage&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dos&quot; class='spip_ancre'&gt;FAT32 r&#233;calcitrant&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#part&quot; class='spip_ancre'&gt;Quand la table de partitions ne veut rien savoir&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dd&quot; class='spip_ancre'&gt;R&#233;cup&#233;ration de donn&#233;es&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#forensic&quot; class='spip_ancre'&gt;Forensic&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#header&quot; class='spip_ancre'&gt;Analyse du header GPT&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#carving&quot; class='spip_ancre'&gt;Carving manuel&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#debugfs&quot; class='spip_ancre'&gt;Analyse du journal ext4 avec debugfs&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#inode&quot; class='spip_ancre'&gt;R&#233;cup&#233;ration d'inodes supprim&#233;s&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#perf&quot; class='spip_ancre'&gt;Analyse des performances disque&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#malware&quot; class='spip_ancre'&gt;Recherche de malware au niveau boot (MBR / GPT)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#mbr&quot; class='spip_ancre'&gt;R&#233;initialisation du code d'amor&#231;age (MBR)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#sshfs&quot; class='spip_ancre'&gt;Monter un syst&#232;me de fichiers distant via SSH&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dvd&quot; class='spip_ancre'&gt;G&#233;rer le chariot du lecteur DVD&lt;/a&gt;&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;find-disk-part&quot;&gt;&lt;/a&gt;Identifier disques et partitions disponibles sur l'ordinateur&lt;/h2&gt;
&lt;p&gt;Avant toute op&#233;ration sur un disque ou une partition, il est utile de conna&#238;tre leur disposition exacte et leurs caract&#233;ristiques.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Liste des disque physiques :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo lshw -class disk&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Informations d&#233;taill&#233;es sur les partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo fdisk -l&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Liste des partitions, types et points de montage :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo blkid -o list -c /dev/null&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;ou, plus lisible dans la plupart des cas :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -o NAME,SIZE,FSTYPE,TYPE,PTTYPE,LABEL,PARTLABEL,MOUNTPOINT,UUID&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ces commandes permettent d'identifier pr&#233;cis&#233;ment :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; les disques physiques&lt;/li&gt;&lt;li&gt; les partitions&lt;/li&gt;&lt;li&gt; leur type de syst&#232;me de fichiers&lt;/li&gt;&lt;li&gt; leur point de montage&lt;/li&gt;&lt;li&gt; leur UUID&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces informations sont n&#233;cessaires pour cibler correctement un disque ou une partition dans les op&#233;rations suivantes.&lt;/p&gt; &lt;p&gt;Dans la suite, j'utiliserai les notations suivantes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; /dev/sd&lt;strong&gt;X&lt;/strong&gt; pour un disque&lt;/li&gt;&lt;li&gt; /dev/sd&lt;strong&gt;XN&lt;/strong&gt; pour une partition&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;o&#249; &lt;strong&gt;X&lt;/strong&gt; est la lettre du disque et &lt;strong&gt;N&lt;/strong&gt; le num&#233;ro de partition.&lt;/p&gt; &lt;p&gt;Exemple : /dev/sda1&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskRepair&quot;&gt;&lt;/a&gt;R&#233;parer un disque d&#233;fectueux&lt;/h2&gt;
&lt;p&gt;Il existe de nombreuses approches face &#224; un disque d&#233;fectueux. Voici celles que j'utilise ponctuellement.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Trouver des secteurs d&#233;fectueux sur un disque.&lt;/p&gt; &lt;p&gt;&#9888;&#65039; Cette op&#233;ration est tr&#232;s longue : la commande parcourt l'ensemble des secteurs du disque et &#233;crit la liste des secteurs d&#233;fectueux dans un fichier &lt;code class='spip_code' dir='ltr'&gt;badsectors.txt&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo badblocks -v /dev/sdXN &gt; badsectors.txt&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Marquer les secteurs erron&#233;s d'un disque afin qu'ils ne soient plus utilis&#233;s&lt;/p&gt; &lt;p&gt;Les secteurs d&#233;fectueux sont alors exclus, ce qui limite les risques de corruption ou de perte de donn&#233;es.&lt;/p&gt; &lt;p&gt;NB : la partition doit &#234;tre d&#233;mont&#233;e au pr&#233;alable via la commande :&lt;code class='spip_code' dir='ltr'&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Le fichier &lt;code class='spip_code' dir='ltr'&gt;badsectors.txt&lt;/code&gt; est le fichier g&#233;n&#233;r&#233; par la commande &lt;strong&gt;badblocks&lt;/strong&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2fsck -l badsectors.txt /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;fsck&lt;/strong&gt; est l'utilitaire de v&#233;rification des syst&#232;mes de fichiers sous Linux.
&lt;strong&gt;e2fsck&lt;/strong&gt; en est la version d&#233;di&#233;e aux syst&#232;mes de fichiers de type &lt;i&gt;ext2/ext3/ext4&lt;/i&gt;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; R&#233;cup&#233;rer les informations du dernier contr&#244;le &lt;strong&gt;fsck&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -l /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Pour extraire uniquement les informations li&#233;es &#224; la fr&#233;quence d'analyse des disques et &#224; l'historique des contr&#244;les :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -l /dev/sdXN | grep -E &quot;Last\ c|Max|Mount&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskCheck&quot;&gt;&lt;/a&gt;Automatiser les contr&#244;les&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;fsck&lt;/strong&gt; peut &#234;tre lanc&#233; manuellement, mais il est &#233;galement possible de planifier des contr&#244;les automatiques apr&#232;s un certain nombre de red&#233;marrages.&lt;/p&gt; &lt;p&gt;La commande suivante force un contr&#244;le &lt;strong&gt;fsck&lt;/strong&gt; de la partition &lt;strong&gt;/dev/sdXN&lt;/strong&gt; tous les 10 red&#233;marrages :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -c 10 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Une valeur de &lt;strong&gt;-1&lt;/strong&gt; d&#233;sactive fsck et ses contr&#244;les automatiques.
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Une valeur de &lt;strong&gt;1&lt;/strong&gt; force un contr&#244;le &#224; chaque d&#233;marrage.&lt;/p&gt; &lt;p&gt;Si la partition est mont&#233;e via le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/fstab&lt;/code&gt;, il convient &#233;galement de v&#233;rifier la ligne correspondante &#224; la partition. Un dernier champ positionn&#233; &#224; &lt;strong&gt;0&lt;/strong&gt; d&#233;sactive le contr&#244;le au d&#233;marrage.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-force-fsck-to-check-filesystem-after-system-reboot-on-linux&quot; class='spip_out' rel='external'&gt;En savoir plus...&lt;/a&gt;&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;gptDisk&quot;&gt;&lt;/a&gt;Fdisk pour disques GPT&lt;/h2&gt;
&lt;p&gt;Les disques modernes utilisent souvent une table de partitions &lt;strong&gt;GPT&lt;/strong&gt;, incompatible avec &lt;i&gt;fdisk&lt;/i&gt; : on utilise alors &lt;i&gt;gdisk&lt;/i&gt; pour manipuler correctement les partitions.&lt;/p&gt; &lt;p&gt;Installation de l'outil :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt; sudo apt-get install gdisk&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskFormat&quot;&gt;&lt;/a&gt;Formatage d'un disque vierge&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cr&#233;ation de la partition :&lt;/p&gt; &lt;p&gt;&#8212; Lancer l'outil de gestion des partitions :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo parted /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Dans &lt;strong&gt;parted&lt;/strong&gt;, ex&#233;cuter les commandes suivantes.&lt;/p&gt; &lt;p&gt;&#8212; Cr&#233;ation de la table de partition &lt;strong&gt;GPT&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mklabel gpt&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Cr&#233;ation d'une partition primaire &lt;strong&gt;ext4&lt;/strong&gt; occupant l'ensemble du disque :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mkpart primary ext4 2048s 100%&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; V&#233;rifier la table de partitions :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;print&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Quitter &lt;strong&gt;parted&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;quit&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cr&#233;ation du syst&#232;me de fichier &lt;strong&gt;ext4&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mkfs.ext4 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Attribution d'un label &#224; la partition :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2label /dev/sdXN &lt;nom&gt;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;luksPartition&quot;&gt;&lt;/a&gt;Partitions chiffr&#233;es avec LUKS&lt;/h2&gt;
&lt;p&gt;Lorsqu'un disque ou une partition est chiffr&#233; (par exemple pour des donn&#233;es sensibles), il n'appara&#238;t pas comme un FS classique et n&#233;cessite une &#233;tape d'identification distincte.&lt;/p&gt; &lt;p&gt;Certaines partitions peuvent &#234;tre chiffr&#233;es avec &lt;strong&gt;LUKS&lt;/strong&gt; afin de prot&#233;ger les donn&#233;es.&lt;/p&gt; &lt;p&gt;Voici comment identifier les volumes chiffr&#233;s actuellement pr&#233;sents sur le syst&#232;me :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dmsetup ls --target crypt&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;fat32repair&quot;&gt;&lt;/a&gt;R&#233;parer une cl&#233; usb FAT32 en lecture seule sous linux&lt;/h2&gt;
&lt;p&gt;Une cl&#233; USB mont&#233;e en lecture seule emp&#234;che toute modification ou suppression de fichiers. Ce comportement est fr&#233;quent sur des supports &lt;strong&gt;FAT32&lt;/strong&gt; pr&#233;sentant des erreurs.&lt;/p&gt; &lt;p&gt;Ce cas se rencontre souvent lorsque le syst&#232;me de fichiers &lt;i&gt;FAT32&lt;/i&gt; devient incoh&#233;rent apr&#232;s une suppression ou un retrait non propre de la cl&#233; USB.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; V&#233;rifier le type de syst&#232;me de fichiers et identifier la partition&lt;/p&gt; &lt;p&gt;Lister les p&#233;riph&#233;riques &lt;strong&gt;FAT32&lt;/strong&gt; afin d'identifier la partition concern&#233;e :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -f |grep FAT32&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ou, si l'identifiant est d&#233;j&#224; connu :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -f /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter la cl&#233; USB&lt;/p&gt; &lt;p&gt;La partition doit &#234;tre d&#233;mont&#233;e avant toute tentative de r&#233;paration :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lancer la r&#233;paration du syst&#232;me de fichiers &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -w -r -l -a -v -t /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;avec les param&#232;tres suivants :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;-w&lt;/strong&gt; : &#233;crit les corrections sur le disque&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-r&lt;/strong&gt; : interaction lors de la r&#233;paration&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-l&lt;/strong&gt; : liste les fichiers pr&#233;sentant des erreurs&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-a&lt;/strong&gt; : corrige automatiquement les erreurs&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-v&lt;/strong&gt; : mode verbeux&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-t&lt;/strong&gt; : marque les clusters d&#233;fectueux dans la FAT&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois la r&#233;paration termin&#233;e, d&#233;brancher puis rebrancher physiquement la cl&#233; USB.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskspace&quot;&gt;&lt;/a&gt;Voir l'espace disque utilis&#233;&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Espace utilis&#233; / disponible par syst&#232;me de fichiers :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Espace occup&#233; par r&#233;pertoire (taille) :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;du -sh /chemin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les points de montage :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;findmnt&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;smart&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;V&#233;rifier l'&#233;tat SMART d'un disque&lt;/h2&gt;
&lt;p&gt;La plupart des disques supportent SMART : on peut obtenir les donn&#233;es d'&#233;tat :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo smartctl -a /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(Il faut installer : smartmontools)&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;mount&quot;&gt;&lt;/a&gt;Monter / d&#233;monter une partition&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter une partition :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount /dev/sdXN /point/de/montage&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diag&quot;&gt;&lt;/a&gt;Diagnostics bas niveau (quand &#231;a commence &#224; sentir mauvais)&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire l'ensemble d'un disque sans le monter (d&#233;tection de lenteurs ou d'erreurs E/S) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/null bs=1M status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher les erreurs disque c&#244;t&#233; noyau :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dmesg | grep -i -E &quot;error|fail|ata|i/o&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;inspect&quot;&gt;&lt;/a&gt;Inspection ext* sans montage&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les m&#233;tadonn&#233;es compl&#232;tes d'un syst&#232;me de fichiers ext* :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dumpe2fs /dev/sdXN | less&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les superblocks disponibles :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dumpe2fs /dev/sdXN | grep -i superblock&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;parer un syst&#232;me de fichiers &#224; partir d'un superblock alternatif :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2fsck -b 32768 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Les syst&#232;mes de fichiers &lt;i&gt;ext*&lt;/i&gt; disposent de superblocks alternatifs utilisables en cas de corruption.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;dos&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;FAT32 r&#233;calcitrant (cas d&#233;sesp&#233;r&#233;s)&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;paration automatique non interactive :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -a -w -v /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;&#233;criture du boot sector FAT :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -b /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;part&quot;&gt;&lt;/a&gt;Quand la table de partitions ne veut rien savoir&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Forcer la relecture de la table de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo partprobe /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo blockdev --rereadpt /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;dd&quot;&gt;&lt;/a&gt;R&#233;cup&#233;ration de donn&#233;es (old school)&lt;/h2&gt;
&lt;p&gt;Attention la commande &lt;strong&gt;dd&lt;/strong&gt; ne v&#233;rifie rien et n'avertit pas. Une erreur de p&#233;riph&#233;rique (&lt;i&gt;if=&lt;/i&gt; / &lt;i&gt;of=&lt;/i&gt;) entra&#238;ne une perte de donn&#233;es imm&#233;diate et irr&#233;versible.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Copier un disque en ignorant les erreurs :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/sdY conv=noerror,sync status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Variante plus robuste avec journal de r&#233;cup&#233;ration :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo ddrescue /dev/sdX /dev/sdY rescue.log&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;forensic&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Forensic&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cloner un disque vers une image brute :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=image.raw bs=4M status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner une image disque sans la monter :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Associer une image disque &#224; un p&#233;riph&#233;rique loop :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo losetup -fP image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Note :&lt;/i&gt; un &lt;strong&gt;p&#233;riph&#233;rique loop&lt;/strong&gt; permet de traiter un fichier image comme un p&#233;riph&#233;rique bloc.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les p&#233;riph&#233;riques loop actifs :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;losetup -a&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner les partitions d&#233;tect&#233;es dans l'image :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk /dev/loopX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire un secteur pr&#233;cis (ex. MBR / GPT header) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire un secteur &#224; un offset donn&#233; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=2048 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter une partition d'image disque via offset :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount -o loop,ro,offset=1048576 image.raw /mnt/forensic&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(offset = d&#233;but de partition en octets)&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter en lecture seule (forensic safe) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount -o ro,noload /dev/loopXpY /mnt/forensic&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Identifier le type de donn&#233;es pr&#233;sentes :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire les cha&#238;nes lisibles (recherche d'artefacts) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings image.raw | less&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Recherche cibl&#233;e (ex. mots-cl&#233;s) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings image.raw | grep -i &quot;password&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Analyse et r&#233;cup&#233;ration de tables de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo testdisk image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraction de fichiers sans table de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo photorec image.raw&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;header&quot;&gt;&lt;/a&gt;Analyse du header GPT (primaire / secondaire)&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile lorsque la table de partitions GPT est corrompue ou incoh&#233;rente, mais que le disque contient encore des donn&#233;es exploitables. L'objectif est de v&#233;rifier l'&#233;tat du header GPT principal et de son backup, et de d&#233;terminer lequel peut servir de r&#233;f&#233;rence pour une restauration.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT primaire (LBA 1) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT secondaire (dernier secteur du disque) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=$(($(blockdev --getsz /dev/sdX)-1)) count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Sauvegarder et comparer les deux headers :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 of=gpt_primary.bin&lt;br /&gt; sudo dd if=/dev/sdX bs=512 skip=$(($(blockdev --getsz /dev/sdX)-1)) count=1 of=gpt_backup.bin&lt;br /&gt; cmp gpt_primary.bin gpt_backup.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Inspecter les informations GPT lisibles :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk -i 1 /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; V&#233;rifier la coh&#233;rence globale de la table GPT :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk -v /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;carving&quot;&gt;&lt;/a&gt;Carving manuel (extraction sans table de partitions ni syst&#232;me de fichiers)&lt;/h2&gt;
&lt;p&gt;Le carving manuel intervient lorsque la table de partitions et le syst&#232;me de fichiers sont irr&#233;cup&#233;rables. L'objectif est d'extraire directement des fichiers ou des donn&#233;es brutes &#224; partir de signatures connues, sans s'appuyer sur aucune m&#233;tadonn&#233;e.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Identifier le type g&#233;n&#233;ral de donn&#233;es pr&#233;sentes dans une image disque :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher des signatures de fichiers connues :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;grep -a -b &quot;JFIF&quot; image.raw&lt;br /&gt; grep -a -b &quot;%PDF&quot; image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire un fichier &#224; partir d'un offset connu :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dd if=image.raw of=fichier.bin bs=1 skip=OFFSET count=TAILLE&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner le contenu extrait :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file fichier.bin&lt;br /&gt; hexdump -C fichier.bin | less&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;debugfs&quot;&gt;&lt;/a&gt;Analyse du journal ext4 avec debugfs&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile lorsque des fichiers ont disparu r&#233;cemment ou apr&#232;s un crash, mais que le syst&#232;me de fichiers &lt;strong&gt;ext4&lt;/strong&gt; est encore montable ou partiellement coh&#233;rent. L'objectif est d'examiner les structures internes (journal, inodes, blocs) afin d'identifier des donn&#233;es encore r&#233;cup&#233;rables.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Ouvrir une partition ext4 avec &lt;strong&gt;debugfs&lt;/strong&gt; (sans montage) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo debugfs /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;puis dans debugfs les commandes d'analyse ci-dessous.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les informations g&#233;n&#233;rales du syst&#232;me de fichiers :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;stats&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner l'&#233;tat du journal :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;logdump&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les inodes r&#233;cemment modifi&#233;s (selon le journal) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsdel&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(Quitter &lt;i&gt;debugfs&lt;/i&gt; avec &lt;i&gt;quit&lt;/i&gt;)&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;inode&quot;&gt;&lt;/a&gt;R&#233;cup&#233;ration d'inodes supprim&#233;s (ext4)&lt;/h2&gt;
&lt;p&gt;Cette m&#233;thode s'applique lorsque des fichiers ont &#233;t&#233; supprim&#233;s mais que leurs blocs n'ont pas encore &#233;t&#233; r&#233;utilis&#233;s. L'objectif est de restaurer directement les donn&#233;es &#224; partir des inodes supprim&#233;s, sans passer par le nom de fichier original.&lt;/p&gt; &lt;p&gt;Un &lt;strong&gt;inode&lt;/strong&gt; est la structure centrale d'un syst&#232;me de fichiers Linux (&lt;i&gt;ext2/ext3/ext4&lt;/i&gt;). Il ne contient pas le nom du fichier, mais l'ensemble de ses m&#233;tadonn&#233;es et les pointeurs vers les donn&#233;es.&lt;/p&gt; &lt;p&gt;Un inode contient notamment :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le type (fichier, r&#233;pertoire, lien, etc.)&lt;/li&gt;&lt;li&gt; les permissions&lt;/li&gt;&lt;li&gt; l'UID et le GID&lt;/li&gt;&lt;li&gt; la taille&lt;/li&gt;&lt;li&gt; les horodatages (&lt;i&gt;atime&lt;/i&gt;, &lt;i&gt;mtime&lt;/i&gt;, &lt;i&gt;ctime&lt;/i&gt;, &lt;i&gt;crtime&lt;/i&gt; selon le syst&#232;me de fichiers)&lt;/li&gt;&lt;li&gt; les pointeurs vers les blocs de donn&#233;es :
&lt;br /&gt;&#8212; directs
&lt;br /&gt;&#8212; indirects
&lt;br /&gt;&#8212; double et triple indirects&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le nom du fichier n'est pas stock&#233; dans l'inode, mais dans le r&#233;pertoire. Un r&#233;pertoire est une simple table associant un nom &#224; un num&#233;ro d'inode :
&lt;strong&gt;nom &#8594; inode&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Cons&#233;quence :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; supprimer un fichier supprime le lien &lt;i&gt;nom &#8594; inode&lt;/i&gt;&lt;/li&gt;&lt;li&gt; l'inode peut encore exister&lt;/li&gt;&lt;li&gt; les blocs de donn&#233;es peuvent rester intacts&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les inodes supprim&#233;s :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo debugfs /dev/sdXN&lt;br /&gt; lsdel&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner un inode supprim&#233; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;stat &lt;inode&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire le contenu d'un inode vers un fichier :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dump &lt;inode&gt; fichier_recupere.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Analyser le fichier extrait :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file fichier_recupere.bin&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;perf&quot;&gt;&lt;/a&gt;Analyse des performances disque (diagnostic bas niveau)&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile pour identifier des lenteurs anormales, des timeouts E/S ou des comportements d&#233;grad&#233;s li&#233;s au mat&#233;riel. L'objectif est de distinguer un probl&#232;me logiciel d'un probl&#232;me physique ou firmware.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Mesurer les performances brutes en lecture s&#233;quentielle :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo hdparm -tT /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Tester la latence de lecture sans cache :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/null bs=4K count=100000 iflag=direct status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Surveiller les erreurs E/S et timeouts :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dmesg | grep -i -E &quot;i/o error|timeout|ata&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;malware&quot;&gt;&lt;/a&gt;Recherche de malware au niveau boot (MBR / GPT)&lt;/h2&gt;
&lt;p&gt;Cette v&#233;rification est pertinente en cas de comportement anormal persistant, y compris apr&#232;s r&#233;installation du syst&#232;me. L'objectif est d'identifier une modification du code d'amor&#231;age (bootsector, MBR ou GPT).&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le secteur d'amor&#231;age MBR (512 octets) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT primaire :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Comparer avec un disque sain ou une sauvegarde :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;cmp mbr_suspect.bin mbr_sain.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher des cha&#238;nes suspectes :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings mbr_suspect.bin&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;mbr&quot;&gt;&lt;/a&gt;R&#233;initialisation du code d'amor&#231;age (MBR)&lt;/h2&gt;
&lt;p&gt;Le &lt;strong&gt;MBR&lt;/strong&gt; (Master Boot Record) correspond aux 512 premiers octets d'un disque en sch&#233;ma de partition de type &lt;strong&gt;MBR&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Il contient le code d'amor&#231;age primaire ainsi que la table de partitions. Une corruption ou une modification malveillante de ce code peut emp&#234;cher le d&#233;marrage du syst&#232;me ou persister malgr&#233; une r&#233;installation.&lt;/p&gt; &lt;p&gt;Cette op&#233;ration consiste &#224; neutraliser le code d'amor&#231;age existant afin de repartir sur une base saine.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &#201;craser le code MBR (sans toucher aux partitions) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/zero of=/dev/sdX bs=440 count=1&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Supprimer compl&#232;tement la table GPT et les m&#233;tadonn&#233;es associ&#233;es :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk --zap-all /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;installer un chargeur d'amor&#231;age l&#233;gitime :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;grub-install /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;En cas de doute de compromission du boot secteur, l'id&#233;e est de supprimer le secteur d'amor&#231;age douteux (MBR ou GPT selon le type), puis d'en r&#233;installer un propre avec grub.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;sshfs&quot;&gt;&lt;/a&gt;Monter un syst&#232;me de fichiers distant via SSH (SSHFS)&lt;/h2&gt;
&lt;p&gt;Le montage via &lt;strong&gt;SSHFS&lt;/strong&gt; permet d'acc&#233;der &#224; un syst&#232;me de fichiers distant comme s'il &#233;tait local, en s'appuyant uniquement sur une connexion &lt;i&gt;SSH&lt;/i&gt;. C'est particuli&#232;rement utile pour l'analyse, la r&#233;cup&#233;ration de donn&#233;es ou l'acc&#232;s ponctuel &#224; des fichiers distants sans exposer de services suppl&#233;mentaires.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Installer &lt;i&gt;sshfs&lt;/i&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get install sshfs&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter un r&#233;pertoire distant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sshfs user@serveur:/chemin/distant /mnt/ssh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter proprement :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;fusermount -u /mnt/ssh&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;dvd&quot;&gt;&lt;/a&gt;G&#233;rer le chariot du lecteur DVD&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Ejecter le disque :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;eject&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rentrer le chariot du disque, si le lecteur le permet :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;eject -t&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Erreur logrotate avec mysql-server sur Debian</title>
		<link>https://www.orsal.fr/Erreur-logrotate-mysql-server</link>
		<guid isPermaLink="true">https://www.orsal.fr/Erreur-logrotate-mysql-server</guid>
		<dc:date>2015-11-05T10:47:15Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Lors de la rotation des logs MySQL, logrotate peut &#233;chouer sur Debian et g&#233;n&#233;rer des erreurs r&#233;p&#233;t&#233;es. Cet article explique la cause du probl&#232;me et pr&#233;sente une solution simple pour r&#233;tablir une rotation automatique fiable.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH146/arton58-16fd8.jpg' width='150' height='146' onmouseover=&quot;this.src='local/cache-vignettes/L150xH146/artoff58-39133.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH146/arton58-16fd8.jpg'&quot; style='height:146px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Lors de la rotation des logs MySQL, logrotate peut &#233;chouer sur Debian et g&#233;n&#233;rer des erreurs r&#233;p&#233;t&#233;es. Cet article explique la cause du probl&#232;me et pr&#233;sente une solution simple pour r&#233;tablir une rotation automatique fiable.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;strong&gt;Note historique :&lt;/strong&gt; Cet article date de novembre 2015 (Debian Jessie). Bien que les principes restent valides, certains d&#233;tails concernant logrotate et MySQL ont pu &#233;voluer. L'approche de diagnostic d&#233;crite conserve sa pertinence pour les syst&#232;mes Debian et Ubuntu modernes.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Contexte du probl&#232;me&lt;/h2&gt;
&lt;p&gt;Sur les serveurs Debian/Linux, logrotate ex&#233;cute quotidiennement la rotation des fichiers journaux via un script situ&#233; dans &lt;strong&gt;/etc/cron.daily&lt;/strong&gt;. Lorsque MySQL est install&#233;, logrotate cr&#233;e une configuration d&#233;di&#233;e qui, apr&#232;s archivage des logs, ex&#233;cute un script de post-rotation.&lt;/p&gt; &lt;p&gt;Ce script &#233;choue r&#233;guli&#232;rement avec une erreur de permissions, ce qui g&#233;n&#232;re des rapports envoy&#233;s par mail via cron.&lt;/p&gt; &lt;p&gt;Le message d'erreur type re&#231;u est le suivant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;/etc/cron.daily/logrotate: error: error running shared postrotate script for '/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log'&lt;br /&gt; run-parts: /etc/cron.daily/logrotate exited with return code 1&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Diagnostic : comprendre le r&#244;le de logrotate et debian-sys-maint&lt;/h2&gt;
&lt;p&gt;Logrotate est l'utilitaire syst&#232;me charg&#233; de limiter la croissance des fichiers journaux. Il archive et compresse les anciens logs en parcourant les fichiers de configuration du r&#233;pertoire &lt;strong&gt;/etc/logrotate.d/&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Pour la gestion de MySQL, il s'appuie sur un compte utilisateur syst&#232;me d&#233;di&#233; : &lt;strong&gt;debian-sys-maint&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Ce compte poss&#232;de les permissions minimales n&#233;cessaires &#224; la maintenance automatique du service MySQL. Ces permissions sont r&#233;f&#233;renc&#233;es dans deux fichiers cl&#233;s.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Configuration logrotate pour MySQL :&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo cat /etc/logrotate.d/mysql-server&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ce fichier d&#233;finit une variable &lt;strong&gt;MYADMIN&lt;/strong&gt; qui utilise les identifiants du compte de maintenance :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;MYADMIN=&quot;/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Fichier de configuration MySQL du compte de maintenance :&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo cat /etc/mysql/debian.cnf&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ce fichier contient les identifiants du compte &lt;strong&gt;debian-sys-maint&lt;/strong&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;# Automatically generated for Debian scripts. DO NOT TOUCH!&lt;br /&gt; [client]&lt;br /&gt; host = localhost&lt;br /&gt; user = debian-sys-maint&lt;br /&gt; password = xxxxxxxxxxxxxxx&lt;br /&gt; socket = /var/run/mysqld/mysqld.sock&lt;br /&gt; &lt;br /&gt; [mysql_upgrade]&lt;br /&gt; host = localhost&lt;br /&gt; user = debian-sys-maint&lt;br /&gt; password = xxxxxxxxxxxxxxx&lt;br /&gt; socket = /var/run/mysqld/mysqld.sock&lt;br /&gt; basedir = /usr&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Cause racine : insuffisance de privil&#232;ges&lt;/h2&gt;
&lt;p&gt;L'erreur de post-rotation survient lorsque le compte &lt;strong&gt;debian-sys-maint&lt;/strong&gt; ne dispose pas des permissions MySQL suffisantes pour ex&#233;cuter les commandes d'administration n&#233;cessaires (rechargement des tables, interrogation de l'&#233;tat du serveur, etc.).&lt;/p&gt; &lt;p&gt;Le compte syst&#232;me existe bien et acc&#232;de au fichier de configuration, mais ses droits au niveau MySQL sont incomplets ou corrompus.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Solution : restaurer les permissions du compte debian-sys-maint&lt;/h2&gt;
&lt;p&gt;La r&#233;solution consiste &#224; accorder au compte &lt;strong&gt;debian-sys-maint&lt;/strong&gt; l'ensemble des permissions administratives requises. Cette op&#233;ration doit &#234;tre effectu&#233;e avec un compte disposant des droits administrateur MySQL.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&#201;tape 1 : connexion en tant qu'administrateur MySQL&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mysql -u root -p&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Saisissez le mot de passe root MySQL.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&#201;tape 2 : attribution des permissions&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ex&#233;cutez les commandes SQL suivantes en rempla&#231;ant le mot de passe par celui figurant dans le fichier &lt;strong&gt;/etc/mysql/debian.cnf&lt;/strong&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES&lt;br /&gt; ON *.* TO 'debian-sys-maint'@'localhost'&lt;br /&gt; IDENTIFIED BY 'xxxxxxxxxxxxxxx';&lt;br /&gt; FLUSH PRIVILEGES;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Les permissions accord&#233;es correspondent &#224; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;RELOAD&lt;/strong&gt; : recharger les tables et caches&lt;/li&gt;&lt;li&gt; &lt;strong&gt;SHUTDOWN&lt;/strong&gt; : arr&#234;ter le serveur MySQL&lt;/li&gt;&lt;li&gt; &lt;strong&gt;PROCESS&lt;/strong&gt; : afficher les processus serveur&lt;/li&gt;&lt;li&gt; &lt;strong&gt;SHOW DATABASES&lt;/strong&gt; : lister les bases de donn&#233;es&lt;/li&gt;&lt;li&gt; &lt;strong&gt;SUPER&lt;/strong&gt; : ex&#233;cuter les op&#233;rations de maintenance&lt;/li&gt;&lt;li&gt; &lt;strong&gt;LOCK TABLES&lt;/strong&gt; : verrouiller les tables lors des op&#233;rations de sauvegarde&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&#201;tape 3 : application imm&#233;diate des permissions&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;La commande &lt;strong&gt;FLUSH PRIVILEGES&lt;/strong&gt; recharge les droits en m&#233;moire et rend les changements effectifs imm&#233;diatement, sans red&#233;marrage du serveur.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;FLUSH PRIVILEGES;&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;V&#233;rification&lt;/h2&gt;
&lt;p&gt;Apr&#232;s ces modifications, la prochaine ex&#233;cution de logrotate (lors du cron quotidien) fonctionnera sans erreur.&lt;/p&gt; &lt;p&gt;Pour tester imm&#233;diatement sans attendre l'ex&#233;cution automatique :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo /etc/cron.daily/logrotate&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Si aucune erreur n'est affich&#233;e, le probl&#232;me est r&#233;solu.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Pr&#233;vention et bonnes pratiques&lt;/h2&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Maintenir &#224; jour le compte &lt;strong&gt;debian-sys-maint&lt;/strong&gt; via les mises &#224; jour du paquet &lt;strong&gt;mysql-server&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; Surveiller les erreurs logrotate dans les logs cron : &lt;strong&gt;grep logrotate /var/log/syslog&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; Adapter les permissions sur les installations personnalis&#233;es ou durcies&lt;/li&gt;&lt;li&gt; Pr&#233;server le fichier &lt;strong&gt;/etc/mysql/debian.cnf&lt;/strong&gt;, &#233;l&#233;ment cl&#233; du bon fonctionnement de la maintenance automatis&#233;e&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Configuration Postfix, DNS IPv6 et serveur Debian/Linux VPS Gandi</title>
		<link>https://www.orsal.fr/Configuration-Postfix-DNS-IPv6-et</link>
		<guid isPermaLink="true">https://www.orsal.fr/Configuration-Postfix-DNS-IPv6-et</guid>
		<dc:date>2015-03-15T16:21:53Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Lors d'une migration sur un VPS Gandi sous Debian, l'envoi de mails avec Postfix ne fonctionnait plus vers l'ext&#233;rieur. Cette page explique l'origine du probl&#232;me (DNS et IPv6) et pr&#233;sente la configuration et la solution pour r&#233;tablir l'envoi des mails.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L104xH100/arton57-3cb8f.jpg' width='104' height='100' onmouseover=&quot;this.src='local/cache-vignettes/L104xH100/artoff57-03d13.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L104xH100/arton57-3cb8f.jpg'&quot; style='height:100px;width:104px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Lors d'une migration sur un VPS Gandi sous Debian, l'envoi de mails avec Postfix ne fonctionnait plus vers l'ext&#233;rieur. Cette page explique l'origine du probl&#232;me (DNS et IPv6) et pr&#233;sente la configuration et la solution pour r&#233;tablir l'envoi des mails.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Installation de Postfix&lt;/h2&gt;
&lt;p&gt;Je ne l'installe pas tous les jours, alors pour ne pas oublier la bonne marche &#224; suivre, voici la proc&#233;dure d'installation de Postfix.&lt;/p&gt; &lt;p&gt;Tout d'abord, j'ai ajout&#233; les paquets &lt;strong&gt;postfix&lt;/strong&gt; et &lt;strong&gt;procmail&lt;/strong&gt;. Pour v&#233;rifier si les paquets sont d&#233;j&#224; install&#233;s :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dpkg -s procmail postfix 2&gt;/dev/null | grep -i -E &quot;status|package&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;S'ils n'apparaissent pas, ou pas tous, dans la liste, il faut les installer :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get install &lt;nom du paquet&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'objectif est que les sites web install&#233;s sur la machine puissent envoyer des mails, j'ai donc r&#233;pondu aux &#233;tapes d'installation de la mani&#232;re suivante.&lt;/p&gt; &lt;p&gt;Le choix du type d'installation &lt;strong&gt;Site Internet&lt;/strong&gt; correspond &#224; un serveur qui envoie des mails sortants (notifications, formulaires, scripts), sans h&#233;berger de bo&#238;tes mail publiques. C'est le cas le plus courant pour un serveur web ou un VPS applicatif.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_28 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH311/postfix-1-1edcd.jpg' width='500' height='311' alt=&quot;Type d'installation Postfix&quot; title=&quot;Type d'installation Postfix&quot; style='height:311px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Il faut ensuite indiquer le nom de domaine utilis&#233; par les mails provenant de la machine, donc &#233;mis par les comptes utilisateurs locaux. Probablement votre &lt;strong&gt;nom de domaine principal&lt;/strong&gt;. Les emails appara&#238;tront comme provenant de &lt;utilisateur&gt;@&lt;ce domaine&gt;.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_29 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH227/postfix-2-4b48a.jpg' width='500' height='227' alt=&quot;Postfix Configuration - FQDN&quot; title=&quot;Postfix Configuration - FQDN&quot; style='height:227px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Les utilisateurs &lt;strong&gt;root&lt;/strong&gt; et &lt;strong&gt;postmaster&lt;/strong&gt; doivent transf&#233;rer leur mail vers un autre compte. J'ai donc indiqu&#233; un &lt;strong&gt;compte utilisateur standard&lt;/strong&gt;. Nous y reviendrons un peu plus tard, notamment pour une question de r&#233;f&#233;rencement.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_30 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH243/postfix-3-fc3cd.jpg' width='500' height='243' alt=&quot;Postfix Configuration - Postmaster account&quot; title=&quot;Postfix Configuration - Postmaster account&quot; style='height:243px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Comme c'est un serveur, il ne sert pas uniquement &#224; l'envoi, mais aussi &#224; la r&#233;ception. Il faut donc d&#233;finir les noms de domaines pour lesquels la machine va recevoir des emails. Mais comme je ne souhaite qu'envoyer des mails, je n'indique que &lt;strong&gt;localhost&lt;/strong&gt;. Ainsi, je ne recevrai que des mails locaux du type root@localhost, le reste sera transf&#233;r&#233;.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_31 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH141/postfix-4-c2a37.jpg' width='500' height='141' alt=&quot;Postfix Configuration - Final destination domain name&quot; title=&quot;Postfix Configuration - Final destination domain name&quot; style='height:141px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Mises &#224; jour synchronis&#233;es. Je ne ma&#238;trise pas bien ce param&#232;tre, je me fie donc &#224; l'indication fournie et je ne force pas la synchronisation.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_32 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH155/postfix-5-119a5.jpg' width='500' height='155' alt=&quot;Postfix Configuration - Synchronous updates&quot; title=&quot;Postfix Configuration - Synchronous updates&quot; style='height:155px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;R&#233;seaux internes. J'ai laiss&#233; le &lt;strong&gt;param&#232;tre par d&#233;faut&lt;/strong&gt; qui renvoie sur la boucle locale : 127.0.0.0/8 [ ::ffff:127.0.0.0]/104 [ ::1]/128&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_33 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH241/postfix-6-22a15.jpg' width='500' height='241' alt=&quot;Postfix Configuration - Local network&quot; title=&quot;Postfix Configuration - Local network&quot; style='height:241px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Utilisation de &lt;strong&gt;procmail pour la distribution locale&lt;/strong&gt; : j'ai choisi Oui.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_34 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH153/postfix-7-b32e1.jpg' width='500' height='153' alt=&quot;Postfix Configuration - Procmail&quot; title=&quot;Postfix Configuration - Procmail&quot; style='height:153px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Pour le &lt;strong&gt;quota des bo&#238;tes mail&lt;/strong&gt;, &#224; vous de voir. Comme l'installation n'est a priori pas pr&#233;vue pour recevoir des messages, les comptes recevront n&#233;anmoins les mails de rapports d'erreur.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_35 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH140/postfix-8-479c5.jpg' width='500' height='140' alt=&quot;Postfix Configuration - Quota&quot; title=&quot;Postfix Configuration - Quota&quot; style='height:140px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Caract&#232;re d'extension pour les adresses locales. Je n'ai pas bien compris cette fonctionnalit&#233; et, a priori, je n'en ai pas besoin, je ne l'active donc pas en laissant le champ vide.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_36 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH149/postfix-9-bcbbe.jpg' width='500' height='149' alt=&quot;Postfix Configuration - Local adress extension&quot; title=&quot;Postfix Configuration - Local adress extension&quot; style='height:149px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Protocole Internet. Je choisis &lt;strong&gt;all&lt;/strong&gt;, mais c'est peut-&#234;tre ce choix qui me posera un probl&#232;me plus tard.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_37 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH229/postfix-10-eb2d7.jpg' width='500' height='229' alt=&quot;Postfix Configuration - Interfaces&quot; title=&quot;Postfix Configuration - Interfaces&quot; style='height:229px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Configuration de Postfix&lt;/h2&gt;
&lt;p&gt;Si Postfix est d&#233;j&#224; install&#233;, il est possible de modifier directement la configuration, soit en rejouant la proc&#233;dure d'installation avec la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dpkg-reconfigure postfix&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Soit en modifiant directement le fichier de configuration, avec les droits administrateur :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /etc/postfix/main.cf&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;NB : petit rappel des commandes &lt;strong&gt;vi&lt;/strong&gt; : &lt;strong&gt;x&lt;/strong&gt; pour supprimer le caract&#232;re courant, &lt;strong&gt;i&lt;/strong&gt; pour ins&#233;rer du texte, &lt;strong&gt;Esc&lt;/strong&gt; pour terminer l'&#233;dition, &lt;strong&gt;o&lt;/strong&gt; pour ajouter une ligne et ins&#233;rer, &lt;strong&gt;:w&lt;/strong&gt; pour enregistrer, &lt;strong&gt;:q&lt;/strong&gt; pour quitter, &lt;strong&gt;a&lt;/strong&gt; pour ins&#233;rer en fin de ligne.&lt;/p&gt; &lt;p&gt;Je pr&#233;sente ici uniquement les lignes que j'ai modifi&#233;es, les autres restent inchang&#233;es.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;myhostname = orsal.net&lt;br /&gt; alias_maps = hash:/etc/aliases&lt;br /&gt; alias_database = hash:/etc/aliases&lt;br /&gt; mydestination = localhost&lt;br /&gt; relayhost =&lt;br /&gt; mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128&lt;br /&gt; mailbox_command = procmail -a &quot;$EXTENSION&quot;&lt;br /&gt; mailbox_size_limit = 0&lt;br /&gt; recipient_delimiter =&lt;br /&gt; inet_interfaces = loopback-only&lt;br /&gt; inet_protocols = all&lt;br /&gt; myorigin = /etc/mailname&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Limiter &lt;strong&gt;inet_interfaces&lt;/strong&gt; &#224; la boucle locale permet d'&#233;viter que le serveur ne devienne un relais SMTP ouvert, ce qui serait un risque de s&#233;curit&#233; majeur. En effet, je ne souhaite pas pouvoir envoyer des emails, via ce serveur, depuis un autre serveur sur Internet.&lt;/p&gt; &lt;p&gt;Le param&#232;tre &lt;strong&gt;relayhost&lt;/strong&gt; permet d'indiquer un serveur SMTP relais. Chez Gandi, je n'ai pas eu besoin d'en indiquer. En cas d'envoi de mail, Postfix trouve le serveur de destination par une requ&#234;te DNS et le contacte directement pour lui remettre le mail.&lt;/p&gt; &lt;p&gt;Dans le cas d'un serveur h&#233;berg&#233; &#224; domicile, donc probablement situ&#233; dans une plage d'adresses IP ne devant a priori pas envoyer d'emails, vous risquez d'&#234;tre bloqu&#233; &#224; l'envoi. Le mail partira, mais le serveur destinataire pourra le rejeter car marqu&#233; comme spam, par exemple via &lt;a href=&quot;http://www.spamhaus.org/query/bl?ip=212.194.96.16&quot; class='spip_out' rel='external'&gt;Spamhaus&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Dans ce cas, il faudra passer par le serveur SMTP de votre h&#233;bergeur en configurant le param&#232;tre &lt;strong&gt;relayhost&lt;/strong&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;relayhost = smtp.votrefournisseur.fr&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le nom de domaine utilis&#233; comme exp&#233;diteur est configur&#233; dans le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/mailname&lt;/code&gt;, &#224; modifier de la m&#234;me mani&#232;re que &lt;code class='spip_code' dir='ltr'&gt;main.cf&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Enfin, la configuration des alias s'effectue dans le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/aliases&lt;/code&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /etc/aliases&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Il faut configurer la redirection des comptes &lt;strong&gt;postmaster&lt;/strong&gt; et &lt;strong&gt;root&lt;/strong&gt; vers l'utilisateur standard si ce n'est pas d&#233;j&#224; fait. Les lignes sont construites de la mani&#232;re suivante :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;alias: destinataire, destinataire, ...&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Il faut donc ajouter :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;root: utilisateur&lt;br /&gt; postmaster: utilisateur&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s toute modification, il faut red&#233;marrer Postfix pour appliquer la configuration :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo service postfix restart&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Test d'envoi de mail&lt;/h2&gt;
&lt;p&gt;Pour v&#233;rifier que tout fonctionne, il suffit de s'envoyer un email :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;echo &quot;Mon message de `date +%T`&quot; | mail -s &quot;Test mail&quot; &lt;votre adresse email&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Si vous recevez le message, c'est tout bon. Vous pouvez &#233;galement tester depuis les sites web install&#233;s sur le serveur.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Identification du probl&#232;me&lt;/h2&gt;
&lt;p&gt;Chez moi, les mails ne partaient pas. Un tour dans les logs permet d'en savoir plus :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo cat /var/log/mail.log&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Erreur obtenue :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;Feb 2 15:43:50 myservername postfix/smtp[5908]: 23FEC7801: to=&lt;root@example.org&gt;, relay=none, delay=57183, delays=57183/0.01/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=example.org type=MX: Host not found, try again)&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Un probl&#232;me de r&#233;solution DNS semble donc en cause : Postfix n'arrive pas &#224; r&#233;soudre le serveur MX du domaine destinataire.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;R&#233;solution du probl&#232;me&lt;/h2&gt;
&lt;p&gt;Le probl&#232;me venait du serveur DNS IPv6 qui ne r&#233;pondait pas. Lors d'un envoi de mail, Postfix lan&#231;ait une r&#233;solution du nom de domaine destinataire. N'obtenant pas de r&#233;ponse, apr&#232;s plusieurs tentatives, le message tombait en erreur et &#233;tait renvoy&#233; &#224; l'exp&#233;diteur.&lt;/p&gt; &lt;p&gt;Pour r&#233;soudre le probl&#232;me, j'ai supprim&#233; le serveur DNS IPv6 de la liste des serveurs DNS de la machine.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /etc/resolv.conf&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;et supprim&#233; la ligne :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nameserver 2001:4b98:dc0:49::225&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Un red&#233;marrage du serveur est n&#233;cessaire pour que la modification soit prise en compte.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; Sur les syst&#232;mes Debian modernes, le fichier &lt;strong&gt;/etc/resolv.conf&lt;/strong&gt; peut &#234;tre r&#233;g&#233;n&#233;r&#233; automatiquement (DHCP, NetworkManager, systemd-resolved). Dans ce cas, cette modification peut &#234;tre temporaire.&lt;/p&gt; &lt;p&gt;Par pr&#233;caution, j'ai &#233;galement configur&#233; Postfix pour n'utiliser que IPv4 :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;inet_protocols = ipv4&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Forcer &lt;strong&gt;inet_protocols = ipv4&lt;/strong&gt; permet &#224; Postfix d'&#233;viter toute tentative de r&#233;solution IPv6, tout en laissant le syst&#232;me utiliser IPv6 pour les autres services.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;R&#233;f&#233;rencement SEO et configuration mail&lt;/h2&gt;
&lt;p&gt;Google encourage les sites &#224; respecter de bonnes pratiques de qualit&#233; et de fiabilit&#233;, notamment pour les services techniques comme l'envoi de mails.&lt;/p&gt; &lt;p&gt;Un nom de domaine doit poss&#233;der les deux adresses suivantes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; abuse&lt;span class='mcrypt'&gt; &lt;/span&gt;votrenomdedomaine.org&lt;/li&gt;&lt;li&gt; postmaster&lt;span class='mcrypt'&gt; &lt;/span&gt;votrenomdedomaine.org&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il n'est pas obligatoire qu'il s'agisse de comptes r&#233;els : une simple redirection suffit.&lt;/p&gt; &lt;p&gt;Cette probl&#233;matique illustre bien qu'un dysfonctionnement DNS, en particulier li&#233; &#224; IPv6, peut avoir des effets indirects difficiles &#224; diagnostiquer sur un serveur mail pourtant correctement configur&#233;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;En savoir plus&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://postfix.traduc.org/index.php/STANDARD_CONFIGURATION_README.html&quot; class='spip_out' rel='external'&gt;Exemples de configuration de Postfix&lt;/a&gt; &lt;a href=&quot;http://www.postfix.org/&quot; class='spip_out' rel='external'&gt;Postfix.org&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Configuration du wifi sous Linux/Debian en ligne de commande</title>
		<link>https://www.orsal.fr/Configuration-du-wifi-sous-Linux</link>
		<guid isPermaLink="true">https://www.orsal.fr/Configuration-du-wifi-sous-Linux</guid>
		<dc:date>2014-08-04T17:01:28Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Voici donc un petit article qui r&#233;sume les &#233;tapes essentielles de la configuration manuelle du wifi sous Linux, sans interface graphique, directement en ligne de commande. Cette approche est particuli&#232;rement adapt&#233;e aux serveurs Debian ou aux installations l&#233;g&#232;res, o&#249; l'on recherche simplicit&#233;, stabilit&#233; et reproductibilit&#233;.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH146/arton43-dfabe.jpg' width='150' height='146' onmouseover=&quot;this.src='local/cache-vignettes/L150xH146/artoff43-e64a1.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH146/arton43-dfabe.jpg'&quot; style='height:146px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Configurer et connecter le WiFi sous Debian en ligne de commande : guide pratique avec wpa_supplicant (approche traditionnelle) et nmcli (m&#233;thode moderne).&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Nouvelle installation serveur, sous &lt;a href='https://www.debian.org/' class='spip_out' rel='external'&gt;Debian&lt;/a&gt; cette fois-ci. Comme d'habitude sur un syst&#232;me Linux minimal, il faut tout reconfigurer &#224; la main, et j'ai encore oubli&#233; &lt;strong&gt;comment configurer le r&#233;seau wifi sous Linux en ligne de commande&lt;/strong&gt;. &lt;img alt=&quot;:-(&quot; title=&quot;:-(&quot; class=&quot;no_image_filtrer format_png&quot; src=&quot;https://www.orsal.fr/plugins/auto/couteau_suisse/img/smileys/pas_content.png&quot; width=&quot;19&quot; height=&quot;19&quot;/&gt;&lt;/p&gt; &lt;p&gt;Voici donc un petit article qui r&#233;sume les &#233;tapes essentielles de la &lt;strong&gt;configuration manuelle du wifi sous Linux&lt;/strong&gt;, sans interface graphique, directement en ligne de commande. Cette approche est particuli&#232;rement adapt&#233;e aux serveurs Debian ou aux installations l&#233;g&#232;res, o&#249; l'on recherche simplicit&#233;, stabilit&#233; et reproductibilit&#233;.&lt;/p&gt; &lt;p&gt;Comme il s'agit d'un r&#233;seau domestique, je souhaite :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; forcer le SSID du r&#233;seau wifi&lt;/li&gt;&lt;li&gt; configurer une cl&#233; WPA (PSK)&lt;/li&gt;&lt;li&gt; d&#233;finir une adresse IP fixe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cette m&#233;thode permet d'&#233;viter toute d&#233;pendance &#224; un outil graphique ou &#224; un gestionnaire de r&#233;seau, ce qui est souvent pr&#233;f&#233;rable sur un serveur.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; M&#233;thode traditionnelle : wpa_supplicant (configuration manuelle) &lt;/h2&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Passer root :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;su -&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; V&#233;rifier que &lt;strong&gt;wpa_supplicant&lt;/strong&gt; est install&#233; :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;apt-get update&lt;br /&gt; apt-get install wpasupplicant&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &#201;diter la configuration r&#233;seau :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;vi /etc/network/interfaces&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;NB : vous pouvez utiliser tout autre &#233;diteur &#224; votre convenance.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Ajouter les lignes suivantes, puis sauvegarder :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;auto wlan0&lt;br /&gt; iface wlan0 inet static&lt;br /&gt; wpa-ssid NomDuReseau&lt;br /&gt; wpa-psk MotDePasseWifi&lt;br /&gt; address 192.168.1.100&lt;br /&gt; netmask 255.255.255.0&lt;br /&gt; gateway 192.168.1.1&lt;br /&gt; dns-nameservers 192.168.1.1&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'adresse IP &lt;strong&gt;192.168.1.100&lt;/strong&gt; est un exemple d'adresse priv&#233;e sur un r&#233;seau local domestique. Elle doit &#234;tre choisie dans la plage du r&#233;seau local, en dehors de la plage DHCP du routeur, et ne pas &#234;tre utilis&#233;e par un autre &#233;quipement.&lt;/p&gt; &lt;p&gt;Le champ &lt;strong&gt;gateway&lt;/strong&gt; correspond &#224; l'adresse IP du routeur (souvent &lt;strong&gt;192.168.1.1&lt;/strong&gt;), qui permet l'acc&#232;s &#224; Internet.
Le serveur DNS est ici volontairement d&#233;fini sur le routeur, mais peut &#234;tre remplac&#233; par un DNS public si n&#233;cessaire.&lt;/p&gt; &lt;p&gt;NB : Sous &lt;strong&gt;vi&lt;/strong&gt;, pour ins&#233;rer des modifications, il faut taper &lt;i&gt;i&lt;/i&gt;. La touche &lt;i&gt;Echap&lt;/i&gt; ou &lt;i&gt;Esc&lt;/i&gt; permet de quitter le mode insertion. Pour enregistrer et quitter : &lt;i&gt;:wq&lt;/i&gt; puis valider.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;marrer l'interface wifi :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ifup wlan0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Si l'interface est d&#233;j&#224; active :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ifdown wlan0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ces commandes permettent &#233;galement d'activer, d&#233;sactiver ou red&#233;marrer la connexion WiFi sous Debian en ligne de commande.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; V&#233;rifier l'&#233;tat de la connexion r&#233;seau :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ifconfig&lt;br /&gt; iwconfig&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Lister les r&#233;seaux wifi disponibles &#224; port&#233;e :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;iwlist scan | grep ESSID&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cette commande permet de scanner les r&#233;seaux WiFi sous Debian et de v&#233;rifier que l'interface WLAN est correctement d&#233;tect&#233;e avant la connexion.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Mise &#224; jour : configuration wifi avec nmcli (Debian r&#233;cents) &lt;/h2&gt;
&lt;p&gt;L'article initial date de 2014, &#224; l'&#233;poque de Debian Wheezy, et repose sur une configuration r&#233;seau enti&#232;rement manuelle.&lt;/p&gt; &lt;p&gt;Les versions plus r&#233;centes de Debian utilisent g&#233;n&#233;ralement &lt;strong&gt;NetworkManager&lt;/strong&gt;, qui permet de configurer le wifi directement en ligne de commande via l'outil &lt;strong&gt;nmcli&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Cette m&#233;thode est plus simple et mieux int&#233;gr&#233;e, mais reste moins adapt&#233;e aux serveurs tr&#232;s minimalistes ou aux installations sans NetworkManager.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Passer root :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;su -&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; V&#233;rifier que NetworkManager est install&#233; :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli --version&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Si n&#233;cessaire :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;apt-get update&lt;br /&gt; apt-get install network-manager&lt;br /&gt; systemctl restart NetworkManager&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Identifier le nom de l'interface WiFi :&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;L'interface WiFi (souvent appel&#233;e interface WLAN) peut porter diff&#233;rents noms selon le mat&#233;riel et la version de Debian.&lt;/p&gt; &lt;p&gt;Sur les syst&#232;mes r&#233;cents, l'interface WiFi (souvent appel&#233;e interface WLAN) ne s'appelle plus toujours &lt;strong&gt;wlan0&lt;/strong&gt;, mais peut porter diff&#233;rents noms comme &lt;strong&gt;wlp2s0&lt;/strong&gt;, &lt;strong&gt;wlan1&lt;/strong&gt;, etc. selon le mat&#233;riel et la version de Debian.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli device status&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La colonne &lt;strong&gt;DEVICE&lt;/strong&gt; indique le nom exact de l'interface &#224; utiliser dans les commandes suivantes.&lt;/p&gt; &lt;p&gt;Dans les exemples ci-dessous, l'interface WiFi utilis&#233;e est &lt;strong&gt;wlp2s0&lt;/strong&gt;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Connexion wifi simple (DHCP) :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli device wifi connect &quot;NomDuReseau&quot; password &quot;MotDePasseWifi&quot;&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Connexion wifi avec IP fixe (ou IP statique) :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli connection add type wifi ifname wlp2s0 con-name MaConnexion ssid NomDuReseau&lt;br /&gt; nmcli connection modify MaConnexion wifi-sec.key-mgmt wpa-psk &lt;br /&gt; nmcli connection modify MaConnexion wifi-sec.psk MotDePasseWifi&lt;br /&gt; nmcli connection modify MaConnexion ipv4.method manual&lt;br /&gt; nmcli connection modify MaConnexion ipv4.addresses 192.168.1.100/24&lt;br /&gt; nmcli connection modify MaConnexion ipv4.gateway 192.168.1.1&lt;br /&gt; nmcli connection modify MaConnexion ipv4.dns 192.168.1.1&lt;br /&gt; nmcli connection up MaConnexion&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Selon la configuration du point d'acc&#232;s WiFi, la cl&#233; peut &#234;tre utilis&#233;e en WPA2-PSK ou en WPA3-SAE. NetworkManager, comme wpa_supplicant, s&#233;lectionnent automatiquement le mode de s&#233;curit&#233; compatible.&lt;/p&gt; &lt;p&gt;Sur un r&#233;seau configur&#233; exclusivement en WPA3, il est possible de remplacer &lt;strong&gt;wpa-psk&lt;/strong&gt; par &lt;strong&gt;sae&lt;/strong&gt; pour forcer l'utilisation de WPA3.&lt;/p&gt; &lt;p&gt;La notation &lt;strong&gt;/24&lt;/strong&gt; correspond au masque de sous-r&#233;seau &lt;strong&gt;255.255.255.0&lt;/strong&gt;. Elle indique que les 24 premiers bits d&#233;finissent le r&#233;seau, ce qui est le cas le plus courant sur un r&#233;seau domestique en &lt;strong&gt;192.168.x.x&lt;/strong&gt;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; V&#233;rifier l'&#233;tat de la connexion :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli device status&lt;br /&gt; nmcli connection show&lt;/code&gt;&lt;/div&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;sactiver la connexion wifi pour une interface :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli device disconnect wlp2s0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le nom du p&#233;riph&#233;rique est obtenu via la commande &lt;strong&gt;nmcli device status&lt;/strong&gt;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;sactiver le wifi globalement :&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;nmcli radio wifi off&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cette approche moderne compl&#232;te efficacement la configuration traditionnelle bas&#233;e sur &lt;strong&gt;wpa_supplicant&lt;/strong&gt;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Ressources et documentation &lt;/h2&gt;
&lt;p&gt;Pour &#233;crire cet article, je me suis appuy&#233; sur la documentation officielle :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;https://wiki.debian.org/fr/WiFi/HowToUse#Ligne_de_commande&quot; class='spip_out' rel='external'&gt;Wiki Debian &#8211; WiFi en ligne de commande&lt;/a&gt; &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://www.debian.org/doc/manuals/debian-reference/ch05.en.html&quot; class='spip_out' rel='external'&gt;Debian Reference &#8211; Configuration r&#233;seau&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;En esp&#233;rant que ce r&#233;sum&#233; vous fasse gagner du temps lors de vos prochaines installations Linux.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Montage permanent d'un disque NTFS sous GNU Linux / Ubuntu</title>
		<link>https://www.orsal.fr/Montage-permanent-d-un-disque-NTFS</link>
		<guid isPermaLink="true">https://www.orsal.fr/Montage-permanent-d-un-disque-NTFS</guid>
		<dc:date>2013-01-09T12:41:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Pour monter un disque dur de mani&#232;re permanente sous Linux, il faut modifier le fichier /etc/fstab, voici comment proc&#233;der.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH146/arton38-d4a71.jpg' width='150' height='146' onmouseover=&quot;this.src='local/cache-vignettes/L150xH146/artoff38-7505d.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH146/arton38-d4a71.jpg'&quot; style='height:146px;width:150px;' /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Pour &lt;strong&gt;monter un disque dur&lt;/strong&gt; de mani&#232;re permanente sous Linux, il faut modifier le fichier &lt;strong&gt;/etc/fstab&lt;/strong&gt;, voici comment proc&#233;der.&lt;/p&gt; &lt;p&gt;Pour cela, nous avons besoin de l'identifiant du disque obtenu par la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo blkid&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Rep&#233;rez parmi le r&#233;sultat de la commande le disque &#224; monter :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;/dev/sdb1: LABEL=&#8220;DATA&#8221; UUID=&#8220;{{0BB8A34EA8A3375B}}&#8221; TYPE=&#8220;{{ntfs}}&#8221;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;C'est le type et l'UUID qui nous int&#233;ressent.&lt;/p&gt; &lt;p&gt;Il faut ensuite &#233;diter le fichier /etc/fstab :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /etc/fstab&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Reportez-vous au manuel de &#171; vi &#187; pour &#233;diter le fichier si vous ne savez l'utiliser.&lt;/p&gt; &lt;p&gt;Ajoutez en fin de fichier la ligne suivante :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;UUID=0BB8A34EA8A3375B /data ntfs defaults,errors=remount-ro 0 1&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La ligne se d&#233;compose ainsi :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;UUID&lt;/code&gt; = id du disque fourni par la commande &lt;i&gt;blkid&lt;/i&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;/data&lt;/code&gt; = emplacement de montage, c'est-&#224;-dire le chemin &#224; partir duquel le disque sera accessible&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;ntfs&lt;/code&gt; = type de disque fourni par la commande &lt;i&gt;blkid&lt;/i&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;defaults,errors=remount-ro&lt;/code&gt; = param&#232;tre de la commande &lt;i&gt;mount &lt;/i&gt; pour monter le disque, reportez-vous au manuel (commande &lt;i&gt;man mount&lt;/i&gt;) pour voir ce qu'il est possible d'utiliser.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;0&lt;/code&gt; = aucune id&#233;e de ce &#224; quoi sert ce param&#232;tre &lt;i&gt;dump&lt;/i&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;1&lt;/code&gt; = aucune id&#233;e de ce &#224; quoi sert ce param&#232;tre &lt;i&gt;pass&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour tester le r&#233;sultat sans red&#233;marrer (c'est plus prudent, on ne sait jamais), vous pouvez recharger la table de montage &#224; chaud par la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount -a&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Il se peut qu'il faille que le r&#233;pertoire utilis&#233; comme chemin de montage existe d&#233;j&#224;. Si le montage &#224; chaud renvoi donc une erreur en rapport avec le r&#233;pertoire, cr&#233;ez-le par la commande suivante, adapt&#233;e pour votre emplacement :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mkdir /data&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Puis refaite un montage &#224; chaud, qui devrait d&#233;sormais fonctionner.&lt;/p&gt; &lt;p&gt;Ainsi, au prochain red&#233;marrage le disque devrait &#234;tre mont&#233; automatiquement au d&#233;marrage.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
