<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quelques pensées</title>
	<atom:link href="https://blog.neurozone.fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.neurozone.fr/</link>
	<description>Terres dévastées</description>
	<lastBuildDate>Sat, 24 Oct 2026 13:35:39 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2024/03/cropped-2.png?fit=32%2C32&#038;ssl=1</url>
	<title>Quelques pensées</title>
	<link>https://blog.neurozone.fr/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">154219366</site>	<item>
		<title>Dans les fichiers d&#8217;une base de données (1/3) : InnoDB, de MySQL à MariaDB</title>
		<link>https://blog.neurozone.fr/2026/10/23/dans-les-fichiers-dune-base-de-donnees-1-3-innodb-de-mysql-a-mariadb/</link>
					<comments>https://blog.neurozone.fr/2026/10/23/dans-les-fichiers-dune-base-de-donnees-1-3-innodb-de-mysql-a-mariadb/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Fri, 23 Oct 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[carnet d'admin]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[série : Dans les fichiers d'une base de données]]></category>
		<category><![CDATA[stockage]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1787</guid>

					<description><![CDATA[<p>Une base de données relationnelle donne l&#8217;illusion de tables, de lignes et de colonnes. Sur le disque, il n&#8217;y a que des fichiers découpés en blocs de taille fixe. Comprendre comment ces blocs sont organisés explique beaucoup de comportements qui semblent mystérieux : pourquoi un fichier ne rétrécit pas après un DELETE, pourquoi une clé [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/dans-les-fichiers-dune-base-de-donnees-1-3-innodb-de-mysql-a-mariadb/">Dans les fichiers d&rsquo;une base de données (1/3) : InnoDB, de MySQL à MariaDB</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Une base de données relationnelle donne l&rsquo;illusion de tables, de lignes et de colonnes. Sur le disque, il n&rsquo;y a que des fichiers découpés en blocs de taille fixe. Comprendre comment ces blocs sont organisés explique beaucoup de comportements qui semblent mystérieux : pourquoi un fichier ne rétrécit pas après un <code>DELETE</code>, pourquoi une clé primaire en UUID ralentit les insertions, pourquoi un index secondaire coûte plus cher qu&rsquo;on ne le pense, ou ce que protège vraiment le « doublewrite buffer ».</p>



<p class="wp-block-paragraph">Cette série de trois billets ouvre le capot de trois moteurs : <strong>InnoDB</strong> (le moteur de stockage de MySQL et de MariaDB), <strong>PostgreSQL</strong> et <strong>Oracle</strong>. Le même fil conducteur les traverse : les fichiers, les pages, les lignes, et l&rsquo;endroit où vivent les anciennes versions des données. Premier arrêt : InnoDB.</p>



<h3 class="wp-block-heading">Le répertoire de données</h3>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="629" height="315" src="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=629%2C315&#038;ssl=1" alt="Arborescence du datadir de MySQL 8" class="wp-image-1773" srcset="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?w=1800&amp;ssl=1 1800w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=300%2C150&amp;ssl=1 300w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=1024%2C512&amp;ssl=1 1024w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=768%2C384&amp;ssl=1 768w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=1536%2C768&amp;ssl=1 1536w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=900%2C450&amp;ssl=1 900w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_files_fr.png?resize=1280%2C640&amp;ssl=1 1280w" sizes="(max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Les fichiers d&rsquo;une instance MySQL 8 et leurs équivalents MariaDB.</figcaption></figure>



<p class="wp-block-paragraph">Chaque fichier a un rôle précis :</p>



<ul class="wp-block-list"><li><strong><code>ibdata1</code></strong>, le <em>tablespace système</em>. Historiquement, il contenait tout : tables, index, undo, dictionnaire. Aujourd&rsquo;hui, il ne garde plus que le <em>change buffer</em> (sur MySQL) et, sur MariaDB, le doublewrite et parfois l&rsquo;undo. Il ne rétrécit jamais : un <code>ibdata1</code> de 50 Go gonflé par une vieille transaction le restera, et la seule façon de le réduire est un export complet suivi d&rsquo;une réimportation ;</li><li><strong>un fichier <code>.ibd</code> par table</strong>, grâce à <code>innodb_file_per_table=ON</code> (le défaut depuis MySQL 5.6). C&rsquo;est ce qui permet de récupérer l&rsquo;espace d&rsquo;une table supprimée ou vidée (<code>DROP</code>, <code>TRUNCATE</code>), de déplacer une table seule, ou de restaurer un seul tablespace ;</li><li><strong>les tablespaces d&rsquo;undo</strong> (<code>undo_001</code>…) : les images d&rsquo;avant des lignes modifiées, pour les <code>ROLLBACK</code> et pour la lecture cohérente des autres transactions ;</li><li><strong>le journal redo</strong> : chaque modification de page y est décrite avant que la page elle-même soit écrite sur le disque. Après un crash, InnoDB rejoue ce journal ;</li><li><strong>le doublewrite buffer</strong>, expliqué plus bas ;</li><li><strong>les binlogs</strong>, qui n&rsquo;appartiennent pas à InnoDB mais au serveur : ils décrivent les changements au niveau SQL, pour la réplication et la restauration à un instant donné.</li></ul>



<p class="wp-block-paragraph">Une base de données SQL (<code>CREATE DATABASE shop</code>) n&rsquo;est rien d&rsquo;autre qu&rsquo;un répertoire. Les noms exacts des fichiers globaux varient : MySQL et MariaDB ont divergé sur le dictionnaire (MySQL 8 a remplacé les fichiers <code>.frm</code> par un dictionnaire transactionnel dans <code>mysql.ibd</code>, MariaDB a gardé les <code>.frm</code>), sur le redo et sur le doublewrite. Le format interne des pages, lui, est commun. Pour voir les tablespaces d&rsquo;une instance :</p>



<pre class="wp-block-code"><code>-- MySQL 8
SELECT name, file_size, allocated_size FROM information_schema.INNODB_TABLESPACES;
-- MariaDB
SELECT name, file_size, allocated_size FROM information_schema.INNODB_SYS_TABLESPACES;</code></pre>



<h3 class="wp-block-heading">Pages, extents, segments</h3>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?ssl=1"><img data-recalc-dims="1" decoding="async" width="629" height="287" src="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=629%2C287&#038;ssl=1" alt="Hiérarchie tablespace, segments, extents, pages" class="wp-image-1774" srcset="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?w=1800&amp;ssl=1 1800w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=300%2C137&amp;ssl=1 300w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=1024%2C466&amp;ssl=1 1024w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=768%2C350&amp;ssl=1 768w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=1536%2C700&amp;ssl=1 1536w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=900%2C410&amp;ssl=1 900w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_hierarchy_fr.png?resize=1280%2C583&amp;ssl=1 1280w" sizes="(max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Un tablespace est découpé en pages de 16 Ko, regroupées en extents de 1 Mo, attribués aux segments de chaque index.</figcaption></figure>



<p class="wp-block-paragraph">L&rsquo;unité de base est la <strong>page</strong>, de 16 Ko par défaut. Sa taille (<code>innodb_page_size</code>) est fixée à la création de l&rsquo;instance et ne peut plus changer ensuite. Tout ce qu&rsquo;InnoDB lit ou écrit, il le lit ou l&rsquo;écrit par pages entières : lire une ligne de 100 octets, c&rsquo;est charger 16 Ko en mémoire, dans le <em>buffer pool</em>.</p>



<p class="wp-block-paragraph">Les pages sont regroupées en <strong>extents</strong> de 64 pages, soit 1 Mo. Allouer par extents plutôt que page par page garde les pages d&rsquo;un même index physiquement proches, ce qui rend les lectures séquentielles efficaces.</p>



<p class="wp-block-paragraph">Chaque index possède deux <strong>segments</strong> : un pour ses pages feuilles, un pour ses pages intermédiaires. Les séparer garde les feuilles (là où sont les données) contiguës, pour les parcours par plage. Pour ne pas réserver 1 Mo à chaque petite table, un segment reçoit d&rsquo;abord jusqu&rsquo;à 32 pages isolées, et ne passe aux extents complets qu&rsquo;ensuite. C&rsquo;est pourquoi une table vide occupe une centaine de kilo-octets, et pas plusieurs mégaoctets.</p>



<p class="wp-block-paragraph">Les premières pages d&rsquo;un <code>.ibd</code> sont réservées à la gestion de l&rsquo;espace : la page 0 (<code>FSP_HDR</code>) décrit l&rsquo;état des extents, la page 1 le bitmap du change buffer, la page 2 les « inodes » des segments. Sur MySQL 8, la page 3 contient la description de la table en JSON (SDI) et la racine de l&rsquo;index cluster est en page 4. Sur MariaDB, qui garde des <code>.frm</code>, la racine est en page 3.</p>



<h3 class="wp-block-heading">Anatomie d&rsquo;une page</h3>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?ssl=1"><img data-recalc-dims="1" decoding="async" width="629" height="402" src="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=629%2C402&#038;ssl=1" alt="Structure d&#x27;une page d&#x27;index InnoDB de 16 Ko" class="wp-image-1775" srcset="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?w=1720&amp;ssl=1 1720w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=300%2C192&amp;ssl=1 300w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=1024%2C654&amp;ssl=1 1024w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=768%2C490&amp;ssl=1 768w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=1536%2C981&amp;ssl=1 1536w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=900%2C575&amp;ssl=1 900w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_page_fr.png?resize=1280%2C817&amp;ssl=1 1280w" sizes="(max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Une page d&rsquo;index : en-têtes, lignes, espace libre, répertoire et queue.</figcaption></figure>



<p class="wp-block-paragraph">Chaque zone a une raison d&rsquo;être :</p>



<ul class="wp-block-list"><li><strong>Le FIL header</strong> est commun à toutes les pages, quel que soit leur type. Il contient la somme de contrôle, qui détecte une corruption à la lecture, et le <strong>LSN</strong> (Log Sequence Number) de la dernière modification. Après un crash, InnoDB compare ce LSN à celui de chaque entrée du redo : il ne rejoue que ce que la page n&rsquo;a pas encore reçu. Les pointeurs vers les pages précédente et suivante relient toutes les pages d&rsquo;un même niveau de l&rsquo;arbre ;</li><li><strong>l&rsquo;INDEX header</strong> donne le niveau de la page dans l&rsquo;arbre (0 pour une feuille), le nombre de lignes et l&rsquo;identifiant de l&rsquo;index auquel elle appartient ;</li><li><strong>infimum et supremum</strong> sont deux fausses lignes, la plus petite et la plus grande possibles. Elles servent de début et de fin à la liste chaînée des lignes, ce qui simplifie le code d&rsquo;insertion ;</li><li><strong>les lignes</strong> sont écrites dans l&rsquo;ordre où elles arrivent, mais chacune pointe vers la suivante <em>dans l&rsquo;ordre de la clé</em>. Insérer au milieu ne déplace rien : il suffit de modifier deux pointeurs ;</li><li><strong>le page directory</strong> part de la fin de la page et grandit vers le haut. Il contient un « slot » pour 4 à 8 lignes. Pour trouver une clé, InnoDB fait une recherche dichotomique dans ces slots, puis parcourt au plus quelques lignes de la liste chaînée ;</li><li><strong>le FIL trailer</strong> répète une partie du LSN et de la somme de contrôle. Si le début et la fin de la page ne correspondent pas, la page n&rsquo;a été écrite qu&rsquo;à moitié.</li></ul>



<p class="wp-block-paragraph">Quand une page est pleine et qu&rsquo;une ligne doit y entrer, InnoDB la <strong>coupe en deux</strong> (page split) et met à jour la page parente. Quand deux pages voisines descendent sous la moitié de leur remplissage, il peut les fusionner. Ces opérations sont coûteuses et laissent des pages à moitié vides : c&rsquo;est la fragmentation.</p>



<h3 class="wp-block-heading">Le doublewrite buffer : pourquoi écrire deux fois</h3>



<p class="wp-block-paragraph">Un disque garantit l&rsquo;atomicité d&rsquo;écriture de 512 octets ou 4 Ko, pas de 16 Ko. Si le serveur s&rsquo;arrête au milieu de l&rsquo;écriture d&rsquo;une page, celle-ci peut se retrouver à moitié ancienne, à moitié nouvelle : une <em>torn page</em>. Le redo ne peut pas la réparer, car il décrit des modifications à appliquer sur une page cohérente. InnoDB écrit donc chaque page d&rsquo;abord dans le doublewrite buffer, puis à son emplacement définitif. Après un crash, une page déchirée est remplacée par sa copie intacte, puis le redo s&rsquo;applique. Sur un système de fichiers qui garantit lui-même des écritures atomiques de 16 Ko (ZFS, certains SSD), on peut le désactiver.</p>



<h3 class="wp-block-heading">Une ligne</h3>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="629" height="219" src="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=629%2C219&#038;ssl=1" alt="Format d&#x27;une ligne InnoDB DYNAMIC" class="wp-image-1776" srcset="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?w=1800&amp;ssl=1 1800w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=300%2C105&amp;ssl=1 300w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=1024%2C357&amp;ssl=1 1024w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=768%2C268&amp;ssl=1 768w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=1536%2C536&amp;ssl=1 1536w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=900%2C314&amp;ssl=1 900w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_record_fr.png?resize=1280%2C447&amp;ssl=1 1280w" sizes="auto, (max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Une ligne de l&rsquo;index cluster et le détail de son en-tête.</figcaption></figure>



<ul class="wp-block-list"><li><strong>Les colonnes cachées</strong> : <code>DB_TRX_ID</code> est l&rsquo;identifiant de la dernière transaction qui a modifié la ligne, <code>DB_ROLL_PTR</code> pointe vers l&rsquo;image précédente dans l&rsquo;undo. Une transaction qui ne doit pas voir la modification suit ce pointeur pour reconstruire l&rsquo;ancienne version ;</li><li><strong>sans clé primaire</strong>, InnoDB utilise la première clé unique non nulle, ou à défaut ajoute une colonne cachée <code>DB_ROW_ID</code> de 6 octets, alimentée par un compteur global partagé par toutes ces tables. Définissez toujours une clé primaire ;</li><li><strong>le bit « deleted »</strong> : un <code>DELETE</code> ne fait que marquer la ligne. Elle est réellement retirée plus tard par le <em>purge thread</em>, une fois qu&rsquo;aucune transaction ne peut plus la voir ;</li><li><strong>les NULL</strong> ne coûtent qu&rsquo;un bit dans le bitmap : aucune place dans les données ;</li><li><strong>les colonnes longues</strong> (<code>TEXT</code>, <code>BLOB</code>, gros <code>VARCHAR</code>) : une ligne doit tenir dans environ la moitié d&rsquo;une page, pour qu&rsquo;une page contienne au moins deux lignes. Au format <code>DYNAMIC</code>, une valeur trop longue part entière dans des pages de débordement, et la ligne ne garde qu&rsquo;un pointeur de 20 octets.</li></ul>



<h3 class="wp-block-heading">L&rsquo;index cluster : la table est un arbre</h3>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="629" height="294" src="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=629%2C294&#038;ssl=1" alt="Index cluster et index secondaire InnoDB" class="wp-image-1772" srcset="https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?w=1800&amp;ssl=1 1800w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=300%2C140&amp;ssl=1 300w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=1024%2C478&amp;ssl=1 1024w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=768%2C358&amp;ssl=1 768w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=1536%2C717&amp;ssl=1 1536w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=900%2C420&amp;ssl=1 900w, https://i0.wp.com/blog.neurozone.fr/wp-content/uploads/2026/10/innodb_btree_fr.png?resize=1280%2C597&amp;ssl=1 1280w" sizes="auto, (max-width: 629px) 100vw, 629px" /></a><figcaption class="wp-element-caption">Les feuilles de l&rsquo;index PRIMARY contiennent les lignes ; un index secondaire contient la clé primaire.</figcaption></figure>



<p class="wp-block-paragraph">C&rsquo;est la décision de conception la plus importante d&rsquo;InnoDB : <strong>la table est l&rsquo;index de la clé primaire</strong>. Il n&rsquo;existe pas de « tas » de lignes à côté : les lignes complètes sont stockées dans les feuilles d&rsquo;un arbre B+ trié par clé primaire. Plusieurs conséquences pratiques en découlent :</p>



<ul class="wp-block-list"><li><strong>une recherche par clé primaire</strong> descend l&rsquo;arbre et trouve directement la ligne. Avec des pages de 16 Ko et une clé <code>BIGINT</code>, une page intermédiaire référence plus d&rsquo;un millier de pages filles : trois niveaux suffisent pour des centaines de millions de lignes ;</li><li><strong>une clé primaire croissante</strong> (<code>AUTO_INCREMENT</code>) ajoute toujours à droite de l&rsquo;arbre : les pages se remplissent proprement, sans split au milieu. Une clé aléatoire (UUID v4) insère n&rsquo;importe où, provoque des splits partout et laisse des pages à moitié pleines. Les UUID ordonnés dans le temps (UUID v7) évitent ce problème ;</li><li><strong>un index secondaire</strong> ne contient pas l&rsquo;adresse physique de la ligne mais sa <strong>clé primaire</strong>. Une recherche par index secondaire coûte donc deux descentes d&rsquo;arbre. En contrepartie, déplacer une ligne lors d&rsquo;un split ne demande pas de mettre à jour les index secondaires ;</li><li><strong>une clé primaire longue</strong> est recopiée dans chaque index secondaire : une clé de 36 caractères multiplie la taille de tous les index ;</li><li><strong>un index couvrant</strong>, qui contient toutes les colonnes dont la requête a besoin, évite la seconde descente : <code>EXPLAIN</code> affiche alors <code>Using index</code>.</li></ul>



<h3 class="wp-block-heading">Pourquoi le fichier ne rétrécit pas</h3>



<p class="wp-block-paragraph">Un <code>DELETE</code> massif libère de la place <em>dans</em> les pages, que les insertions suivantes réutiliseront, mais ne rend rien au système de fichiers. Pour récupérer l&rsquo;espace, il faut reconstruire la table :</p>



<pre class="wp-block-code"><code>OPTIMIZE TABLE shop.orders;          -- équivaut, pour InnoDB, à ALTER TABLE … FORCE
-- MariaDB : vérifier l&#x27;espace réellement libérable avant
SELECT table_name, data_free/1024/1024 AS free_mb
FROM information_schema.tables WHERE table_schema=&#x27;shop&#x27; ORDER BY data_free DESC;</code></pre>



<p class="wp-block-paragraph">La reconstruction copie toutes les lignes dans un nouveau fichier, compact, puis remplace l&rsquo;ancien. Elle se fait en ligne sur les versions récentes, mais demande temporairement l&rsquo;espace d&rsquo;une seconde copie de la table.</p>



<p class="wp-block-paragraph">Prochain billet : PostgreSQL, qui a fait le choix inverse sur presque tous ces points : une table en tas, des pages de 8 Ko, et des anciennes versions gardées dans la table elle-même.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Ce billet fait partie d&rsquo;une série de notes d&rsquo;administration système (tag « carnet d&rsquo;admin »).</em><br>Série « Dans les fichiers d&rsquo;une base de données », partie 1/3. · <span class="link-upcoming">Billet suivant → (à paraître le 25/10)</span> · <a href="https://hecate.neurozone.fr/?p=377">English version</a></p>

<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/dans-les-fichiers-dune-base-de-donnees-1-3-innodb-de-mysql-a-mariadb/">Dans les fichiers d&rsquo;une base de données (1/3) : InnoDB, de MySQL à MariaDB</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2026/10/23/dans-les-fichiers-dune-base-de-donnees-1-3-innodb-de-mysql-a-mariadb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1787</post-id>	</item>
		<item>
		<title>Le serveur qui ne revenait pas (1/3) : le symptôme</title>
		<link>https://blog.neurozone.fr/2026/10/23/le-serveur-qui-ne-revenait-pas-1-3-le-symptome/</link>
					<comments>https://blog.neurozone.fr/2026/10/23/le-serveur-qui-ne-revenait-pas-1-3-le-symptome/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Fri, 23 Oct 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[carnet d'admin]]></category>
		<category><![CDATA[diagnostic]]></category>
		<category><![CDATA[Français]]></category>
		<category><![CDATA[Rocky Linux]]></category>
		<category><![CDATA[série : Le serveur qui ne revenait pas]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1399</guid>

					<description><![CDATA[<p>Un mardi soir, mise à jour classique du serveur de la maison : dnf update -y, une centaine de paquets dont un nouveau noyau et de nouveaux firmwares, puis reboot. D&#8217;habitude, la machine revient en moins d&#8217;une minute. Cette fois, rien. Pas de ping, pas de SSH, et surtout aucune réponse ARP sur le réseau [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/le-serveur-qui-ne-revenait-pas-1-3-le-symptome/">Le serveur qui ne revenait pas (1/3) : le symptôme</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Un mardi soir, mise à jour classique du serveur de la maison : <code>dnf update -y</code>, une centaine de paquets dont un nouveau noyau et de nouveaux firmwares, puis <code>reboot</code>. D&rsquo;habitude, la machine revient en moins d&rsquo;une minute. Cette fois, rien. Pas de ping, pas de SSH, et surtout aucune réponse ARP sur le réseau local : vu du switch, la carte réseau n&rsquo;existait plus.</p>



<p class="wp-block-paragraph">Ce dernier détail compte. Une machine qui démarre mais dont un service plante répond toujours à l&rsquo;ARP, car c&rsquo;est le noyau qui répond, pas une application. L&rsquo;absence d&rsquo;ARP signifie que le noyau ne tourne pas, ou que la carte réseau n&rsquo;est pas initialisée. Le problème est donc bas niveau : démarrage du noyau, initramfs, firmware de la carte mère, ou machine tout simplement éteinte.</p>



<h3 class="wp-block-heading">Ce qu&rsquo;on peut vérifier à distance</h3>



<p class="wp-block-paragraph">Avant de descendre devant la machine, j&rsquo;ai rassemblé ce qui était visible depuis le reste du réseau :</p>



<pre class="wp-block-code"><code>arping -c 3 -I eth0 192.168.10.17     # aucune réponse : la carte réseau est muette
ip neigh show 192.168.10.17           # entrée FAILED dans la table ARP du voisin</code></pre>



<ul class="wp-block-list"><li><strong>Le SIEM (Wazuh)</strong> avait reçu un dernier événement de l&rsquo;agent de la machine : « Wazuh agent stopped », à l&rsquo;heure exacte du reboot. C&rsquo;est le signe d&rsquo;un arrêt propre, pas d&rsquo;un crash. Un crash n&rsquo;aurait laissé aucun message.</li><li><strong>Les autres machines du réseau</strong> fonctionnaient normalement : le problème ne venait ni du switch ni du routeur.</li><li><strong>La machine virtuelle hébergée</strong> sur ce serveur était tombée avec lui, ce qui est cohérent avec un hôte éteint.</li></ul>



<h3 class="wp-block-heading">Ce qu&rsquo;il fallait voir à l&rsquo;écran</h3>



<p class="wp-block-paragraph">Sans carte de gestion à distance (pas d&rsquo;IPMI sur une carte mère grand public), la seule façon de savoir est de regarder l&rsquo;écran. Voici la liste que je me suis préparée, de la cause la plus probable à la moins probable, pour ne pas improviser devant la console :</p>



<ul class="wp-block-list"><li><strong>Bloqué dans GRUB ?</strong> Choisir le noyau précédent dans le menu. S&rsquo;il démarre, le nouveau noyau ou son initramfs sont en cause. On le fixe ensuite avec <code>grubby --set-default</code>.</li><li><strong>Shell d&rsquo;urgence (dracut, emergency mode) ?</strong> <code>journalctl -xb -p err</code> montre pourquoi : volume LVM introuvable, entrée <code>fstab</code> invalide, module manquant dans l&rsquo;initramfs.</li><li><strong>Réétiquetage SELinux ou fsck en cours ?</strong> C&rsquo;est long sur un gros disque. Il faut attendre, surtout ne pas couper.</li><li><strong>Démarré mais sans réseau ?</strong> <code>ip -br a</code> et <code>nmcli dev</code> : une carte renommée ou « unmanaged » après une mise à jour arrive plus souvent qu&rsquo;on ne croit.</li><li><strong>Écran noir, ventilateurs qui tournent, rien ne bouge ?</strong> C&rsquo;est le cas le plus déroutant. C&rsquo;était le mien.</li></ul>



<p class="wp-block-paragraph">La machine a fini par repartir après une demi-heure, avec un appui long sur le bouton d&rsquo;alimentation. Le système a démarré normalement sur le nouveau noyau, sans aucune erreur. Restait à comprendre ce qui s&rsquo;était passé, alors que le journal système ne gardait que le démarrage en cours. C&rsquo;est l&rsquo;objet du billet suivant.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Ce billet fait partie d&rsquo;une série de notes d&rsquo;administration système (tag « carnet d&rsquo;admin »).</em><br>Série « Le serveur qui ne revenait pas », partie 1/3. · <span class="link-upcoming">Billet suivant → (à paraître le 25/10)</span> · <a href="https://hecate.neurozone.fr/?p=92">English version</a></p>

<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/le-serveur-qui-ne-revenait-pas-1-3-le-symptome/">Le serveur qui ne revenait pas (1/3) : le symptôme</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2026/10/23/le-serveur-qui-ne-revenait-pas-1-3-le-symptome/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1399</post-id>	</item>
		<item>
		<title>Un /boot trop petit, des disques en miroir et des alertes : ménage de printemps… en octobre</title>
		<link>https://blog.neurozone.fr/2026/10/23/un-boot-trop-petit-des-disques-en-miroir-et-des-alertes-menage-de-printemps-en-octobre/</link>
					<comments>https://blog.neurozone.fr/2026/10/23/un-boot-trop-petit-des-disques-en-miroir-et-des-alertes-menage-de-printemps-en-octobre/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Fri, 23 Oct 2026 05:37:24 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[GRUB]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[LVM]]></category>
		<category><![CDATA[Prometheus]]></category>
		<category><![CDATA[RAID]]></category>
		<category><![CDATA[Rocky Linux]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1396</guid>

					<description><![CDATA[<p>Petite matinée de ménage sur le serveur de la maison (un Rocky Linux 10 sur une vieille carte mère ASRock). Au programme : une partition /boot devenue trop petite, des disques qui dormaient dans la machine et qu&#8217;il était temps de mettre en miroir, et des alertes Prometheus pour ne plus découvrir un disque mort [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/un-boot-trop-petit-des-disques-en-miroir-et-des-alertes-menage-de-printemps-en-octobre/">Un /boot trop petit, des disques en miroir et des alertes : ménage de printemps… en octobre</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Petite matinée de ménage sur le serveur de la maison (un Rocky Linux 10 sur une vieille carte mère ASRock). Au programme : une partition <code>/boot</code> devenue trop petite, des disques qui dormaient dans la machine et qu&rsquo;il était temps de mettre en miroir, et des alertes Prometheus pour ne plus découvrir un disque mort par hasard. Retour d&rsquo;expérience, commandes comprises.</p>



<h2 class="wp-block-heading">Le problème : un /boot de 1 Go qui ne suffit plus</h2>



<p class="wp-block-paragraph">L&rsquo;installeur de Rocky crée par défaut un <code>/boot</code> de 1 Go. Ça paraissait large… jusqu&rsquo;à ce que je regarde ce qu&rsquo;il contient vraiment :</p>



<pre class="wp-block-code"><code>$ ls -la --block-size=M /boot
152M initramfs-6.12.0-211.67.1.el10_2.x86_64.img
 39M initramfs-6.12.0-211.67.1.el10_2.x86_64kdump.img
 16M vmlinuz-6.12.0-211.67.1.el10_2.x86_64
159M initramfs-0-rescue-….img
 16M vmlinuz-0-rescue-…</code></pre>



<p class="wp-block-paragraph">Environ 217 Mo par noyau, plus 175 Mo pour l&rsquo;image de secours. Avec <code>installonly_limit=3</code> dans <code>dnf.conf</code>, on arrive à ~825 Mo sur 960. Et le piège : pendant une mise à jour, dnf installe le nouveau noyau <em>avant</em> de supprimer le plus ancien. Il y a donc brièvement quatre noyaux, et ça ne passe plus.</p>



<p class="wp-block-paragraph">Pourquoi un initramfs de 152 Mo ? <code>lsinitrd</code> donne la réponse : une centaine de Mo de firmwares NVIDIA (GSP) tirés par le pilote <code>nouveau</code>, parce qu&rsquo;il y a une GeForce GTX 1060 dans la machine. Je garde nouveau, donc la solution, c&rsquo;est un <code>/boot</code> plus grand.</p>



<pre class="wp-block-code"><code>$ lsinitrd /boot/initramfs-$(uname -r).img | sort -k5 -n | tail -3
… 13371848 usr/lib/firmware/nvidia/tu102/gsp/gsp-570.144.bin.xz
… 25639648 usr/lib/firmware/nvidia/ga102/gsp/gsp-535.113.01.bin.xz
… 51324396 usr/lib/firmware/nvidia/ga102/gsp/gsp-570.144.bin.xz</code></pre>



<h2 class="wp-block-heading">Pourquoi ne pas simplement agrandir la partition ?</h2>



<p class="wp-block-paragraph">Parce que la partition qui suit <code>/boot</code> est le volume physique LVM du système, collé juste derrière. Et XFS ne sait pas rétrécir. Agrandir sur place voudrait dire déplacer tout le LVM (<code>pvmove</code> vers une nouvelle partition, supprimer l&rsquo;ancienne, agrandir <code>/boot</code> dans le trou). Faisable à chaud, mais c&rsquo;est beaucoup de manipulations sur le disque système d&rsquo;une machine qui venait justement de rester plantée au redémarrage deux jours plus tôt.</p>



<p class="wp-block-paragraph">Il restait plus de 300 Go libres en fin de disque. Plan plus simple : <strong>créer une nouvelle partition /boot de 2 Go dans cet espace libre, y copier l&rsquo;ancien /boot, et réinstaller GRUB</strong> pour qu&rsquo;il la prenne en compte. L&rsquo;ancienne partition reste intacte et sert de filet de sécurité.</p>



<h2 class="wp-block-heading">Migrer /boot vers une nouvelle partition (BIOS + GPT)</h2>



<p class="wp-block-paragraph">Le point important, c&rsquo;est le mode de démarrage. Ici c&rsquo;est du BIOS « legacy » sur une table GPT : GRUB loge son étage principal (<code>core.img</code>) dans la petite partition <code>bios_grub</code> de 1 Mo, et ce <code>core.img</code> contient en dur l&#8217;emplacement de <code>/boot/grub2</code>. Si on déplace <code>/boot</code> sans relancer <code>grub2-install</code>, GRUB continue de lire l&rsquo;ancienne partition. En UEFI, ce serait le <code>grub.cfg</code> de l&rsquo;ESP qu&rsquo;il faudrait mettre à jour à la place.</p>



<pre class="wp-block-code"><code>$ parted -s /dev/sde unit MiB print free
Number  Start    End        Size       File system  Name  Flags
 1      1.00MiB  2.00MiB    1.00MiB                       bios_grub
 2      2.00MiB  1026MiB    1024MiB    xfs                bls_boot
 3      1026MiB  160406MiB  159380MiB                     lvm
        160406MiB  476940MiB  316534MiB  Free Space</code></pre>



<p class="wp-block-paragraph"><strong>À faire avec un accès à la console</strong> (écran/clavier ou IPMI), au cas où le premier redémarrage se passe mal.</p>



<h3 class="wp-block-heading">1. Créer et formater la nouvelle partition</h3>



<pre class="wp-block-code"><code>parted -s /dev/sde mkpart boot2 xfs 160406MiB 162454MiB   # 2 GiB -&gt; sde4
mkfs.xfs -L boot2 /dev/sde4</code></pre>



<h3 class="wp-block-heading">2. Copier le contenu de /boot</h3>



<pre class="wp-block-code"><code>mkdir -p /mnt/newboot
mount /dev/sde4 /mnt/newboot
cp -a /boot/. /mnt/newboot/      # -a conserve droits, liens et contextes SELinux
restorecon -R /mnt/newboot</code></pre>



<h3 class="wp-block-heading">3. Pointer /etc/fstab sur la nouvelle partition</h3>



<pre class="wp-block-code"><code>cp -a /etc/fstab /etc/fstab.bak
blkid -s UUID -o value /dev/sde4          # nouvel UUID
# remplacer l&#x27;UUID de la ligne /boot par celui-ci, puis :
systemctl daemon-reload
umount /mnt/newboot
umount /boot &amp;&amp; mount /boot
findmnt /boot                             # doit afficher /dev/sde4</code></pre>



<h3 class="wp-block-heading">4. Réinstaller GRUB et régénérer sa configuration</h3>



<pre class="wp-block-code"><code>grub2-install /dev/sde                    # core.img pointe maintenant vers sde4
grub2-mkconfig -o /boot/grub2/grub.cfg</code></pre>



<p class="wp-block-paragraph">Les entrées de démarrage BLS (<code>/boot/loader/entries/*.conf</code>) donnent des chemins relatifs à la partition <code>/boot</code>. Elles fonctionnent donc telles quelles, et <code>grubenv</code> (le noyau par défaut) a été copié avec le reste.</p>



<h3 class="wp-block-heading">5. Redémarrer et vérifier</h3>



<pre class="wp-block-code"><code>reboot
findmnt /boot            # /dev/sde4
df -h /boot              # ~2 Go
grubby --default-kernel  # toujours le bon noyau</code></pre>



<p class="wp-block-paragraph"><strong>Retour arrière :</strong> l&rsquo;ancienne partition <code>sde2</code> n&rsquo;a pas été touchée. Si GRUB tombe sur son invite de secours, on peut la réutiliser à la main :</p>



<pre class="wp-block-code"><code>grub rescue&gt; set prefix=(hd0,gpt2)/grub2
grub rescue&gt; set root=(hd0,gpt2)
grub rescue&gt; insmod normal
grub rescue&gt; normal</code></pre>



<p class="wp-block-paragraph">Ensuite, on remet l&rsquo;ancien UUID dans <code>/etc/fstab</code> et on relance <code>grub2-install /dev/sde</code>. Une fois la nouvelle partition validée sur plusieurs redémarrages et mises à jour du noyau, l&rsquo;ancienne n&rsquo;est plus qu&rsquo;un giga perdu, ce qui n&rsquo;a rien de grave.</p>



<h2 class="wp-block-heading">Au passage : mettre /data en miroir… quand il manque 4 Mo</h2>



<p class="wp-block-paragraph">La machine avait aussi des disques qui ne servaient à rien. J&rsquo;en profite pour mettre en miroir <code>/data</code> (931 Go, bases de données, dépôts, sauvegardes) avec LVM RAID1. Sur le papier, c&rsquo;est une seule commande, sans interruption :</p>



<pre class="wp-block-code"><code>lvconvert --type raid1 -m1 data/lvol0 /dev/sdd</code></pre>



<p class="wp-block-paragraph">En pratique, elle échoue. Un LV RAID1 a besoin, sur chaque disque, d&rsquo;une petite zone de métadonnées (<code>rmeta</code>, une extent de 4 Mo) en plus de la copie des données. Or le LV d&rsquo;origine occupait <strong>toutes</strong> les extents du premier disque (238 467 sur 238 467), et le second disque est exactement de la même taille. Il manque donc 4 Mo de chaque côté. Comme XFS ne rétrécit pas, impossible d&rsquo;en libérer.</p>



<p class="wp-block-paragraph">La solution consiste à faire le chemin dans l&rsquo;autre sens :</p>



<ul class="wp-block-list"><li>créer sur le nouveau disque un LV <strong>une extent plus petit</strong>, le formater, et y copier <code>/data</code> à chaud (<code>rsync -aHAXS --numeric-ids</code>, qui conserve liens durs, ACL, xattrs/SELinux et fichiers creux) ;</li><li>arrêter les services qui utilisent <code>/data</code> (MariaDB, PostgreSQL, Forgejo…), faire un dernier <code>rsync --delete</code>, renommer les LV pour que le nouveau prenne le nom de l&rsquo;ancien (le <code>fstab</code> n&rsquo;a pas besoin de changer), puis redémarrer les services. Comptez un quart d&rsquo;heure d&rsquo;interruption ;</li><li>garder l&rsquo;ancien LV un jour comme filet de sécurité, puis le supprimer et lancer <code>lvconvert --type raid1 -m1</code> vers l&rsquo;ancien disque, qui a maintenant la place pour sa zone <code>rmeta</code>. La synchronisation se fait en arrière-plan.</li></ul>



<p class="wp-block-paragraph">Leçon retenue : quand on crée un LV qu&rsquo;on voudra peut-être mettre en miroir un jour, laisser quelques extents libres (<code>-l 99%FREE</code> plutôt que <code>100%FREE</code>) évite tout ce détour.</p>



<p class="wp-block-paragraph">Pour deux autres vieux disques identiques, sans données, c&rsquo;est beaucoup plus simple. On crée directement un volume miroir et LVM réserve lui-même la place des métadonnées :</p>



<pre class="wp-block-code"><code>vgcreate bulk /dev/sda /dev/sdb
lvcreate --type raid1 -m1 -l 100%FREE -n lvol0 bulk
mkfs.xfs /dev/bulk/lvol0
# dans /etc/fstab, nofail : un vieux disque qui lâche ne doit pas bloquer le démarrage
/dev/bulk/lvol0  /bulk  xfs  defaults,nofail  0 0</code></pre>



<h2 class="wp-block-heading">Surveiller les miroirs avec Prometheus</h2>



<p class="wp-block-paragraph">Un miroir dont personne ne remarque qu&rsquo;il a perdu un disque n&rsquo;apporte pas grand-chose. Par défaut, LVM se contente d&rsquo;écrire un avertissement dans les journaux, et node_exporter ne sait rien du RAID LVM (son collecteur <code>mdadm</code> ne couvre que <code>md</code>). J&rsquo;ai donc ajouté un petit script, lancé toutes les deux minutes par un timer systemd, qui écrit l&rsquo;état des LV RAID dans le répertoire du collecteur <em>textfile</em> de node_exporter (<code>--collector.textfile.directory</code>) :</p>



<pre class="wp-block-code"><code>lvs --noheadings --nosuffix --separator &#x27;;&#x27; \
    -o vg_name,lv_name,lv_health_status,raid_sync_action,copy_percent,raid_mismatch_count \
    --select &#x27;segtype=~raid&#x27;</code></pre>



<p class="wp-block-paragraph">On obtient des métriques du genre <code>lvm_raid_healthy</code> (0 dès que <code>lv_health_status</code> n&rsquo;est plus vide, par exemple <em>partial</em> quand un disque manque), <code>lvm_raid_sync_percent</code> et <code>lvm_raid_mismatch_count</code>. Le fichier est écrit dans un fichier temporaire puis renommé avec <code>mv</code>, pour qu&rsquo;un scrape ne tombe jamais sur un fichier à moitié écrit. Quatre alertes s&rsquo;appuient dessus :</p>



<pre class="wp-block-code"><code>- alert: LvmRaidDegraded        # un disque manque ou lâche
  expr: lvm_raid_healthy == 0
  for: 5m
- alert: LvmRaidNotInSync       # resynchronisation qui ne finit pas
  expr: lvm_raid_sync_percent &lt; 100
  for: 12h
- alert: LvmRaidMismatches      # le dernier scrub a trouvé des différences
  expr: lvm_raid_mismatch_count &gt; 0
- alert: LvmRaidMetricsStale    # le script lui-même ne tourne plus
  expr: time() - lvm_raid_textfile_last_run_seconds &gt; 900</code></pre>



<p class="wp-block-paragraph">Côté matériel, des disques WD de 1, 2 et 3 To attendent sur l&rsquo;étagère. Le jour où une alerte se déclenche : on remplace le disque, puis <code>pvcreate</code>, <code>vgextend</code> et <code>lvconvert --repair</code>, et LVM reconstruit le miroir à chaud.</p>



<h2 class="wp-block-heading">En résumé</h2>



<ul class="wp-block-list"><li>Un <code>/boot</code> de 1 Go, c&rsquo;est juste dès qu&rsquo;un pilote embarque de gros firmwares dans l&rsquo;initramfs. Vérifiez avec <code>lsinitrd</code>.</li><li>Déplacer <code>/boot</code> vers une nouvelle partition est plus simple et moins risqué que d&rsquo;agrandir l&rsquo;existante. En BIOS/GPT, il ne faut pas oublier <code>grub2-install</code>.</li><li>LVM RAID1 a besoin d&rsquo;une extent libre par disque pour ses métadonnées. Un LV en <code>100%FREE</code> sur deux disques identiques ne peut pas être converti sur place.</li><li>Un miroir sans alerte, c&rsquo;est une panne qui attend son heure. Le collecteur <em>textfile</em> de node_exporter se prête très bien à ce genre de petit ajout.</li></ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Ce billet ouvre une série de notes d&rsquo;administration système (tag « carnet d&rsquo;admin »).</em><br><a href="https://hecate.neurozone.fr/?p=147">English version</a></p>

<p>L’article <a href="https://blog.neurozone.fr/2026/10/23/un-boot-trop-petit-des-disques-en-miroir-et-des-alertes-menage-de-printemps-en-octobre/">Un /boot trop petit, des disques en miroir et des alertes : ménage de printemps… en octobre</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2026/10/23/un-boot-trop-petit-des-disques-en-miroir-et-des-alertes-menage-de-printemps-en-octobre/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1396</post-id>	</item>
		<item>
		<title>Ressac</title>
		<link>https://blog.neurozone.fr/2026/09/18/ressac/</link>
					<comments>https://blog.neurozone.fr/2026/09/18/ressac/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Fri, 18 Sep 2026 05:48:32 +0000</pubDate>
				<category><![CDATA[Poèmes]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1391</guid>

					<description><![CDATA[<p>Les épisodes dépressifs sont comme le ressac des vagues ils vont et viennent, imprévisibles, mais lourds et violents</p>
<p>L’article <a href="https://blog.neurozone.fr/2026/09/18/ressac/">Ressac</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Les épisodes dépressifs sont comme le ressac des vagues ils vont et viennent, imprévisibles, mais lourds et violents</p>
<p>L’article <a href="https://blog.neurozone.fr/2026/09/18/ressac/">Ressac</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2026/09/18/ressac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1391</post-id>	</item>
		<item>
		<title>UnitedHealth, un cabinet d&#8217;avocats et la diffamation (Fortune)</title>
		<link>https://blog.neurozone.fr/2025/02/15/1362/</link>
					<comments>https://blog.neurozone.fr/2025/02/15/1362/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Sat, 15 Feb 2025 06:45:00 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/2025/02/15/1362/</guid>

					<description><![CDATA[<p>https://fortune.com/2025/02/10/unitedhealth-defamation-law-firm-social-media/</p>
<p>L’article <a href="https://blog.neurozone.fr/2025/02/15/1362/">UnitedHealth, un cabinet d&rsquo;avocats et la diffamation (Fortune)</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph"><a href="https://fortune.com/2025/02/10/unitedhealth-defamation-law-firm-social-media/">https://fortune.com/2025/02/10/unitedhealth-defamation-law-firm-social-media/</a></p><p>L’article <a href="https://blog.neurozone.fr/2025/02/15/1362/">UnitedHealth, un cabinet d&rsquo;avocats et la diffamation (Fortune)</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2025/02/15/1362/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1362</post-id>	</item>
		<item>
		<title>Hardening systemd services is hard.</title>
		<link>https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/</link>
					<comments>https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Wed, 03 Apr 2024 08:18:15 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[php-fpm]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/</guid>

					<description><![CDATA[<p>Especially when you want to harden php-pm services with jit enabled and with nextcloud running&#8230; More infos later</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/">Hardening systemd services is hard.</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Especially when you want to harden php-pm services with jit enabled and with nextcloud running&#8230; More infos later </p>
<p>L’article <a href="https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/">Hardening systemd services is hard.</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2024/04/03/hardening-systemd-services-is-hard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1352</post-id>	</item>
		<item>
		<title>Un appartement moins rempli</title>
		<link>https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/</link>
					<comments>https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Mon, 01 Apr 2024 16:38:44 +0000</pubDate>
				<category><![CDATA[Me, myself and I]]></category>
		<category><![CDATA[Appartement]]></category>
		<category><![CDATA[Calme]]></category>
		<category><![CDATA[Solitude]]></category>
		<category><![CDATA[vide]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/</guid>

					<description><![CDATA[<p>Seule dans cet appartement, Mathilde est partie, Lana est partie samedi 30 mars&#8230; Il reste moi et les 3 poilus : Connor, Freya et Nyx. Ça fait bizarre mais pas désagréable. Manon m&#8217;a bien aidé à le ranger déjà. C&#8217;est pas désagréable en vrai, juste bizarre</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/">Un appartement moins rempli</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Seule dans cet appartement, Mathilde est partie, Lana est partie samedi 30 mars&#8230;</p>



<p class="wp-block-paragraph">Il reste moi et les 3 poilus : Connor, Freya et Nyx.</p>



<p class="wp-block-paragraph">Ça fait bizarre mais pas désagréable.</p>



<p class="wp-block-paragraph">Manon m&rsquo;a bien aidé à le ranger déjà.</p>



<p class="wp-block-paragraph">C&rsquo;est pas désagréable en vrai, juste bizarre </p>
<p>L’article <a href="https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/">Un appartement moins rempli</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2024/04/01/un-appartement-moins-rempli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1350</post-id>	</item>
		<item>
		<title>php-fpm jit selinux opcache issue</title>
		<link>https://blog.neurozone.fr/2024/03/29/php-fpm-jit-selinux-opcache-issue/</link>
					<comments>https://blog.neurozone.fr/2024/03/29/php-fpm-jit-selinux-opcache-issue/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Fri, 29 Mar 2024 09:18:16 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[php-fpm]]></category>
		<category><![CDATA[Rocky Linux]]></category>
		<category><![CDATA[Selinux]]></category>
		<category><![CDATA[jit]]></category>
		<category><![CDATA[selinux]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1348</guid>

					<description><![CDATA[<p>I had issues when trying to enable jit for php-fpm, segfault, core dumpt etc&#8230;: php-fpm[10021]: segfault at 55ad7b400600 ip 000055ad7b400600 sp 00007ffc04059b30 error 15 in zero (deleted)[55ad3b400000+80000000] likely on CPU 4 (core 0, socket 0) php-fpm[27109]: mprotect() failed [13] Permission denied After searching on google I found nothing really useful. But digging more made me [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/03/29/php-fpm-jit-selinux-opcache-issue/">php-fpm jit selinux opcache issue</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I had issues when trying to enable jit for php-fpm, segfault, core dumpt etc&#8230;:<br />
php-fpm[10021]: segfault at 55ad7b400600 ip 000055ad7b400600 sp 00007ffc04059b30 error 15 in zero (deleted)[55ad3b400000+80000000] likely on CPU 4 (core 0, socket 0)<br />
php-fpm[27109]: mprotect() failed [13] Permission denied</p>
<p>After searching on google I found nothing really useful. But digging more made me find this:<br />
https://github.com/php/php-src/issues/13400<br />
Only for MacOS, still not useful</p>
<p>But the mprotect thing led me to that: https://lkml.org/lkml/2023/12/14/436<br />
Interesting.<br />
And to that: https://bugzilla.kernel.org/show_bug.cgi?id=218258<br />
But THIS: https://bugzilla.redhat.com/show_bug.cgi?id=1380930<br />
Yes, tried and it wxas the answer !!!!</p>
<p>so: setsebool -P httpd_execmem 1<br />
systemctl restart php-fpm<br />
issue solved !<br />
#php-fpm #selinux #opcache #jit</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/03/29/php-fpm-jit-selinux-opcache-issue/">php-fpm jit selinux opcache issue</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2024/03/29/php-fpm-jit-selinux-opcache-issue/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1348</post-id>	</item>
		<item>
		<title>Traitement TDAH et Hyperfocus</title>
		<link>https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/</link>
					<comments>https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Wed, 20 Mar 2024 08:55:53 +0000</pubDate>
				<category><![CDATA[Me, myself and I]]></category>
		<category><![CDATA[Réflexions]]></category>
		<category><![CDATA[TDAH]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/</guid>

					<description><![CDATA[<p>Wikipedia pour mieux expliquer : https://fr.wikipedia.org/wiki/Hyperfocus_%28psychologie%29?wprov=sfla1 C&#8217;était un des effets possibles du traitement. Et en fait, je me rends compte que je reviens à mes anciennes habitudes de travail, de l&#8217;hyper focus (concentration énorme) au point d&#8217;oublier l&#8217;heure, d&#8217;oublier la faim, la soif, d&#8217;oublier même de sortir pour aller au bureau 😅 C&#8217;est pas désagréable. [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/">Traitement TDAH et Hyperfocus</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wikipedia pour mieux expliquer : </p>



<p class="wp-block-paragraph"><a href="https://fr.wikipedia.org/wiki/Hyperfocus_%28psychologie%29?wprov=sfla1">https://fr.wikipedia.org/wiki/Hyperfocus_%28psychologie%29?wprov=sfla1</a></p>



<p class="wp-block-paragraph">C&rsquo;était un des effets possibles du traitement.</p>



<p class="wp-block-paragraph">Et en fait, je me rends compte que je reviens à mes anciennes habitudes de travail, de l&rsquo;hyper focus (concentration énorme) au point d&rsquo;oublier l&rsquo;heure, d&rsquo;oublier la faim, la soif, d&rsquo;oublier même de sortir pour aller au bureau <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">C&rsquo;est pas désagréable.</p>



<p class="wp-block-paragraph">Un exemple: hier j&rsquo;ai travaillé de 8h du matin jusqu&rsquo;à ce matin environ 1h30 pour du pro et du perso (perso relié au pro néanmoins)</p>



<p class="wp-block-paragraph">Et effectivement j&rsquo;avais déjà ça avant, il y a 12 ans environ. C&rsquo;est pas désagréable mais je dois faire attention car le traitement me donne chaud et soif.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Et surtout, il me fait rentrer en phase hypo maniaque maintenant. Assez bizarre mais pas désagréable.</p>



<p class="wp-block-paragraph">Je vais mieux, vraiment. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2764.png" alt="❤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>L’article <a href="https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/">Traitement TDAH et Hyperfocus</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2024/03/20/traitement-tdah-et-hyperfocus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1337</post-id>	</item>
		<item>
		<title>Pressions</title>
		<link>https://blog.neurozone.fr/2024/02/22/pressions/</link>
					<comments>https://blog.neurozone.fr/2024/02/22/pressions/#respond</comments>
		
		<dc:creator><![CDATA[Hécate Raven]]></dc:creator>
		<pubDate>Thu, 22 Feb 2024 08:40:16 +0000</pubDate>
				<category><![CDATA[Me, myself and I]]></category>
		<category><![CDATA[Réflexions]]></category>
		<guid isPermaLink="false">https://blog.neurozone.fr/?p=1271</guid>

					<description><![CDATA[<p>Phrase dépressive qui diminue et phase hypomaniaque en vue. Après 8 semaines, en dehors de ma dépression c&#8217;est une des plus longues phases dépressive que j&#8217;ai connu. Je ne dis pas que je n&#8217;en ai pas. Au contraire, j&#8217;en ai énormément, mais très courtes de quelques minutes à quelques jours, en permanence et j&#8217;alterne avec [&#8230;]</p>
<p>L’article <a href="https://blog.neurozone.fr/2024/02/22/pressions/">Pressions</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Phrase dépressive qui diminue et phase hypomaniaque en vue.</p>



<p class="wp-block-paragraph">Après 8 semaines, en dehors de ma dépression c&rsquo;est une des plus longues phases dépressive que j&rsquo;ai connu.</p>



<p class="wp-block-paragraph">Je ne dis pas que je n&rsquo;en ai pas. Au contraire, j&rsquo;en ai énormément, mais très courtes de quelques minutes à quelques jours, en permanence et j&rsquo;alterne avec des phases hypomaniaques.</p>



<p class="wp-block-paragraph">Jamais de juste milieu.</p>



<p class="wp-block-paragraph">Faut juste que je fasse attention à recréer mes boucliers durant ce temps, sinon ça ne sera pas mieux que pendant la phase dépressive. </p>
<p>L’article <a href="https://blog.neurozone.fr/2024/02/22/pressions/">Pressions</a> est apparu en premier sur <a href="https://blog.neurozone.fr">Quelques pensées</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.neurozone.fr/2024/02/22/pressions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1271</post-id>	</item>
	</channel>
</rss>
