GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan TRIM dan DISCARD dengan SSD yang terpasang ke pengontrol RAID

SSD sekarang menjadi hal yang biasa dan telah menjadi pilihan default untuk disk berorientasi kinerja di lingkungan perusahaan dan konsumen selama beberapa tahun terakhir. SSD memang keren dan cepat, tetapi kebanyakan orang pada mesin kelas atas menghadapi dilema ini:SSD saya berada di belakang pengontrol RAID yang tidak mengekspos kemampuan DISCARD atau TRIM perangkat. Bagaimana cara membuang blok untuk menjaga kinerja SSD terbaik? Inilah trik untuk melakukan hal itu tanpa harus membongkar mesin Anda. Peningkatan terbaru pada firmware SSD telah membuat aplikasi yang menulis ke SSD menjadi kurang ketat untuk menggunakan DISCARD/TRIM.

Namun, ada beberapa kasus di mana Anda mungkin perlu sistem file menginformasikan drive blok yang dibuang. Mungkin Anda memiliki drive TLC (3bit per sel) atau QLC (4bit per sel) daripada drive SLC atau MLC kelas perusahaan yang biasanya lebih mahal (yang terakhir kurang rentan terhadap penurunan kinerja karena mereka menyisihkan lebih banyak blok tambahan untuk membantu menimpa saat drive berada pada kapasitas). Atau mungkin Anda pernah mengisi SSD hingga 100%, dan sekarang Anda tidak bisa mendapatkan kembali performa/IOPS asli.

Pada sebagian besar sistem, mendapatkan kembali kinerja biasanya masalah sederhana dengan mengeluarkan trim sistem file (fstrim ) memerintah. Berikut ini contoh penggunaan sistem Red Hat Enterprise Linux (RHEL):

[root@System_A ~]# fstrim -av
/export/home: 130.5 GiB (140062863360 bytes) trimmed
/var: 26.1 GiB (28062511104 bytes) trimmed
/opt: 17.6 GiB (18832797696 bytes) trimmed
/export/shared: 31.6 GiB (33946275840 bytes) trimmed
/usr/local: 5.6 GiB (5959331840 bytes) trimmed
/boot: 678.6 MiB (711565312 bytes) trimmed
/usr: 36.2 GiB (38831017984 bytes) trimmed
/: 3 GiB (3197743104 bytes) trimmed
[root@System_A ~]# 

[ Pembaca juga menyukai:Perangkat keras Linux:Mengonversi ke solid-state disk (SSD) di desktop ]

Namun, ada satu tangkapan...

Jika SSD Anda berada di belakang volume RAID yang terpasang ke pengontrol RAID (SmartArray HPE, PERC Dell, atau apa pun yang didasarkan pada MegaRAID LSI/Avago), inilah yang terjadi:

[root@System_B ~]# fstrim -av
[root@System_B ~]#  

Tidak ada apa-apa. Tidak ada yang akan terjadi. Di akhir rantai I/O SCSI, kemampuan perangkat bermuara pada perangkat itu sendiri, dan driver RAID yang terpasang pada drive Anda.

Mari kita lihat lebih dekat. Berikut adalah SSD (drive Samsung EVO 860 2Tb) yang terpasang ke konektor SATA pada sistem RHEL (kami akan menamai sistem tersebut System_A dalam sisa dokumen ini):

[root@System_A ~]# lsscsi 
[3:0:0:0]    disk    ATA      Samsung SSD 860  3B6Q  /dev/sda  

Berikut adalah drive yang identik (model yang sama, firmware yang sama) di belakang pengontrol RAID (PERC H730P) pada sistem yang berbeda (sebut saja sistem itu System_B dalam sisa dokumen ini):

[root@System_B ~]# lsscsi 
[0:2:0:0]    disk    DELL     PERC H730P Adp   4.30  /dev/sda  

Bagaimana saya tahu itu drive yang sama? Berkat penggunaan megaclisas-status, RAID HBA dapat ditanyakan. Ini menunjukkan ini:

[root@System_B ~]# megaclisas-status
-- Controller information --
-- ID | H/W Model          | RAM    | Temp | BBU    | Firmware     
c0    | PERC H730P Adapter | 2048MB | 60C  | Good   | FW: 25.5.7.0005 

-- Array information --
-- ID | Type   |    Size |  Strpsz |   Flags | DskCache |   Status |  OS Path | CacheCade |InProgress   
c0u0  | RAID-0 |   1818G |  512 KB | ADRA,WB |  Enabled |  Optimal | /dev/sda | None      |None         

