Question Comment puis-je redimensionner une partition racine externe à l'exécution?


Comment puis-je augmenter la taille de la partition racine d'un système à l'exécution?

J'ai une partition qui n'est pas allouée après la partition racine (qui est également ext4), comment puis-je ajouter cet espace non alloué à l'espace alloué à la partition racine sans avoir à arrêter le serveur?


194
2018-01-30 17:23


origine


Je déteste avoir l'air d'un bâton dans la boue, mais cela comporte un peu de risque? Pourquoi cela doit-il arriver? La disponibilité est-elle la contrainte principale? - DevNull
Vous ne pouvez pas redimensionner une partition vers la gauche, car ce serait en fait un geste. - Zaz
Augmenter la taille des parités Ext4 en ligne est facile. La partie difficile serait de réduire (votre titre concerne le "redimensionnement"). Pour les personnes intéressées par toute manipulation sur une partition racine (déplacer, réduire, modifier le système de fichiers, le périphérique) au moment de l'exécution, consultez ma réponse: askubuntu.com/a/728141/21888 - vaab


Réponses:


GUI (Ubuntu 14.04 et ultérieur): GParted v0.17 et versions ultérieures fournissent une interface graphique intéressante pour cela. (Les anciennes versions refuseront de redimensionner une partition montée).

Ligne de commande (toute version d'Ubuntu): Il y a trois étapes à cela.

Étape 1. La partition doit d'abord être redimensionnée. Si vous utilisez LVM, c'est facile et vous savez probablement comment procéder. Si vous utilisez des partitions classiques, c'est un peu plus compliqué et mai nécessite un redémarrage (même si vous n'avez jamais à démarrer un autre système ou un CD en direct).

Voici comment je le fais: Utilisez fdisk pour d'abord supprimer la partition (l'idée est que les données sur le disque seront préservées), puis recréez-la soigneusement avec une taille plus grande à la même position.

Exemple:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Encore une fois, il est essentiel que la nouvelle partition démarre au même bloc que l'ancien. L'identifiant doit également correspondre (83 pour les systèmes Linux). Soyez prêt à perdre toutes vos données à la moindre erreur.

Pour être du bon côté, vous pouvez également restaurer l'indicateur de démarrage (qui selon Wikipedia est toujours requis sur certains ordinateurs) en appuyant sur a.

Reportez-vous à la section commentaire pour savoir comment procéder si votre partition de swap est dans la voie.

À ce jour, il devrait être évident que les gens recommandent d'utiliser un CD en direct. ;-)

