# Shrink en environnement KVM / Ext4 qui tourne mal

**URL:** <https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349>\
**Category:** Support Debian\
**Created:** [Juin 17, 2020, 1:28 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349 "2020-06-17T13:28:11Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Juin 17, 2020, 1:28 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/1 "2020-06-17T13:28:11Z")

</div>

Hello,

J’ai une VM avec une image disque qcow2 de 20G, tout est dans le /.

J’ai voulu faire un shrink pour diviser passer à 10G la taille de ma VM.

Au final, le résultat est le suivant quand je boot dessus :

> Begin: Will now check root file system … fsck from util-linux 2.33.1  
> [/sbin/fsck.ext4 (1) – /dev/vda1] fsck.ext4 -a -C0 /dev/vda1  
> /dev/vda1: The filesystem size (according to the superblock) is 2621440 blocks  
> The physical size of the device is 2621184 blocks  
> Either the superblock or the partition table is likely to be corrupt!
> 
> /dev/vda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.  
> (i.e., without -a or -p options)  
> fsck exited with status code 4  
> done.  
> Failure: File system check of the root filesystem failed  
> The root filesystem on /dev/vda1 requires a manual fsck
> 
> BusyBox v1.30.1 (Debian 1:1.30.1-4) built-in shell (ash)  
> Enter ‹&nbsp;help&nbsp;› for a list of built-in commands.

Je me suis écris une procédure pour détailler ma démarche, pourriez-vous me dire où est-ce que je me suis planté ?

```
Nous avons une VM avec un disque de 20G et nous voulons lui affecter un disque de 10G.

Arrêter la VM :

virsh shutdown app3.mavm.org

:!: On fait une sauvegarde du disque ! :!:

cp -arp /stockage/disques_systemes/app3.mavm.org.qcowstockage/disques_systemes/app3.mavm.org.qcow.BAK

Démarrer la VM avec le disque de recue de libvirt, en mode RW :

virt-rescue -d app3.mavm.org –rw

Vérifier l'état de la table des partitions pour bien identifier la cible :

<rescue> fdisk -l

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8b60bc22

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41943039 41940992 20G 83 Linux
Démonter la cible (normalement elle n'est pas montée, en mode rescue) :

<rescue> umount /dev/sda1

Faire un check de l'intégrité du fs :

<rescue> e2fsck -f /dev/sda1

e2fsck 1.44.5 (15-Dec-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: 52906/655360 files (0.2% non-contiguous), 590221/2621440 blocks
Procéder au resize :

<rescue> resize2fs /dev/sda1 10G

resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sda1 to 2621440 (4k) blocks.
The filesystem on /dev/sda1 is now 2621440 (4k) blocks long.

Détruire et recréer la partition à la bonne taille :

<rescue> fdisk /dev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8b60bc22

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41943039 41940992 20G 83 Linux

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): -10G

Created a new partition 1 of type 'Linux' and of size 10 GiB.
Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: Y

The signature will be removed by a write command.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
On quitte l'environnement de rescue

<rescue> exit

Côté hyperviseur, on recréé l'image à la bonne taille :

qemu-img create -f qcow2 -o preallocation=metadata newimage.qcow2 11G
virt-resize app3.mavm.org.qcow newimage.qcow2
mv newimage.qcow2 app3.mavm.org.qcow

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 17, 2020, 1:56 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/2 "2020-06-17T13:56:16Z")

</div>

> [@jhfra](#):
>
> pourriez-vous me dire où est-ce que je me suis planté ?

Dans les arrondis. Et plus précisément, ici :

> [@jhfra](#):
>
> Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): -10G

Enlever 10 Gio à la fin du disque pour que la partition ait une taille exacte de 10 Gio, c’est beaucoup trop grossier, et tu as trop réduit.  
Relance fdisk et agrandis la partition de ce que tu peux.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juin 17, 2020, 1:56 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/3 "2020-06-17T13:56:19Z")

</div>

> [@jhfra](#):
>
> ```plaintext
> …
> Partition #1 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: Y
> 
> The signature will be removed by a write command.
> 
> Command (m for help): w
> …
> 
> ```

Je pense que tu n’aurais pas dû supprimer la signature **`ext4`** de ce système de fichiers.

Si la table des partitions indique toujours qu’il s’agit d’un système de fichiers de type **`Linux`** ,  
la suppression de la signature **`ext4`** du système de fichiers de cette partition  
est peut-être la cause du message d’erreur **`4`** retourné par la commande **`fsck`**

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 17, 2020, 1:57 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/4 "2020-06-17T13:57:31Z")

</div>

@anon29980398 : pourquoi as-tu effacé ta réponse ? Ce n’est peut-être pas la cause du problème, mais c’était une observation pertinente.

Je ne l’avais pas vue passer, celle-là. Pourtant fsck détecte bien un système de fichiers ext4.

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Juin 17, 2020, 2:00 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/5 "2020-06-17T14:00:12Z")

</div>

Du coup, quelle serait la bonne méthode pour faire cela, sans justement passer par des arrondis grossiers ? Comment obtenir les bonnes valeurs, sans avancer «&nbsp;au hasard&nbsp;» ?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juin 17, 2020, 2:01 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/6 "2020-06-17T14:01:48Z")

</div>

> [@PascalHambourg](#):
>
> pourquoi as-tu effacé ta réponse ? Ce n’est peut-être pas la cause du problème, mais c’était une observation pertinente.

J’avais un doute sur la pertinence de mon message.  
Du coup, j’ai remis mon message.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 17, 2020, 2:02 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/7 "2020-06-17T14:02:27Z")

</div>

Définir la taille de la partition ou sa position de fin par rapport à sa position de début et non par rapport à la fin du disque.

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Juin 17, 2020, 2:04 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/8 "2020-06-17T14:04:26Z")

</div>

Merci à vous deux pour vos explications. Je reprends ma procédure et ferai bien gaffe à cette histoire de signature, effectivement je n’avais pas saisi la portée de ce choix.

Concernant ta réponse Pascal, je ne suis pas sûre de bien comprendre. Si ma partition fait 20G, que je veux en enlever 10G, comment je fais le bon calcul ?  
==\> Ok j’ai compris, **+10G** et non -10G

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juin 17, 2020, 2:12 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/9 "2020-06-17T14:12:01Z")

</div>

La taille de la partition ne doit pas être inférieure à la taille du système de fichiers. Tu te débrouilles comme tu veux pour respecter cette condition. Soit tu prends de la marge en réduisant d’abord le système de fichiers plus que nécessaire (tu pourras l’agrandir après), soit tu calcules la nouvelle taille au secteur près pour que ça colle.

resize2fs te dit que la nouvelle taille du système de fichiers est de 2621440 blocs de 4 Kio (4096 octets). Tu en déduis le nombre de secteurs de 512 octets minimum de la partition. Si la nouvelle position de fin de la partition est au-delà de ce que tu voulais pour réduire la taille du disque, il faut réduire davantage le système de fichiers. Une granularité de 1 Gio n’est peut-être pas assez précise pour spécifier les tailles ou positions.

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Juin 17, 2020, 2:14 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/10 "2020-06-17T14:14:02Z")

</div>

Encore une fois, merci à tous les deux pour la pertinence de vos réponses 🙂 C’est tout bon pour moi, ça marche, et j’ai compris comment faire ça proprement.

/edit : pour compléter ma réponse : Après le virt-resize, j’avais comme tu l’as dis taillé avec une granularité trop élevée, virt-resize m’a donc créé une partition supplémentaire de l’espace inutilisé sur le disque.  
Ce que j’ai fait pour être au plus juste c’est de retourner dans fdisk, de virer les 2 nouvelles partitions, d’en recréer une seule et laisser fdisk calculer lui-même la bonne taille.

Le mieux restant de taper juste dès le départ, ça demande un petit calcul, mais bon, je suis tout de même à ma cible.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Juin 17, 2020, 2:30 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/11 "2020-06-17T14:30:15Z")

</div>

> [@jhfra](#):
>
> ```plaintext
> …
> cp -arp /stockage/disques_systemes/app3.mavm.org.qcowstockage/disques_systemes/app3.mavm.org.qcow.BAK
> …
> 
> ```

Il y a un caractère espace qui manque dans cette ligne de commande.

Et si le shell que tu utilises est **`bash`**  
on pourrait la réécrire de cette façon :

```plaintext
cp -arp /stockage/disques_systemes/app3.mavm.org.qcow{,.BAK}

```

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Juin 17, 2020, 2:31 UTC](https://www.debian-fr.org/t/shrink-en-environnement-kvm-ext4-qui-tourne-mal/82349/12 "2020-06-17T14:31:22Z")

</div>

erreur de typo, oui, mais je vais modifier ma doc pour prendre en compte ta remarque, c’est plus propre.