-- Disk information --
-- ID   | Type | Drive Model                                      | Size     | Status          | Speed    | Temp | Slot ID  | LSI ID  
c0u0p0  | SSD  | S3YUNB0KC09340D Samsung SSD 860 EVO 2TB RVT03B6Q | 1.818 TB | Online, Spun Up | 6.0Gb/s  | 23C  | [32:0]   | 0    

Ya, itu adalah drive yang sama (Samsung EVO 860) dan firmware yang sama (3B6Q).

Menggunakan lsblk , kami akan memaparkan kemampuan DISCARD dari kedua perangkat tersebut:

[root@System_A ~]# lsblk -dD
NAME     DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda             0      512B       2G         1 
[root@System_B ~]# lsblk -dD
NAME      DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda              0        0B       0B         0 

Berikut pelakunya. Semua nilai adalah nol. SSD dalam RAID 0 di belakang PERC H730P pada System_B tidak mengekspos kemampuan DISCARD apa pun. Inilah alasan mengapa fstrim di System_B tidak melakukan atau mengembalikan apa pun.

Sistem HPQ SmartArray terpengaruh dengan cara yang sama. Berikut adalah HPE DL360Gen10 dengan kartu RAID SmartArray kelas atas:

[root@dl360gen10 ~]# lsblk -dD NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO sda         0        0B       0B         0 sdc         0        0B       0B         0 sdd         0        0B       0B         0 sde         0        0B       0B         0 sdf         0        0B       0B         0 sdg         0        0B       0B         0 sdh         0        0B       0B         0

Semua berbasis LSI (megaraid_sas driver) dan sistem berbasis SmartArray (driver hpsa) mengalami masalah ini. Jika Anda ingin TRIM SSD Anda, Anda harus mematikan System_B , tarik drive keluar, sambungkan ke sistem berkemampuan SAS/SATA, dan fstrim di sana.

Untungnya bagi kami, ada trik kecil untuk sementara mengekspos kemampuan asli perangkat Anda dan TRIM itu. Ini mengharuskan Anda menghapus aplikasi yang menggunakan drive RAID Anda, tetapi setidaknya Anda tidak perlu berjalan ke Pusat Data untuk mengeluarkan beberapa perangkat keras dari sistem.

Triknya adalah berhenti menggunakan drive RAID melalui driver RAID, paparkan SSD sebagai JBOD, pasang kembali sistem file, lalu TRIM di sana. Setelah BUANG blok, cukup masukkan drive kembali ke mode RAID, pasang sistem file, lalu mulai ulang aplikasi Anda.

Ada beberapa peringatan:

  • Perangkat keras RAID yang Anda gunakan harus mengizinkan perangkat untuk dimasukkan ke mode JBOD.
  • Anda tidak dapat melakukan ini pada disk boot karena akan memerlukan penghapusan OS.

Berjalan melalui proses

Berikut ini adalah panduan kecil yang dibuat pada sistem dengan Dell PERC H730P dan SSD Samsung. Kami akan menyebut sistem ini System_C .

1) SSD berada di [32:2] pada HBA a0 , dan kami akan membuat satu drive RAID 0 darinya:

[root@System_C ~]# MegaCli -CfgLdAdd -r0 [32:2] WB RA CACHED -strpsz 512 -a0 

2) Drive logis baru muncul sebagai /dev/sdd dan tidak menunjukkan kemampuan DISCARD:

[root@System_C ~]# lsblk -dD
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
[....]
sdd         0        0B       0B         0 

3) Selanjutnya, buat grup volume (VG), volume, dan sistem file 128G di atas perangkat itu:

[root@System_C ~]# parted /dev/sdd
[root@System_C ~]# pvcreate /dev/sdd1
[root@System_C ~]# vgcreate testdg /dev/sdd1
[root@System_C ~]# lvcreate -L 128G -n lv_test testdg
[root@System_C ~]# mount /dev/testdg/lv_test /mnt
[root@System_C ~]# mke2fs -t ext4 /dev/testdg/lv_test 
[root@System_C ~]# mount /dev/testdg/lv_test /mnt 

Demi demonstrasi ini, kami akan menyalin beberapa data ke /mnt .

4) Berhenti menggunakan sistem dan ekspor grup volume:

[root@System_C ~]# umount /mnt
[root@System_C ~]# vgchange -a n testdg
  0 logical volume(s) in volume group "testdg" now active
[root@System_C ~]# vgexport testdg
  Volume group "testdg" successfully exported 

5) Aktifkan mode JBOD di HBA:

[root@System_C ~]# MegaCli -AdpSetProp -EnableJBOD -1 -a0

Adapter 0: Set JBOD to Enable success.

Exit Code: 0x00 