Étape 2. Comme fdisk rappelle utilement, vous devez recharger la table de partition avant de continuer. Le moyen le plus sûr est de redémarrer simplement; mais vous pouvez aussi utiliser partprobe ou kpartx  (Plus d'information).

Étape 3. Une fois la partition redimensionnée et la table de partition rechargée, il suffit de lancer resize2fs sur le système de fichiers, et vous pouvez le faire même quand il est monté en tant que partition racine.

Exemple:

$ sudo resize2fs /dev/sda1

170
2018-04-06 14:23



Cela a parfaitement fonctionné pour moi. Cependant, je me suis également assuré que le drapeau de démarrage conservé était à l’état d’origine. - Augustus Kling
@ jbo5112: comme fdisk dit, partprobe ou kpartx peut fonctionner au lieu d'un redémarrage; voir également cette question. Même si vous redémarrez, la solution reste préférable à l’utilisation d’un CD en temps réel pour les temps d’arrêt, où un simple redémarrage peut durer moins de 10 secondes pour une machine virtuelle. C'est aussi plus rapide dans le temps de l'opérateur, c'est pourquoi j'utilise habituellement cette approche moi-même. :) - Søren Løvborg
@Raymond: Si la pression de la mémoire le permet (voir free -h), désactivez le swap (swapoff /dev/sda2), modifiez la table de partition (y compris la suppression et la recréation de la partition de swap) et 1) redémarrez ou 2) rechargez la table de partition et swapon encore. (Si la mémoire est trop serrée pour désactiver le swap temporairement, vous pouvez toujours créer et activer Nouveau swap partition (/dev/sda3), puis intervertir sda2; mais alors vous devrez mettre à jour /etc/fstab avec le nouveau nom du périphérique d'échange.) - Søren Løvborg
Si vous utilisez vmware et que vous avez étendu la taille du disque, vous devrez exécuter sudo lshw -C disk pour réanalyser les systèmes de fichiers afin que la vm reconnaisse le plus gros disque. Suivez ensuite les instructions ci-dessus. - Guy
Qu'en est-il de la réduction? - Aaron Franke


Il est possible de faire un redimensionnement en ligne d'un système de fichiers ext4, même s'il s'agit de votre partition racine. Utilisez le resize2fs commander.

sudo resize2fs /dev/sda1

EDIT: La réduction en ligne n'est pas autorisée:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

109
2018-03-02 10:50



De man resize2fs: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8). Cette question concerne le redimensionnement de la cloison, pas le système de fichiers. La distinction est subtile mais très importante. - Eliah Kagan
Vous pouvez utiliser fdisk pour supprimer la partition racine, puis la recréer dans le même bloc de départ. fdisk va écrire le changement, mais il ne prendra effet qu'après un redémarrage. Après le redémarrage, vous pouvez utiliser le programme resize2fs pour envoyer le disque pour remplir la partition. - James Becwar
Je viens de redimensionner une partition racine ext4 en ligne. Je peux donc confirmer que c'est possible. Mais au lieu de passer / dev / sda * comme paramètre à resize2fs, vous devez passer le nom du volume logique. - CDR
Je trouve le premier paragraphe de la page de manuel resize2fs le plus intéressant pour la question initiale: The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.). - mo'
S'il vous plaît ne pas marre avec fdisk quand growpart le fera très facilement pour vous. - STRML


Une solution plus simple - utiliser growpart <device> <partition>:

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Comme toujours, sauvegardez votre table de partition (sfdisk -d /dev/xvda > partition_bak.dmp) Au cas où.


22
2017-07-18 13:26



Qu'en est-il de la réduction? - Aaron Franke
J'espérais utiliser cette méthode, mais j'ai sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table (en utilisant le double démarrage avec Windows) - monkut
Réduire n'est pas possible en ligne. Je recommande d'utiliser gparted pour ça. - STRML
C'était parfait pour redimensionner la partition racine et le système de fichiers de ma machine virtuelle AWS. À votre santé. - MetaFight
growpart fait partie de cloud-utils. Si vous n’avez pas installé, vous pouvez installer avec apt-get install cloud-utils - klor


Vous pouvez aussi simplement utiliser GParted - tant que la partition que vous redimensionnez n’est pas celle par laquelle vous avez démarré CD live l'option est un peu plus facile pour les débutants.

GParted fait fondamentalement toutes les étapes - juste basé sur une interface graphique dirigée.


8
2017-09-30 11:34



J'ai démarré mon système avec Ubuntu 12.04 Live CD et j'ai redimensionné la partition ext4 avec GParted. Travaillé bien pour moi Quoi qu'il en soit, avant cette opération, j'ai sauvegardé toutes mes données importantes. - StandDuPp
Je pense que Gparted a besoin de partition non montée. mais je peux me tromper. - Nick
La question concerne évidemment la partition à partir de laquelle ils ont été lancés et le démarrage d’un CD en direct nécessite le redémarrage de la machine. -1 - wjandrea


Oui, vous pouvez réduire / déplacer / développer une partition racine en ligne sans aucun redémarrage (ni livecd, ni usbkey): consulter cette réponse. C'est très bien écrit et facile à suivre, bien qu'assez long et un peu risqué. Donc, si vous voulez seulement développer votre partition ext4, vous pouvez vous en tenir au travail conventionnel. resize2fssolutions.

La solution générale que je me suis lancée fonctionnera sur tout type de solution dédiée ou VPS par exemple.

