web-dev-qa-db-fra.com

Comment puis-je redimensionner une partition racine ext au moment de l'exécution?

Comment puis-je augmenter la taille de la partition racine d'un système lors de 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?

223
BonboBingo

Interface graphique (Ubuntu 14.04 et ultérieure) : GParted v0.17 et versions ultérieures fournit une interface graphique de Nice pour cela. (Les anciennes versions refuseront de redimensionner une partition montée).

Ligne de commande (toute version d'Ubuntu): Cette opération comporte trois étapes.

É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 peut nécessiter un redémarrage (bien que vous n'ayez jamais à démarrer un autre système ou un live CD).

Voici comment je procède: Utilisez fdisk pour supprimer d’abord 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 supérieure à 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.

De nouveau, il est essentiel que la nouvelle partition commence par le même bloc que l’ancienne. L'identifiant doit également correspondre (83 pour les systèmes Linux). Soyez prêt à perdre toutes vos données à la moindre faute de frappe.

Pour plus de sécurité, vous pouvez également restaurer l'indicateur de démarrage (qui selon Wikipedia est toujours requis sur certains ordinateurs) en appuyant sur a.

Consultez la section des commentaires pour savoir quoi faire si votre partition de swap vous gêne.

A présent, il devrait être clair pourquoi les gens recommandent d’utiliser un CD live. ;-)

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

Étape 3. Une fois la partition redimensionnée et la table de partition rechargée, il vous suffit d'exécuter 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
199
Søren Løvborg

Il est possible de redimensionner en ligne un système de fichiers ext4, même s'il s'agit de votre partition racine. Utilisez la commande resize2fs.

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
116
CodeAddict

Une solution plus simple - utilisez 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 partitions (sfdisk -d /dev/xvda > partition_bak.dmp) au cas où.

43
STRML

Oui, vous pouvez réduire/déplacer/agrandir une partition racine en ligne sans redémarrage (ni livecd, ni clé USB): consultez cette réponse . C'est très bien écrit et facile à suivre, bien que assez long et un peu risqué. Donc, si vous voulez seulement agrandir votre partition ext4, vous pouvez vous en tenir aux solutions de travail conventionnelles resize2fs.

La solution générale que j'ai lue fonctionnera sur n'importe quel type de solution dédiée ou VPS, par exemple.

TLDR; cette solution implique de pivot_root à tmpfs afin que vous puissiez umount sécuriser votre partition racine en direct et la manipuler. Une fois cela fait, vous retournerez pivot_root sur votre nouvelle partition racine.

Cela permet à peu près toutes les manipulations 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 cela permet de contourner la limitation de resize2fs ne pouvant pas être réduit ext4 partitions.

Personnellement, je l'ai utilisé, et cela fonctionne 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 en profondeur un peu plus liée aux nombreuses questions des sites Web stackexchange traitant du même problème.

Remarque: Bien sûr, si vous souhaitez agrandir votre partition, un simple resize2fs suffira, comme indiqué à de nombreux endroits et dans d'autres réponses ici.

11
vaab

Vous pouvez aussi simplement utiliser GParted - tant que la partition que vous redimensionnez n'est pas celle depuis laquelle vous avez démarré - sinon, je suggère que l'option live CD est un peu plus facile pour débutants.

GParted effectue toutes les étapes à la base - en se basant uniquement sur une interface graphique.

10
leatherjacket

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

D'abord la disposition du disque après l'avoir étendu:

$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

Donc, 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 l'éteindre.

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

swap n'est pas utilisé ici pour pouvoir l'éteindre

$Sudo swapoff /dev/sda5

Maintenant nous allons changer la table de partition:

$Sudo fdisk /dev/sda

(note: si vous commencez par avoir la première partition 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): 12242941

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 d'échange: 14335999-2093058 = 12242941

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

$partprobe

Nous devons maintenant 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é sous le type Linux (Ext4). Pour une raison quelconque, fdisk n’a aucun moyen de choisir le type. Nous devons donc l’alterner avec cfdisk

$ Sudo cfdisk

Choisissez sda2 et remplacez le type par 82 Linux swap / Solariset assurez-vous de l'écrire (tapez yes pour confirmer)

Maintenant, nous pouvons réactiver l'échange

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

Et enfin allumez-le:

$swapon /dev/sda2

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

$Sudo nano /etc/fstab

Et remplacez l’UUID de la partition de swap par 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èmes.

5
wouter205

Je viens de terminer le redimensionnement d’une partition racine ext4 sur un système actif alors 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
CDR

Je viens de le faire avec succès sans umount, pivot_root, ou suppression temporaire de la partition principale, en utilisant Parted 3.2 sur le noyau Ubuntu 16.04, 4.4.0. Par prudence, j'ai tout fait depuis une console virtuelle avec réseau désactivé, et j'ai pris un instantané au cas par cas, mais cet instantané n'était pas nécessaire. J'aurais donc pu le faire aussi bien via SSH sans changer de niveau d'exécution.

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

Passez éventuellement en mode multi-utilisateur sans mise en réseau (doit être effectué à partir d'une console, pas de SSH):

runlevel     # remember the original runlevel
init 2

Prenez éventuellement un instantané VM pour faire preuve de prudence.

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 d'exécution 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
Roger Dueck

Suivez ces étapes.

  1. terminal ouvert en tant que superutilisateur suname__
  2. exécuter partedname__
  3. tapez ppour voir les partitions disponibles
  4. identifiez votre numéro de partition racine (ex: 'sda 3' signifie numéro 3) et supprimez une partition adjacente à l'aide de rm PARTITION NUMBERpour créer un espace disponible.
  5. augmentez maintenant la taille de la racine en tapant resizepart ROOT NUMBER et redémarrez le système si nécessaire
  6. quittez parteden tapant exitet dans le terminal, saisissez partprobeet appuyez sur Entrée (cela peut être fait même après le redémarrage)
  7. enfin, exécutez resize2fs /dev/sda PARTITION NUMBER et profitez de la partition racine spacieuse.
1
Gurunadha Reddy

Comme indiqué précédemment:

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

  • la réduction d'une partition racine en direct doit être effectuée à partir d'un périphérique d'amorçage externe (démarrage à partir du cd/clé USB du système en direct), comme s'il y avait un problème, une non-concordance .. quoi que ce soit..votre système se bloque, doit être redémarré et ne le sera finalement pas capable de démarrer correctement.

Toute sorte de "mais je l’ai fait et ça marche" est un pur hasard.

0
ascervera