xfs su lvm su RAID hardware: parametri corretti?


10

Ho 10 dischi con 8 TB ciascuno in un RAID6 hardware (quindi, 8 dischi dati + 2 parità). Dopo aver risposto a una domanda molto simile , speravo in un rilevamento automatico di tutti i parametri necessari. Tuttavia, quando ho creato il file system XFS alla fine, ho ottenuto

# mkfs.xfs /dev/vgdata/lvscratch 
meta-data=/dev/vgdata/lvscratch  isize=256    agcount=40, agsize=268435455 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=10737418200, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Sembra che lo striping non sia stato usato. A causa dei diversi termini che ho trovato su siti diversi (dimensione della striscia, dimensione della striscia, blocco della striscia, ...), vorrei chiedere se ho ottenuto i parametri manuali giusti.

Il RAID 6 è stato configurato con una dimensione di strip di 256 KB:

# ./storcli64 /c0/v1 show all | grep Strip
Strip Size = 256 KB

Pertanto, la dimensione della striscia è 8 * 256 KB = 2048 KB = 2 MB. È corretto? Secondo questo (e se lo capisco correttamente), pvcreateè necessario utilizzare la dimensione strip (o chunk) come argomento per dataalignment:

# pvcreate --dataalignment 256K /dev/sdb
  Physical volume "/dev/sdb" successfully created

Si noti che ho usato l'intero dispositivo RAID senza partizioni. Ora a

# vgcreate vgdata /dev/sdb
  Volume group "vgdata" successfully created

con una dimensione PE predefinita di 4 MB dovrebbe andare bene perché è un multiplo della dimensione della striscia di 2 MB. Corretta?

Ora, una parte del vgroup è assegnata a un volume logico:

# lvcreate -L 40T vgdata -n lvscratch 
  Logical volume "lvscratch" created.

Infine, viene creato il file system ma ora con gli argomenti corretti (dimensione della striscia di 2 MB, larghezza della striscia di 8):

# mkfs.xfs -d su=2048k,sw=8 /dev/vgdata/lvscratch 
meta-data=/dev/vgdata/lvscratch  isize=256    agcount=41, agsize=268434944 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=10737418240, imaxpct=5
         =                       sunit=512    swidth=4096 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Questo approccio è corretto? C'è qualcosa da tenere a mente per un'estensione del volume logico o del gruppo di volumi? Suppongo che se il gruppo di volumi fosse esteso con un altro sistema RAID6, la dimensione dello strip dovrebbe essere uguale all'attuale RAID6.

EDIT : La mia confusione sembra essere principalmente basata sul diverso uso dei termini collegati alla striscia. Il produttore del mio controller RAID, LSI o Avago, definisce i termini nel modo seguente :

Larghezza della banda

La larghezza della striscia è il numero di unità coinvolte in un gruppo di unità in cui è implementata la striscia. Ad esempio, un gruppo di unità a quattro dischi con striping del disco ha una larghezza di striping di quattro.

Dimensione della striscia

La dimensione dello striping è la lunghezza dei segmenti di dati interlacciati che il controller RAID scrive su più unità, escluse le unità di parità. Ad esempio, si consideri uno stripe che contiene 64 KB di spazio su disco e ha 16 KB di dati residenti su ciascun disco nello stripe. In questo caso, la dimensione della striscia è 64 KB e la dimensione della striscia è 16 KB.

Dimensione della striscia

La dimensione della striscia è la porzione di una striscia che risiede su una singola unità.

Wikipedia (e IBM ) sembrano usare altre definizioni:

I segmenti di dati sequenziali scritti o letti da un disco prima che l'operazione continui sul disco successivo sono generalmente chiamati blocchi, falcate o unità di striping, mentre i loro gruppi logici che formano singole operazioni di striping sono chiamati strip o strip. La quantità di dati in un blocco (unità di striping), spesso denominata in byte, viene variamente definita dimensione del blocco, dimensione del passo, dimensione del tratto, profondità del tratto o lunghezza del tratto. Il numero di dischi di dati nell'array è talvolta chiamato larghezza della striscia, ma può anche riferirsi alla quantità di dati all'interno di una striscia.