TLDR; cette solution implique de pivot_root à tmpfs afin que vous puissiez umount en toute sécurité votre partition racine vivre et jouer avec elle. Une fois terminé, vous aurez pivot_root de retour sur votre nouvelle partition racine.

Cela permet à peu près n'importe quelle manipulation sur le système de fichiers racine (déplacez-le, changez le système de fichiers, changez son périphérique physique ...).

Aucun redémarrage n'est requis dans le processus, et ceci permet de contourner la limitation de resize2fs  ne pas pouvoir rétrécir  ext4 partitions.

Je l'ai personnellement utilisé, et ça marche très bien aussi sur le système debian, donc ça devrait fonctionner sur Ubuntu. Je suis très surpris de ne pas voir cette solution approfondie un peu plus liée aux nombreuses questions sur les sites Web de stackexchange qui traitent du même problème.

Remarque: Bien sûr, si vous souhaitez développer votre partition, une simple resize2fs sera suffisant comme indiqué dans de nombreux endroits et dans d'autres réponses ici.


8
2018-02-01 02:08



Je pense que pour la plupart des gens, une fois que vous avez arrêté tous les programmes et services accédant à la partition racine, vous pourriez aussi bien redémarrer la machine. Pour réduire / déplacer, cela peut être encore plus rapide que d'utiliser un CD en direct, mais pour la croissance (la tâche la plus courante, et ce que l'OP demandait), il existe des moyens qui n'impliquent pas un arrêt temporaire de la plupart des systèmes. . - Søren Løvborg
@ SørenLøvborg: Vous pouvez redémarrer les services de base nécessitant une production continue tout en effectuant la procédure complète. Il existe de nombreuses configurations où vous ne pouvez pas mettre de LiveCD (instances VPS, serveurs dédiés…) ou des circonstances dans lesquelles vous souhaitez éviter tout redémarrage pour des raisons spécifiques. Le titre de la question initiale mentionne le "redimensionnement", qui attire des personnes cherchant à réduire les partitions en ligne. ** Aucune autre solution ne permet de réduire ext4 en ligne. ** Cette solution est risquée, complexe, mais la plus puissante de toutes et elle comble les lacunes des autres. - vaab


Juste fini de redimensionner une partition racine ext4 sur un système live pendant que la racine était montée.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5
2017-12-04 22:40





Je viens de le faire avec succès sans umount, pivot_root, ou suppression temporaire de la partition principale, en utilisant le noyau 3.2 partagé sur le noyau Ubuntu 16.04, 4.4.0. Pour être prudent, j'ai tout fait depuis une console virtuelle avec un réseau désactivé, et j'ai pris un instantané au cas où, mais le cliché n'était pas nécessaire, donc j'aurais pu le faire via SSH et sans modifier les niveaux d'exécution.

Déterminez la taille de la partition: parted /dev/sda1 print | egrep "Disk.*GB"

En option, basculez en mode multi-utilisateur sans réseau (doit être effectué depuis une console, pas SSH):

runlevel     # remember the original runlevel
init 2

Prenez éventuellement un instantané de machine virtuelle pour être prudent.

Redimensionner la partition:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Redimensionner le système de fichiers: resize2fs /dev/sda1

Si quelque chose ne va pas, vous pouvez restaurer votre instantané ici. Si tout s'est bien passé, revenez au niveau normal (obtenu ci-dessus) - normalement 5: init 5. Il peut être préférable de faire un redémarrage complet à ce stade pour vous assurer que tout revient correctement (j'ai eu un problème de date / ntp par la suite).


1
2017-07-14 00:09





Comme indiqué précédemment:

  • l'expansion en direct à partir d'un système racine est possible (pas de difficultés, car la section de démarrage ne doit pas être déplacée)

  • réduire une partition racine en direct doit être fait à partir d'un périphérique de démarrage externe (démarrage à partir du cd / de la clé USB du système), comme s'il y avait un défaut, une incompatibilité ... tout ce que votre système se bloque, capable de démarrer correctement.

Toute sorte de "mais je l'ai fait et ça marche", c'est de la chance.


0
2018-01-10 21:58





