xfs pada LVM pada hardware RAID: parameter yang benar?

10

Saya memiliki 10 disk dengan masing-masing 8 TB dalam RAID6 perangkat keras (dengan demikian, 8 disk data + 2 paritas). Mengikuti jawaban dari pertanyaan yang sangat mirip , saya berharap untuk deteksi otomatis semua parameter yang diperlukan. Namun, ketika membuat sistem file XFS pada akhirnya, saya mengerti

# 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

Ini sepertinya striping belum digunakan. Karena perbedaan istilah yang saya temukan di situs yang berbeda (ukuran strip, ukuran stripe, stripe chunk, ...), saya ingin bertanya apakah saya mendapatkan parameter manual dengan benar.

RAID 6 telah diatur dengan ukuran strip 256KB:

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

Dengan demikian, ukuran garis adalah 8 * 256KB = 2048KB = 2MB. Apakah ini benar? Menurut ini (dan jika saya memahaminya dengan benar), pvcreateharus menggunakan ukuran strip (atau chunk) sebagai argumen untuk dataalignment:

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

Perhatikan bahwa saya menggunakan seluruh perangkat RAID tanpa partisi. Sekarang a

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

dengan PE standar Ukuran 4MB harus baik-baik saja karena merupakan kelipatan dari ukuran garis 2MB. Benar?

Sekarang, bagian dari vgroup ditugaskan ke volume logis:

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

Akhirnya, sistem file dibuat tetapi sekarang dengan argumen yang benar (ukuran garis 2MB, lebar garis 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

Apakah pendekatan ini benar? Apakah ada yang perlu diingat untuk perluasan volume logis atau grup volume? Saya kira jika grup volume akan diperluas dengan sistem RAID6 lain, ukuran strip harus sama dengan RAID6 yang ada.

EDIT : Kebingungan saya tampaknya terutama didasarkan pada perbedaan penggunaan istilah yang terhubung ke stripe. Pembuat pengontrol RAID saya, LSI atau Avago, mendefinisikan persyaratan dengan cara berikut :

Lebar Garis

Lebar garis adalah jumlah drive yang terlibat dalam grup drive tempat striping diterapkan. Misalnya, grup empat disk drive dengan strip disk memiliki lebar empat strip.

Ukuran Stripe

Ukuran garis adalah panjang segmen data yang disisipkan di mana pengontrol RAID menulis di beberapa drive, tidak termasuk drive paritas. Misalnya, pertimbangkan strip yang berisi 64 KB ruang disk dan memiliki 16 KB data yang berada di setiap disk dalam strip tersebut. Dalam hal ini, ukuran strip adalah 64 KB, dan ukuran strip adalah 16 KB.

Ukuran Strip

Ukuran strip adalah bagian dari strip yang berada di drive tunggal.

Wikipedia (dan IBM ) tampaknya menggunakan definisi lain:

Segmen data berurutan yang ditulis atau dibaca dari disk sebelum operasi dilanjutkan pada disk berikutnya biasanya disebut unit potongan, langkah atau garis, sedangkan kelompok logis mereka yang membentuk operasi garis tunggal disebut strip atau strip. Jumlah data dalam satu chunk (stripe unit), sering dalam satuan byte, beragam disebut sebagai chunk size, ukuran stride, ukuran stripe, kedalaman stripe atau panjang stripe. Jumlah disk data dalam array kadang-kadang disebut lebar stripe, tetapi juga dapat merujuk pada jumlah data dalam stripe.

Jumlah data dalam satu langkah dikalikan dengan jumlah disk data dalam array (yaitu, kedalaman garis kali lebar garis, yang dalam analogi geometris akan menghasilkan suatu daerah) kadang-kadang disebut ukuran garis atau lebar garis. Striping lebar terjadi ketika potongan data tersebar di beberapa array, mungkin semua drive dalam sistem. Striping sempit terjadi ketika potongan data tersebar di drive dalam satu array.

Bahkan dalam teks Wikipedia ukuran stripe di atas digunakan dengan dua arti yang berbeda. Namun, saya kira sekarang, ketika membuat sistem file xfs, ukuran satu potongan yang disimpan pada satu drive harus diberikan sebagai argumen untuk su. Ini, harus mkfs.xfs -d su=256k,sw=8di perintah di atas. Benar?

sebschub
sumber

Jawaban:

12

Daripada "ukuran strip" dan "ukuran garis", halaman manual XFS menggunakan istilah "unit garis" dan "lebar garis" masing-masing.

Ini memungkinkan untuk memecahkan kode teks yang membingungkan di mkfs.xfs(8)halaman manual:

               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.

Jadi, dengan array Anda melaporkan ukuran strip 256KiB, Anda akan menentukan salah satu su=256Katau sunit=512(karena blok 512-byte sama dengan 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.

Dengan 10 spindel (8 data, 2 paritas) Anda akan menentukan sw=8(spindel data) atau swidth=2M(ukuran strip dikalikan dengan spindel data).

Catat itu xfs_info dan mkfs.xfstafsirkan sunitdan swidthsebagaimana ditentukan dalam unit sektor 512B; sayangnya itu bukan unit tempat mereka dilaporkan. xfs_infodan mkfs.xfsmelaporkannya dalam kelipatan ukuran blok dasar Anda ( bsize) dan bukan di sektor 512B.

TL; DR:

Cara termudah untuk menentukan ini biasanya dengan ukuran strip dan jumlah spindel, sehingga su=ukuran strip dan sw=jumlah spindel.

Michael Hampton
sumber
Terima kasih banyak untuk klarifikasi! Perbedaan penggunaan ukuran stripe (untuk chunk pada satu disk atau untuk semua disk data) cukup membingungkan ... Bisakah Anda juga menjelaskan tentang penggunaan ukuran strip sebagai argumen untuk pvcreate's --dataalignment?
sebschub
1
Penyelarasan data harus menjadi lebar garis penuh Anda, dalam hal ini 2M, dan ukuran fisik Anda yang Anda gunakan vgcreateharus sama, atau kelipatannya.
Michael Hampton
1

Volume logis tidak bergaris, (-i 8 -I 256k) sehingga sistem file xfs Anda tidak melihat apa pun kecuali disk tunggal yang berdekatan

Pertanyaan lama tetapi simpan pencari lain dari kesalahan yang sama.

mwk
sumber