6) Hapus drive logis dan buat drive JBOD. Pada sebagian besar pengontrol RAID, pemeriksaan keamanan mencegah Anda membuat JBOD dengan drive yang merupakan bagian dari volume logis:

[root@System_C ~]# MegaCli -PDMakeJBOD -PhysDrv[32:2] -a0

Adapter: 0: Failed to change PD state at EnclId-32 SlotId-2.

Exit Code: 0x01 

Solusinya di sini adalah menghapus volume logis. Ini adalah operasi logis sederhana, dan itu tidak akan menyentuh data kami. Namun, Anda harus menuliskan perintah yang digunakan untuk membuat larik RAID 0 terlebih dahulu.

[root@System_C ~]# MegaCli -CfgLdDel -L3 -a0
                                     
Adapter 0: Deleted Virtual Drive-3(target id-3)

Exit Code: 0x00
[root@System_C ~]# MegaCli -PDMakeJBOD -PhysDrv[32:2] -a0
                                     
Adapter: 0: EnclId-32 SlotId-2 state changed to JBOD.

Exit Code: 0x00 

7) Segarkan tampilan kernel dari disk dan impor data Anda:

[root@System_C ~]# partprobe
[root@System_C ~]# vgscan 
  Reading volume groups from cache.
  Found exported volume group "testdg" using metadata type lvm2
  Found volume group "rootdg" using metadata type lvm2

[root@System_C ~]# vgimport testdg
  Volume group "testdg" successfully imported

[root@System_C ~]# vgchange -a y testdg
  1 logical volume(s) in volume group "testdg" now active

[root@System_C ~]# mount /dev/testdg/lv_test /mnt

[root@System_C ~]# fstrim -v /mnt
/mnt: 125.5 GiB (134734139392 bytes) trimmed 

Kami telah membuang blok kosong pada sistem file kami. Mari kita masukkan kembali ke dalam drive logis RAID 0.

8) umount sistem file dan ekspor grup volume:

[root@System_C ~]# umount /mnt
[root@System_C ~]# vgchange -a n testdg
  0 logical volume(s) in volume group "testdg" now active
[root@System_C ~]# vgexport testdg
  Volume group "testdg" successfully exported 

9) Nonaktifkan mode JBOD pada pengontrol RAID:

[root@System_C ~]# MegaCli -AdpSetProp -EnableJBOD -0 -a0

Adapter 0: Set JBOD to Disable success.

Exit Code: 0x00 

10) Buat ulang drive logis Anda:

[root@System_C ~]# MegaCli -CfgLdAdd -r0 [32:2] WB RA CACHED -strpsz 512 -a0 

11) Minta kernel untuk memeriksa disk dan memasang kembali sistem file Anda:

[root@System_C ~]# partprobe
[root@System_C ~]# vgscan 
  Reading volume groups from cache.
  Found exported volume group "testdg" using metadata type lvm2
  Found volume group "rootdg" using metadata type lvm2

[root@System_C ~]# vgimport testdg
  Volume group "testdg" successfully imported

[root@System_C ~]# vgchange -a y testdg
  1 logical volume(s) in volume group "testdg" now active

[root@System_C ~]# mount /dev/testdg/lv_test /mnt 

Data Anda harus ada di sana, dan kinerja SSD Anda akan kembali ke angka aslinya.

[ Kursus online gratis:Tinjauan teknis Red Hat Enterprise Linux. ] 

Menutup

Berikut beberapa catatan tambahan:

  • Prosedur ini harus diambil dengan sebutir garam dan dengan peringatan besar:JANGAN lakukan ini kecuali Anda yakin dapat mengidentifikasi drive logis dan JBOD pada sistem Linux.
  • Saya hanya menguji prosedur ini menggunakan drive logis RAID 0. Tampaknya tidak mungkin berfungsi untuk jenis RAID lainnya (5, 6, 1+0, dll.) karena struktur sistem file akan disembunyikan dari OS Linux.
  • Jangan lakukan prosedur ini tanpa backup yang diverifikasi.

Linux
  1. Tip dan trik menggunakan CUPS untuk mencetak dengan Linux

  2. Menghapus file dengan rm menggunakan find dan xargs

  3. Mungkin untuk membuat SSD TRIM (buang) bekerja pada RAID perangkat lunak ext4 + LVM + di Linux?

  1. Aktifkan TRIM untuk SSD di Linux

  2. Pangkas Dengan Lvm Dan Dm-crypt?

  3. Menjalankan Script Dengan “. ” Dan Dengan “sumber”?

  1. Menggunakan Notify-send Dengan Cron?

  2. Ganti Baris Dengan Konten Lain Menggunakan Sed Dan Paralel Untuk File Besar?

  3. Menggunakan Bungkus Kata Dengan Mc?