XFS na lvm na sprzętowej macierzy RAID: prawidłowe parametry?

10

Mam 10 dysków o pojemności 8 TB każdy w sprzętowej macierzy RAID6 (czyli 8 dysków z danymi + 2 parzystość). Po odpowiedzi na bardzo podobne pytanie miałem nadzieję na automatyczne wykrycie wszystkich niezbędnych parametrów. Jednak podczas tworzenia systemu plików XFS na końcu mam

# 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

Wygląda na to, że paski nie zostały użyte. Ze względu na różne warunki, które znalazłem na różnych stronach (rozmiar paska, rozmiar paska, fragment paska, ...), chciałbym zapytać, czy poprawnie ustawiłem parametry ręczne.

RAID 6 został skonfigurowany z paskiem o wielkości 256 KB:

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

Zatem rozmiar paska wynosi 8 * 256 KB = 2048 KB = 2 MB. Czy to jest poprawne? Zgodnie z tym (i jeśli dobrze to rozumiem), pvcreatenależy użyć rozmiaru paska (lub fragmentu) jako argumentu do dataalignment:

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

Pamiętaj, że korzystałem z całego urządzenia RAID bez partycji. Teraz a

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

przy domyślnym rozmiarze PE 4 MB powinno być w porządku, ponieważ jest to wielokrotność rozmiaru paska 2 MB. Poprawny?

Teraz część grupy wirtualnej jest przypisana do woluminu logicznego:

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

Na koniec tworzony jest system plików, ale teraz z poprawnymi argumentami (rozmiar paska 2 MB, szerokość paska 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

Czy to podejście jest prawidłowe? Czy należy pamiętać o rozszerzeniu woluminu logicznego lub grupy woluminów? Przypuszczam, że jeśli grupa woluminów zostałaby rozszerzona o inny system RAID6, rozmiar paska powinien być równy obecnej RAID6.

EDYCJA : Moje zamieszanie wydaje się być oparte głównie na innym użyciu terminów związanych z paskiem. Producent mojego kontrolera RAID, LSI lub Avago, definiuje warunki w następujący sposób :

Szerokość paska

Szerokość paska to liczba napędów zaangażowanych w grupę napędów, w której zastosowano paski. Na przykład grupa napędów na cztery dyski z paskowaniem dysku ma szerokość paska wynoszącą cztery.

Rozmiar paska

Rozmiar paska to długość przeplecionych segmentów danych, które kontroler RAID zapisuje na wielu dyskach, z wyłączeniem dysków parzystych. Rozważmy na przykład pasek zawierający 64 KB miejsca na dysku i 16 KB danych znajdujących się na każdym dysku w pasku. W tym przypadku rozmiar paska to 64 KB, a rozmiar paska to 16 KB.

Rozmiar paska

Rozmiar paska to część paska, która znajduje się na jednym dysku.

Wikipedia (i IBM ) wydają się używać innych definicji:

Segmenty danych sekwencyjnych zapisywanych lub odczytywanych z dysku przed kontynuowaniem operacji na następnym dysku są zwykle nazywane fragmentami, krokami lub jednostkami pasków, podczas gdy ich logiczne grupy tworzące pojedyncze operacje pasków nazywane są pasami lub paskami. Ilość danych w jednym kawałku (jednostce pasków), często denominowana w bajtach, jest różnie określana jako rozmiar fragmentu, rozmiar kroku, rozmiar paska, głębokość paska lub długość paska. Liczba dysków z danymi w tablicy jest czasami nazywana szerokością paska, ale może również odnosić się do ilości danych w pasku.

Ilość danych w jednym kroku pomnożona przez liczbę dysków z danymi w tablicy (tj. Głębokość paska razy szerokość paska, która w analogii geometrycznej dałaby powierzchnię) jest czasami nazywana rozmiarem paska lub szerokością paska. Szerokie pasy występują, gdy fragmenty danych są rozmieszczone na wielu tablicach, być może na wszystkich dyskach w systemie. Wąskie paski pojawiają się, gdy fragmenty danych są rozmieszczone na dyskach w jednej tablicy.

Nawet w tekście Wikipedii powyższy rozmiar paska ma dwa różne znaczenia. Jednak przypuszczam, że teraz, podczas tworzenia systemu plików xfs, rozmiar pojedynczej porcji przechowywanej na jednym dysku musi być podany jako argument su. To powinno być mkfs.xfs -d su=256k,sw=8w powyższym poleceniu. Poprawny?

sebschub
źródło

Odpowiedzi:

12

Strony podręcznika XFS zamiast „rozmiar paska” i „rozmiar paska” używają odpowiednio terminów „jednostka paska” i „szerokość paska”.

Umożliwia to odkodowanie w inny sposób mylącego tekstu na mkfs.xfs(8)stronie podręcznika :

               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.

Tak więc, gdy twoja tablica zgłasza rozmiar paska 256KiB, powinieneś podać jeden su=256Klub sunit=512(ponieważ 512 512-bajtowych bloków to 256KiB).

               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.

Przy 10 wrzecionach (8 danych, 2 parzystości) można określić sw=8(wrzeciona danych) lub swidth=2M(rozmiar paska pomnożony przez wrzeciona danych).

Zauważ, że xfs_info i mkfs.xfsinterpretuj suniti swidthjak określono w jednostkach sektorów 512B; niestety nie jest to jednostka, w której są zgłaszane. xfs_infoi mkfs.xfszgłaszaj je jako wielokrotności podstawowego rozmiaru bloku ( bsize), a nie w sektorach 512B.

TL; DR:

Najłatwiejszym sposobem ich określenia jest zazwyczaj rozmiar paska i liczba wrzecion, a zatem su=rozmiar paska i sw=liczba wrzecion.

Michael Hampton
źródło
Wielkie dzięki za wyjaśnienia! Niejednolity sposób korzystania z określeniem wielkości paskiem (dla kawałka na jednym dysku lub dysków dla wszystkich danych wraz) jest dość mylące ... Czy ty też należy opracować na korzystanie z paskiem wielkość porcji jako argumentu pvcreate„s --dataalignment?
sebschub
1
Wyrównanie danych powinno być pełną szerokością paska, w tym przypadku 2M, a rozmiar używanego zasięgu fizycznego vgcreatepowinien być taki sam lub wielokrotność tego.
Michael Hampton
1

Wolumin logiczny nie został rozłożony (-i 8-I 256k), więc system plików xfs nie widzi nic oprócz ciągłego pojedynczego dysku

Stare pytanie, ale ocal innych poszukiwaczy przed tym samym błędem.

mwk
źródło