web-dev-qa-db-fra.com

Comment étendre une partition ext4 et un système de fichiers?

J'ai un disque de 400 Go avec une partition ext4 de 320 Go. Je voudrais agrandir la partition ext4 pour utiliser l'espace gauche (80 Go d'espace libre).

+--------------------------------+--------+
|             ext4               |  Free  |
+--------------------------------+--------+

Comment pourrais-je faire ça?

J'ai vu des gens utiliser resize2fs mais je ne comprends pas s'il redimensionne la partition.

Une autre solution serait d'utiliser fdisk mais je ne veux pas supprimer ma partition et perdre des données. Comment pourrais-je simplement agrandir la partition sans perdre aucun fichier?

Remarque: je parle d'une partition de données non montée sans LVM et j'ai des sauvegardes, mais je voudrais éviter de passer un peu de temps sur la récupération.

50
mimipc

Vous devez commencer avec la partition démontée. Si vous ne pouvez pas le démonter (par exemple, c'est votre partition racine ou autre chose que le système doit exécuter), utilisez quelque chose comme System Rescue CD à la place.

  1. Exécutez parted ou gparted si vous préférez une interface graphique et redimensionnez la partition pour utiliser l'espace supplémentaire. Je préfère gparted car cela vous donne une belle représentation graphique, très similaire à celle que vous avez dessinée dans votre question.

  2. resize2fs /dev/whatever

  3. e2fsck /dev/whatever (juste pour savoir si vous êtes du bon côté)

  4. Remontez votre partition.

Bien que je n'aie jamais vu cela échouer, sauvegardez d'abord vos données!

53
Flup

Oui, vous pouvez faire croître EXT4 fs en ligne si vous avez déjà partitionné. Avez-vous trié la partition? Avez-vous LVM?

Sudo resize2fs /dev/drive_to_grow

fdisk redimensionnera votre partition, c'est vrai, mais s'il s'agit d'une partition racine (ou s'il s'agit d'une partition montée), elle devra d'abord être démontée. Donc, très probablement hors ligne!

Comme pour tout ce qui concerne les opérations disque/fs, je recommande fortement d'avoir une sauvegarde et un processus de récupération testé et bien compris.

22
Chris

Remarque: sur certains serveurs VDS, vous pouvez avoir une partition racine non principale et devez d'abord redimensionner le conteneur de partition étendue

Par exemple, vous venez de mettre à jour votre plan et avez quelque chose comme:

Disk /dev/vda: 83886080s
Number  Start    End        Size       Type      File system  Flags
1      2048s    194559s    192512s    primary   ext2         boot
2      196606s  51197951s  51001346s  extended
5      196608s  51197951s  51001344s  logical   ext4

Ici/dev/vda2 - est votre conteneur étendu. Et/dev/vda5 - partition principale dont nous avons besoin pour redimensionner à l'espace disponible complet.

La manière la plus simple:

apt-get -y install parted
parted /dev/vda unit s print all # print current data for a case
parted /dev/vda resizepart 2 yes -- -1s # resize /dev/vda2 first
parted /dev/vda resizepart 5 yes -- -1s # resize /dev/vda5
partprobe /dev/vda # re-read partition table
resize2fs /dev/vda5 # get your space
6
WSR

parted can resize partitions et leurs systèmes de fichiers.

3
200_success

Parted ne fonctionne pas sur ext4 sur Centos. J'ai dû utiliser fdisk pour supprimer et recréer la partition, qui (j'ai validé) fonctionne sans perdre de données. J'ai suivi les étapes à http://geekpeek.net/resize-filesystem-fdisk-resize2fs/ . Les voici, en bref:

$ Sudo fdisk /dev/sdx 
> c
> u
> p
> d
> p
> w
$ Sudo fdisk /dev/sdx 
> c
> u
> p
> n
> p
> 1
> (default)
> (default)
> p
> w
3
JTW

Vous pouvez utiliser fdisk ou cfdisk pour modifier (ou recréer) la partition (assurez-vous simplement de ne pas modifier sa limite de début), puis redémarrez et resize2fs. Mais en général, il est préférable d'utiliser LVM-2 au lieu de MBR/GPT car cela vous permet d'apporter ces modifications sans redémarrage du noyau.

2
poige

Juste pour clarifier comment je fais cela pour quiconque lit encore ce fil.
Si c'est la partition de démarrage que vous souhaitez redimensionner, vous devez alors démarrer à partir d'un lecteur de secours bootcd ou bootusb qui n'est qu'un Live Linux. Cela vous permet d'exécuter Linux sur la machine autre que le lecteur que vous souhaitez modifier.

Je pense que le meilleur cd ou usb "de secours" dans ce cas serait un USB ou un CD gparted amorçable
Cas dans lesquels vous avez besoin d'une image de secours
1. La partition à développer est la dernière partition, mais vous avez démarré à partir d'elle et ne pouvez pas la démonter.
sda1 = démarrage (ou échange)
sda2 = swap (ou boot)
sda3 = /
Espace inutilisé

  1. Si la partition à développer n'est PAS la dernière partition, vous devez utiliser l'image de démarrage gparted pour déplacer ou redimensionner les partitions.
    sda1 = démarrage
    sda2 =/(la partition à développer n'est pas la dernière)
    sda3 = échange
    espace inutilisé

Si vous souhaitez modifier une partition montée qui n'est pas la partition "racine" (/), comme/home qui est une partition différente, il n'est pas nécessaire d'utiliser une image de secours. Cela est particulièrement vrai s'il s'agit de la dernière partition.
sda1 = démarrage
sda2 = /
sda3 =/home
espace inutilisé
-ou-
sda1 = /
sda2 =/home
espace inutilisé

C'est la situation que j'ai lorsque je prends une image à partir d'un petit lecteur ou SSD et que je la déplace vers un SSD plus grand.

Dans ce cas, il vous suffit de démonter/home pendant que vous l'étendez. Mais pour démonter/home, vous devez vous assurer que vous n'êtes connecté à aucun compte utilisateur dont le répertoire home est dedans. Étant donné que le répertoire personnel de l'utilisateur "root" se trouve directement sous le système root/comme dans/root, si vous pouvez vous connecter à root, vous pouvez démonter/home

Je me déconnecte d'une session GUI (KDE/Gnome/etc) et j'utilise [CTRL] + [ALT] + [F1] pour ouvrir une session Shell.
Si vous venez de vous déconnecter d'une connexion utilisateur, cela peut prendre 20 à 30 secondes à Linux pour terminer la fermeture de tous les fichiers.
1. umount/home (je réessaye cette commande si elle échoue pendant 30 secondes maximum, puis regarde d'autres sessions pour voir si je suis "cd/home/xxx" quelque part.)
2. parted/dev/sda
une. redimensionner x (x = partition que vous souhaitez redimensionner, utilisez "p" pour obtenir une liste des partitions)
b. Entrez le dernier secteur de redimensionnement = "-1" (moins 1 signifie 1 secteur à partir de la fin du disque)
c. q (quitte parti)
3 resize2fs/dev/sda "x" (x = partition à redimensionner. Cela remonte également le système de fichiers)
4. df -m (je vérifie/home pour vérifier qu'il est redimensionné)
Je n'ai jamais perdu de fichiers ni corrompu le lecteur à l'aide de cette méthode.

Bonne chance

1
Chuck A

On m'a demandé de développer un disque monté en tant que/scratch sur un serveur Dell exécutant CentOS 7 sans interrompre les utilisateurs actuels. Il s'agissait d'une partition XFS sur un disque RAID 0 avec une étiquette de disque GPT normale. Cela fonctionnerait pour une partition ext4 presque exactement de la même manière - voir plus loin.

C'est ainsi que je l'ai fait sans démonter, redémarrer ou interrompre les opérations sur le système. Je viens d'utiliser les commandes Linux (et les outils RAID de Dell):

  1. La croissance du volume RAID physique a été effectuée en ajoutant deux nouveaux disques au serveur et en utilisant l'outil OpenManage Server Administrator pour les ajouter au volume RAID existant. Cela a pris plusieurs jours, mais n'a nécessité aucun autre effort humain. Le serveur a continué de fonctionner avec des vitesses de disque inférieures pendant la reconstruction du disque RAID.
  2. La taille du disque en blocs était passée de 15623782400 à 23435673600 (512 octets), mais la valeur de /sys/block/sdb/size Était toujours à la valeur inférieure. Cela a été corrigé à l'aide de la commande: echo 1 > /sys/block/sdb/device/rescan
    pour que le pilote de disque mette à jour sa connaissance de la taille et de la forme du disque. Cela semble une fonctionnalité mal annoncée: j'ai deviné ce que cela a fait du nom!
  3. J'ai exécuté parted pour modifier le label du disque et déplacer sa copie à la fin du disque vers la nouvelle fin de disque. Heureusement, il a deviné exactement ce que je voulais faire sans encouragement et m'a incité. Tout d'abord, la copie du label de disque: Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? F
    Et puis la taille du disque telle que reflétée dans le label du disque: Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 7811891200 blocks) or continue with the current setting? Fix/Ignore? F
    J'ai donc dû entrer deux fois "F" puis "q" pour sortir avec le disklabel (et sa copie) corrigé. Cela a corrigé la plupart de ce qui devait être réparé sans réflexion ni travail.
  4. J'ai dû modifier la taille de la partition pour remplir le disque, mais parted ne me laissait pas faire cela pendant que le disque était encore monté - j'ai donc utilisé fdisk à la place: fdisk /dev/sdb d 1 n 1 (defaults were correct for full size of disk) t 1 11 (That's Microsoft basic data - which is the same as xfs). w
    Notez que j'avais établi qu'il utilisait le bon numéro de bloc de départ, 2048. Sinon, cela n'aurait pas fonctionné. J'ai eu la chance d'utiliser deux outils qui avaient la même convention pour le bloc de démarrage, mais j'ai d'abord vérifié le bloc de démarrage initial.
  5. J'ai également utilisé parted à ce stade pour donner à la partition le même nom qu'auparavant car fdisk ne prend pas en charge les noms de partitions. Un détail mineur.
  6. J'ai utilisé partprobe /dev/sdb (Et partprobe /dev/sdb1 Pour faire bonne mesure) pour que le système d'exploitation relise la table de partition. Je pense que seule la première commande a réellement fait une différence.
  7. Enfin, j'ai utilisé xfs_growfs -d /scratch Qui n'a pris que 1,6 seconde pour agrandir la partition à sa taille finale, remplissant le disque nouvellement développé.

Cela fonctionnerait également avec les volumes ext4: la seule différence serait d'utiliser resize2fs /dev/sdb1 Au lieu de xfs_growfs -d /scratch - et d'utiliser le numéro de type de partition correct pour ext4 au lieu de xfs. La commande fdisk peut répertorier les numéros de type pour les systèmes de disques courants, y compris ext4.

0
Patrick McTiernan

La réponse acceptée est quelque peu dépassée: le redimensionnement d'un système de fichiers ext4 est mieux fait en ligne plutôt que hors ligne, car le chemin du code d'extension en ligne est beaucoup plus couramment utilisé que celui hors ligne.

La chose la plus difficile est probablement d'étendre la partition sous-jacente, sauf si vous utilisez LVM et vous avez de l'espace libre dans votre groupe de volumes. Pour développer une partition en ligne, vous pouvez utiliser fdisk ou parted; ensuite, vous deviez exécuter kpartx <device> pour informer le noyau de la modification. Si vous utilisez LVM, vous devez pvresize la partition juste redimensionnée avant lvresize le volume.

Enfin, vous pouvez émettre resize2fs votre système de fichiers.

0
shodanshok