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?
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
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
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ù.
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.
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.
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 / Solaris
et 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.
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]#
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).
Suivez ces étapes.
su
name__parted
name__p
pour voir les partitions disponiblesrm PARTITION NUMBER
pour créer un espace disponible.resizepart ROOT NUMBER
et redémarrez le système si nécessaireparted
en tapant exit
et dans le terminal, saisissez partprobe
et appuyez sur Entrée (cela peut être fait même après le redémarrage)resize2fs /dev/sda PARTITION NUMBER
et profitez de la partition racine spacieuse.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.