Crea partizione allineata usando parted


68

Sto partizionando un disco rigido non SSD con parted perché voglio una tabella delle partizioni GPT.

parted /dev/sda mklabel gpt

Ora sto cercando di creare le partizioni correttamente allineate, quindi utilizzo il comando seguente per sapere dove inizia il primo settore:

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

Possiamo vedere che inizia nel settore 34 (che è l'impostazione predefinita quando viene utilizzata questa tabella delle partizioni).

Quindi, per creare la prima partizione ho provato:

parted /dev/sda mkpart primary 63s 127s

per allinearlo sul settore 64 poiché è un multiplo di 8 ma mostra:

Avvertenza: la partizione risultante non è allineata correttamente per le migliori prestazioni.

Le dimensioni del settore logico e fisico nel mio disco rigido sono entrambi 512 byte:

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

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

Come posso creare partizioni allineate correttamente? Che cosa sto facendo di sbagliato?


Sei sicuro che i numeri di settore inizino da zero?
Burton Samograd,

1
Ho provato anche parted /dev/sda mkpart primary 64s 128s(nel caso in cui inizi in 1) ma restituisca lo stesso avvertimento.
Marc,

Sembra che ci sia un comando per verificare se un valore è allineato: gnu.org/software/parted/manual/html_node/align_002dcheck.html . Forse provalo con vari valori usando un ciclo for e sputa i valori che sono ok?
Burton Samograd,

Burton, non sapevo di quel comando ma non può essere usato fino a quando non ha una partizione.
Marc,

Mi dispiace, non ho letto abbastanza attentamente la descrizione.
Burton Samograd,

Risposte:


68

Per allineare la partizione con partedte puoi usare l' --alignopzione. I tipi di allineamento validi sono:

  • nessuna : utilizza l'allineamento minimo consentito dal tipo di disco.
  • cilindro - Allinea le partizioni ai cilindri.
  • minimo : utilizzare l'allineamento minimo come indicato dalle informazioni sulla topologia del disco. Questo e il valore opt useranno le informazioni di layout fornite dal disco per allineare gli indirizzi della tabella delle partizioni logiche ai blocchi fisici effettivi sui dischi. Il valore minimo è l'allineamento minimo necessario per allineare correttamente la partizione ai blocchi fisici, evitando così il degrado delle prestazioni.
  • ottimale Utilizzare l'allineamento ottimale come indicato dalle informazioni sulla topologia del disco. Ciò si allinea a un multiplo della dimensione del blocco fisico in modo da garantire prestazioni ottimali.

Un altro suggerimento utile è che puoi impostare le dimensioni con percentuali per allinearle. Inizia allo 0% e termina al 100%. Per esempio:

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


5
Il comando non dovrebbe finire 0% 100%? Da dove 4096MBviene
njahnke,

4
Valore 4096MB è qui utilizzato solo un esempio per dimostrare la capacità di mescolare% e il numero di dimensioni specifiche
lik

3
Solo una nota, ho dovuto racchiudere '0%'tra virgolette la mia shell per eseguire correttamente il comando.
Adam Eberlin,

@lik hai suggerimenti per questo post unix.stackexchange.com/questions/248939/…
AnkurTank

1
Indipendentemente da quanto sopra, ho appena notato che il parted printusa kB come 1000 byte ...
jiggunjer,

9

La mia soluzione è stata quella di utilizzare gdisk che può eseguire automaticamente l'allineamento delle partizioni su 2048 settori (1024 KiB) per impostazione predefinita, sebbene possa essere modificato nel menu Esperto.


8

Da Arch Wiki :

Durante la creazione di una partizione, parted potrebbe avvertire dell'allineamento errato della partizione, ma non suggerisce un allineamento corretto. Per esempio:

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

L'avviso indica che la partizione startnon è allineata.

Invio Ignoreper procedere comunque , stampare la tabella delle partizioni in settori per vedere dove inizia e rimuovere / ricreare la partizione con il settore iniziale arrotondato per aumentare di 2 potenze fino a quando non si interrompe l'avviso. Ad esempio, su un'unità flash con settori da 512 B, Parted voleva che le partizioni iniziassero su settori che erano un multiplo di 2048, ovvero un allineamento di 1 MB.

Inoltre, appena sopra questa sezione, affermano che le unità binarie IEC più precise di KiB, MiB, GiB, ecc. Sono accettabili per le unità, nonché i KB, MB, GB, ecc. Meno precisi.

Personalmente, il mio esatto comando che ha risolto questo è stato:

mkpart hd ext4 1024KiB 8470MB

Non si è lamentato, immagino volesse allineamenti da 1 MB.


No, ho provato 1048576 KiB, senza dadi.
Behrooz,

5

Una correzione minore. A quanto ho capito, i dischi GPT non hanno più tipi di partizioni, sono tutti "primari". Il comando 'mkpart primary' non crea una partizione primaria come sui dischi msdos, ma crea semplicemente una partizione chiamata primary. Puoi anche usare il comando

(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!

Questo può causare confusione se provi a creare partizioni logiche, lo so che ha fatto per me.

(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

Non è possibile creare una partizione chiamata "logica" all'interno di una partizione chiamata "estesa".


grazie, ho solo perso un bel po 'di tempo grazie a questi strumenti cattivi cli, e mi hai fatto capire cosa sta succedendo.
Florian Heigl,

5

La risposta accettata da @lik mostra come è possibile specificare l'allineamento preferito. Tuttavia, parted utilizza sempre quell'allineamento per controllare la partizione risultante, ma non crea sempre partizioni con quell'allineamento.

TL; DR: quando 1MiB è l'allineamento ottimale, la specifica dello 0% funzionerà per i dischi di 200 MiB e superiori. Per dischi più piccoli o allineamento più grande, specificare 0G potrebbe funzionare dove lo 0% no. Vedi sotto sul perché.

Parted tenta di soddisfare i vincoli di allineamento durante la creazione di una partizione, ma non si discosta troppo dai valori richiesti. Ciò che conta come "troppo" dipende da come hai specificato le posizioni.

Quando si specifica una posizione iniziale (o finale) al comando mkpart, genera internamente un intervallo di valori accettabili. Questo intervallo è centrato sul valore specificato e si estende equamente su entrambi i lati della metà della dimensione dell'unità utilizzata (questo è ciò che ho letto dal codice , i commenti indicano una dimensione intera dell'unità su entrambe le estremità).

Ad esempio, quando specifichi "10 M", proverà a utilizzare qualsiasi posizione compresa tra 9,5 M e 10,5 M. Lo stesso vale per le percentuali, quindi se si specifica 0% utilizzerà qualsiasi valore compreso tra 0% e 0,5% (ovviamente non diventa negativo).

Un'eccezione è che quando si utilizza la potenza di due unità (come KiB per 1024, invece di K per 1000) partendo dal presupposto che si sta tentando di specificare una posizione esatta e considera solo il valore esatto specificato.

Poiché l'allineamento ottimale sembra in genere allineato a 1 MiB, le unità K e M spesso non avranno spazio sufficiente per raggiungere l'allineamento ottimale. Specificare le posizioni in G dovrebbe avere molto spazio, ma di solito va bene anche%.

Quindi, questo è il motivo per cui lo 0% di solito funziona, anche se anche questo ha dei limiti.


Potresti sintetizzare un TLDR pratico della tua risposta: cosa dovrebbe essere fatto esattamente meglio in un modo diverso rispetto alla risposta accettata?
yurkennis,

Buon consiglio, ho aggiunto un TL; DR. In pratica, penso che lo 0% funzionerà per tutti i dischi, tranne quelli veramente piccoli, ma la mia risposta aggiunge un piccolo background su come funziona esattamente.
Matthijs Kooijman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.