Créer une partition alignée à l'aide de parted


68

Je partitionner un disque dur non SSD avec entrouvertes parce que je veux une table de partition GPT.

parted /dev/sda mklabel gpt

Maintenant, j'essaie de créer les partitions correctement alignées. J'utilise la commande suivante pour savoir où commence le premier secteur:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

Nous pouvons voir que cela commence dans le secteur 34 (c'est la valeur par défaut lorsque cette table de partition est utilisée).

Donc, pour créer la première partition que j'ai essayée:

parted /dev/sda mkpart primary 63s 127s

pour l'aligner sur le secteur 64 puisqu'il s'agit d'un multiple de 8 mais cela montre:

Avertissement: La partition résultante n'est pas correctement alignée pour optimiser les performances.

Les tailles de secteur logique et physique sur mon disque dur sont toutes deux de 512 octets:

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

Comment créer des partitions correctement alignées? Qu'est-ce que je fais mal?


Etes-vous sûr que les numéros de secteurs commencent à zéro?
Burton Samograd

1
J'ai essayé aussi parted /dev/sda mkpart primary 64s 128s(au cas où ça commence en 1) mais ça retourne le même avertissement.
Marc

Il semble qu'une commande vérifie si une valeur est alignée: gnu.org/software/parted/manual/html_node/align_002dcheck.html . Peut-être essayer avec différentes valeurs en utilisant une boucle for et cracher les valeurs qui conviennent.
Burton Samograd

Burton, je ne connaissais pas cette commande, mais elle ne peut pas être utilisée avant d'avoir une partition.
Marc

Désolé, je n'ai pas lu la description avec suffisamment d'attention.
Burton Samograd

Réponses:


68

Afin d'aligner la partition avec partedvous, vous pouvez utiliser l' --alignoption. Les types d'alignement valides sont les suivants:

  • none - Utilisez l'alignement minimum autorisé par le type de disque.
  • cylindre - Aligner les cloisons sur les cylindres.
  • minimal - Utilisez un alignement minimal comme indiqué par les informations de topologie du disque. Cette valeur, ainsi que la valeur opt, utilisera les informations de disposition fournies par le disque pour aligner les adresses de la table de partitions logiques sur les blocs physiques réels des disques. La valeur minimale est l'alignement minimal nécessaire pour aligner correctement la partition sur des blocs physiques, ce qui évite une dégradation des performances.
  • optimal Utilisez l'alignement optimal comme indiqué par les informations de topologie du disque. Ceci s'aligne sur un multiple de la taille du bloc physique de manière à garantir des performances optimales.

Une autre astuce utile est que vous pouvez définir la taille avec des pourcentages pour l’aligner. Commencez à 0% et finissez à 100%. Par exemple:

parted -a optimal /dev/sda mkpart primary 0% 4096MB


5
La commande ne devrait-elle pas se terminer 0% 100%? D'où 4096MBvient-il?
jeudi

4
Valeur 4096MB est utilisé ici juste un exemple pour montrer la possibilité de mélanger des nombres de taille spécifique et%
lik

3
Juste une note, je devais inclure les '0%'guillemets pour que mon shell puisse exécuter la commande correctement.
Adam Eberlin

@lik avez-vous des suggestions pour ce message unix.stackexchange.com/questions/248939/…
AnkurTank 12/12

1
print
Peu importe

9

Ma solution a été d'utiliser gdisk, qui peut effectuer l'alignement des partitions automatiquement sur 2048 secteurs (1024 Ko) par défaut, bien que cela puisse être modifié dans le menu Expert.


8

Depuis le Wiki Arch :

Lors de la création d'une partition, Parted peut avertir d'un alignement incorrect de la partition mais ne suggère pas un alignement correct. Par exemple:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

L'avertissement signifie que la partition startn'est pas alignée.

Entrez Ignorequand même pour continuer , imprimez la table de partition par secteurs pour voir où elle commence et supprimez / recréez la partition avec le secteur de départ arrondi à la puissance croissante égale à 2 jusqu'à ce que l'avertissement cesse. À titre d'exemple, sur un lecteur flash avec 512 milliards de secteurs, Parted voulait que les partitions démarrent sur des secteurs multiples de 2048, ce qui correspond à un alignement de 1 Mo.

En outre, juste au-dessus de cette section, ils indiquent que les unités binaires IEC plus précises de KiB, MiB, GiB, etc., sont acceptables pour les unités, ainsi que les unités moins précises KB, MB, GB, etc.

Personnellement, ma commande exacte qui a résolu ceci était:

mkpart hd ext4 1024KiB 8470MB

Il ne s'est pas plaint, je suppose qu'il voulait des alignements de 1 Mo.


Non, j'ai essayé 1048576KiB, pas de dés.
Behrooz

5

Une correction mineure. Si je comprends bien, les disques GPT n’ont plus de types de partition, ils sont tous «primaires». La commande 'mkpart primary' ne crée pas de partition principale comme sur les disques msdos, elle crée simplement une partition appelée primaire. Vous pouvez aussi bien utiliser la commande

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

Cela peut semer la confusion si vous essayez de créer des partitions logiques, je le sais bien.

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

Vous ne pouvez pas créer une partition appelée "logique" à l'intérieur d'une partition appelée "étendue".


merci, j'ai juste perdu pas mal de temps grâce à cet outil bad cli, et vous m'avez fait comprendre ce qui se passait.
Florian Heigl

5

La réponse acceptée par @lik montre comment vous pouvez spécifier l'alignement préféré. Toutefois, Parted utilise toujours cet alignement pour vérifier la partition résultante, mais ne crée pas toujours de partitions avec cet alignement.

TL; DR: lorsque 1 Mo est l'alignement optimal, spécifier 0% fonctionnera pour les disques de 200 Mo et plus. Pour des disques plus petits ou un alignement plus important, spécifier 0G peut fonctionner là où 0% ne fonctionne pas. Voir ci-dessous pourquoi.

Parted essaie de satisfaire les contraintes d'alignement lors de la création d'une partition, mais il ne s'écartera pas non plus trop des valeurs demandées. Ce qui compte comme "trop" dépend de la façon dont vous avez spécifié les postions.

Lorsque vous spécifiez une position de début (ou de fin) dans la commande mkpart, elle génère en interne une plage de valeurs acceptables. Cette plage est centrée sur la valeur que vous spécifiez et s'étend également des deux côtés de la moitié de la taille de l'unité que vous avez utilisée (c'est ce que je lis du code , les commentaires indiquent une taille d'unité complète aux deux extrémités).

Par exemple, lorsque vous spécifiez "10M", il essaiera d’utiliser une position comprise entre 9,5M et 10,5M. Il en va de même pour les pourcentages, donc si vous spécifiez 0%, il utilisera toute valeur comprise entre 0% et 0,5% (évidemment, elle ne sera pas négative).

Une exception est que, lorsque vous utilisez une puissance de deux unités (telle que KiB pour 1024, par opposition à K pour 1000), Parted suppose que vous essayez de spécifier une position exacte et ne considère que la valeur exacte que vous avez spécifiée.

Comme l'alignement optimal semble typiquement aligné sur 1 Mo, les unités K et M n'auront souvent pas assez de place pour atteindre un alignement optimal. Spécifier des positions dans G devrait avoir beaucoup de place, mais% est aussi très bien.

Donc, c'est pourquoi 0% fonctionne habituellement, même si cela a des limites.


Pourriez-vous résumer un TLDR pratique de votre réponse: qu'est-ce qui devrait être mieux fait d'une manière différente par rapport à la réponse acceptée?
Yurkennis le

Bonne suggestion, j'ai ajouté un TL; DR. En pratique, je pense que le 0% fonctionnera pour tous les disques sauf les très petits, mais ma réponse ajoute un peu de contexte sur la manière dont cela fonctionne exactement.
Matthijs Kooijman le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.