Suivez ces étapes.

  1. terminal ouvert en tant que superutilisateur su
  2. courir parted
  3. type p pour voir les partitions disponibles
  4. identifiez votre numéro de partition racine (ex: 'sda 3' signifie le numéro 3) et supprimez une partition adjacente en utilisant rm PARTITION NUMBERcréer de l'espace libre.
  5. maintenant augmenter la taille de la racine en tapant resizepart ROOT NUMBER et redémarrer le système si nécessaire
  6. Sortie parted en tappant exit et en type terminal partprobe et appuyez sur Entrée (cela peut être fait même après le redémarrage)
  7. enfin courir resize2fs /dev/sda PARTITION NUMBER et profiter de la partition racine spacieuse.

0
2017-09-13 20:22





Je voudrais faire une extension sur la réponse de @ Søren Løvborg: étendre la partition avec une partition de swap présente.

D'abord la disposition du disque après l'extension:

$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start      End        Size       Type      File system     Flags
        63s        2047s      1985s                Free Space
 1      2048s      10485759s  10483712s  primary   ext4            boot
        10485760s  10487805s  2046s                Free Space
 2      10487806s  12580863s  2093058s   extended
 5      10487808s  12580863s  2093056s   logical   linux-swap(v1)
        12580864s  14335999s  1755136s             Free Space

Ainsi, sda1 doit être étendu avec l'espace libre à la fin du disque, mais la partition de swap est entre eux. Voici comment vous pouvez le faire:

Nous devons d'abord désactiver le swap. Vérifiez combien il est utilisé et si vous pouvez le désactiver.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           992M         52M        464M        3.2M        475M        784M
Swap:          1.0G          0B        1.0G

swap est inutilisé ici afin que nous puissions l'éteindre

$sudo swapoff /dev/sda2

Maintenant, nous allons changer la table de partition:

$sudo fdisk /dev/sda

(remarque: si la première partition commence au secteur 63 au lieu de 2048, vous devez ajouter l’option -c=dos)

Welcome to fdisk (util-linux 2.27.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: 6.9 GiB, 7340032000 bytes, 14336000 sectors
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: 0x9e11c6df

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 10485759 10483712    5G 83 Linux
/dev/sda2       10487806 12580863  2093058 1022M  5 Extended
/dev/sda5       10487808 12580863  2093056 1022M 82 Linux swap / Solaris

Command (m for help): d
Partition number (1,2,5, default 5): 2

Partition 2 has been deleted.

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): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 122                                                                  42941

Created a new partition 1 of type 'Linux' and of size 5.9 GiB.

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

Created a new partition 2 of type 'Linux' and of size 1022 MiB.

Command (m for help): a
Partition number (1,2, default 2): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

Remarque: la taille de sda1 correspond au nombre total de secteurs moins la taille de secteur de votre partition de swap: 14335999-2093058 = 12242941

Comme le mentionne fdisk: le noyau utilise toujours l’ancienne table de partition, nous devons donc le recharger.

$partprobe

Maintenant, nous devons lancer resize2fs sur sda1 (ne l'oubliez pas!)

$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.

Maintenant, les choses ne sont pas encore terminées. Comme vous l'avez probablement remarqué, sda2 est partitionné en tant que type Linux (Ext4). Pour une raison quelconque, fdisk ne permet pas de choisir le type. Donc, nous devons l'alterner en utilisant cfdisk

$ sudo cfdisk

Choisissez sda2 et changez de type pour 82 Linux swap / Solariset assurez-vous de l'écrire (tapez oui pour confirmer)

Maintenant, nous pouvons réactiver le swap

$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0

Et enfin allumer:

$swapon /dev/sda2

La seule chose à faire est de mettre à jour fstab pour monter la partition swap automatiquement au démarrage

$sudo nano /etc/fstab

Et changez l'UUID de la partition de swap sur la sortie ci-dessus:

# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none            swap    sw              0       0

Maintenant tout va bien et vous pouvez redémarrer sans problème.


0
2017-09-07 06:58