La quantità di dati in un passo moltiplicata per il numero di dischi di dati nell'array (vale a dire, profondità della striscia per larghezza della striscia, che nell'analogia geometrica darebbe un'area) viene talvolta chiamata dimensione della striscia o larghezza della striscia. Lo striping esteso si verifica quando blocchi di dati vengono distribuiti su più array, possibilmente tutte le unità del sistema. Lo striping stretto si verifica quando i blocchi di dati vengono distribuiti tra le unità in un singolo array.

Anche nel testo di Wikipedia sopra la dimensione della striscia viene utilizzato con due significati diversi. Tuttavia, suppongo ora, quando si crea il file system xfs, la dimensione di un singolo blocco memorizzato su una singola unità deve essere data come argomento a su. Questo, dovrebbe essere mkfs.xfs -d su=256k,sw=8nel comando sopra. Corretta?

Risposte:


12

Invece di "dimensione della striscia" e "dimensione della striscia", le pagine man di XFS usano rispettivamente i termini "unità di striscia" e "larghezza di striscia".

Questo rende possibile decodificare il testo altrimenti confuso nella mkfs.xfs(8)pagina man:

               sunit=value
                      This is used to specify the stripe unit for  a  RAID
                      device  or  a  logical  volume.  The value has to be
                      specified in 512-byte block units. Use the su subop‐
                      tion  to specify the stripe unit size in bytes. This
                      suboption ensures  that  data  allocations  will  be
                      stripe  unit aligned when the current end of file is
                      being extended and the  file  size  is  larger  than
                      512KiB.  Also inode allocations and the internal log
                      will be stripe unit aligned.

               su=value
                      This is an alternative to using sunit.  The su  sub‐
                      option is used to specify the stripe unit for a RAID
                      device or a striped logical volume. The value has to
                      be  specified  in  bytes,  (usually using the m or g
                      suffixes). This value must  be  a  multiple  of  the
                      filesystem block size.

Quindi, con l'array che riporta una dimensione di strip di 256 KiB, è necessario specificare uno su=256Ko sunit=512(poiché 512 blocchi da 512 byte equivalgono a 256 KiB).

               swidth=value
                      This  is used to specify the stripe width for a RAID
                      device or a striped logical volume. The value has to
                      be  specified  in  512-byte  block units. Use the sw
                      suboption to specify the stripe width size in bytes.
                      This  suboption  is  required  if  -d sunit has been
                      specified and it has to be  a  multiple  of  the  -d
                      sunit suboption.

               sw=value
                      suboption is an alternative to using swidth.  The sw
                      suboption is used to specify the stripe width for  a
                      RAID  device or striped logical volume. The value is
                      expressed as a multiplier of the stripe  unit,  usu‐
                      ally the same as the number of stripe members in the
                      logical volume configuration, or  data  disks  in  a
                      RAID device.

                      When  a  filesystem  is  created on a logical volume
                      device, mkfs.xfs will automatically query the  logi‐
                      cal volume for appropriate sunit and swidth values.

Con 10 mandrini (8 dati, 2 parità) è necessario specificare sw=8(mandrini dati) o swidth=2M(la dimensione della striscia moltiplicata per i mandrini dati).

Si noti che xfs_info e mkfs.xfsinterpretare sunite swidthcome specificato in unità di settori 512B; purtroppo non è l'unità in cui sono riportati. xfs_infoe segnalali mkfs.xfsin multipli della dimensione del blocco di base ( bsize) e non nei settori 512B.

TL; DR:

Il modo più semplice per specificarli è di solito in base alle dimensioni della striscia e al conteggio del mandrino, quindi alle su=dimensioni della striscia e al sw=conteggio del mandrino.


Grazie mille per il chiarimento! L'utilizzo diverso della dimensione di stripe termine (per il pezzo su un disco o per tutti i dischi di dati insieme) è piuttosto confusa ... Potrebbe anche si prega di approfondire l'uso della dimensione del blocco striscia come un argomento per pvcreates' --dataalignment?
sebschub,

1
L'allineamento dei dati dovrebbe essere la larghezza della striscia intera, in questo caso 2M, e la dimensione dell'estensione fisica con cui si utilizza vgcreatedovrebbe essere la stessa o un multiplo di questo.
Michael Hampton,

1

Il volume logico non era a strisce (-i 8 -I 256k), quindi il tuo filesystem xfs non vede altro che un singolo disco contiguo

Vecchia domanda ma salva altri utenti dallo stesso errore.

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.