GNU/Linux >> Znalost Linux >  >> Linux

Použití TRIM a DISCARD s SSD připojenými k řadiči RAID

SSD jsou nyní běžnou záležitostí a posledních několik let byly výchozí volbou pro výkonově orientované disky v podnikovém a spotřebitelském prostředí. SSD jsou skvělé a rychlé, ale většina lidí na špičkových počítačích čelí tomuto dilematu:Můj SSD je za řadičem RAID, který nevystavuje možnosti zařízení DISCARD nebo TRIM. Jak odstraním bloky, aby byl zachován nejlepší výkon SSD? Zde je trik, jak to udělat, aniž byste museli stroj rozebírat. Nedávná vylepšení firmwaru SSD snížila nutnost použití DISCARD/TRIM aplikací zapisovajících na SSD.

Existují však některé případy, kdy možná budete potřebovat, aby souborový systém informoval jednotku o blocích, které zahodil. Možná máte disky TLC (3 bity na buňku) nebo QLC (4 bity na buňku) místo obvykle dražších disků SLC nebo MLC podnikové třídy (poslední jsou méně náchylné na pokles výkonu, protože odkládají více bloků navíc, aby vám pomohly s přepíše, když je disk zaplněn). Nebo jste možná kdysi zaplnili SSD na 100 % a nyní nemůžete získat původní výkon/IOPS zpět.

Na většině systémů je obnovení výkonu obvykle jednoduchou záležitostí vydání úpravy souborového systému (fstrim ) příkaz. Zde je příklad použití systému Red Hat Enterprise Linux (RHEL):

[root@System_A ~]# fstrim -av/export/home:130,5 GiB (140062863360 bajtů) oříznuto/var:26,1 GiB (28062511104 bajtů) oříznuto/opt:17,6 GiB/opt:17,6 GiB/140062863360 oříznuto/var:/sdíleno:31,6 GiB (33946275840 bajtů) oříznuto/usr/místní:5,6 GiB (5959331840 bajtů) oříznuto/spouštěno:678,6 MiB (711565312 bajtů) oříznuto/usr:383 mm ořezáno o 383 mm (383 mm) o 178,2 mm o 1101 trimed[root@System_A ~]# 

[ Čtenářům se také líbilo:Linuxový hardware:Převod na pevné disky (SSD) na ploše ]

Má to však jeden háček...

Pokud jsou vaše SSD disky za svazkem RAID připojeným k řadiči RAID (HPE SmartArray, Dell PERC nebo cokoliv založeného na LSI/Avago MegaRAID), stane se toto:

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

Prostě nic. Nic se nestane. Na konci řetězce SCSI I/O se možnosti zařízení scvrkají na samotné zařízení a ovladač RAID, ke kterému je váš disk připojen.

Pojďme se na to podívat blíže. Zde je SSD (disk Samsung EVO 860 2Tb) připojený ke konektoru SATA na systému RHEL (tento systém pojmenujeme System_A ve zbytku tohoto dokumentu):

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

Zde je identický disk (stejný model, stejný firmware) za řadičem RAID (PERC H730P) na jiném systému (říkejme tomu systému System_B ve zbytku tohoto dokumentu):

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

Jak poznám, že je to stejný disk? Díky použití megaclisas-status, lze dotazovat RAID HBA. Ukazuje toto:

[root@System_B ~]# megaclisas-status-- Informace o řadiči ---- ID | H/W model          | RAM    | Teplota | BBU    | Firmware     c0    | Adaptér PERC H730P | 2048 MB | 60C  | Dobrý   | FW:25.5.7.0005 - Informace pole ---- ID | Typ   | Velikost | Strpsz | Vlajky | DskCache | Stav | Cesta OS | CacheCade |InProgress   c0u0  | RAID-0 | 1818G | 512 kB | ADRA,WB | Povoleno | Optimální | /dev/sda | Žádné      |Žádné         -- Informace o disku ---- ID   | Typ | Model pohonu                                      | Velikost     | Stav          | Rychlost    | Teplota | ID slotu  | ID LSI  c0u0p0  | SSD  | S3YUNB0KC09340D Samsung SSD 860 EVO 2TB RVT03B6Q | 1,818 TB | Online, roztočeno | 6,0 Gb/s  | 23C  | [32:0]   | 0    

Ano, je to stejný disk (Samsung EVO 860) a stejný firmware (3B6Q).

Pomocí lsblk , ukážeme možnosti DISCARD těchto dvou zařízení:

[root@System_A ~]# lsblk -dDNAME     DISC-ALN DISC-GRAN DISC-MAX DISC-ZEROsda             0      512B       2G         1 
[root@System_B ~]# lsblk -dDNAME      DISC-ALN DISC-GRAN DISC-MAX DISC-ZEROsda              0        0B       0B         0 

Tady je viník. Všechny hodnoty jsou nulové. SSD v RAID 0 za PERC H730P na System_B nevystavuje žádné možnosti DISCARD. To je důvod, proč fstrim na System_B nic neudělal ani nevrátil.

Systémy HPQ SmartArray jsou ovlivněny podobným způsobem. Zde je HPE DL360Gen10 se špičkovou RAID kartou SmartArray:

[root@dl360gen10 ~]# lsblk -ddname Disc-aln Disc-Gran Disc-Zerosda 0 0B 0B 0SDC 0 0B 0B 0SDD 0 0B 0B 0SDE 0 0B 0B 0B 0B 0B 0B 0B 0 0. 0B         0sdh         0        0B       0B         0

Vše založené na LSI (megaraid_sas tímto problémem trpí systémy založené na SmartArray (ovladač hpsa). Pokud chcete své SSD ořezat, museli byste vypnout System_B , vytáhněte disk, připojte jej k systému s podporou SAS/SATA a fstrim tam.

Naštěstí pro nás existuje malý trik, jak dočasně odhalit nativní schopnosti vašeho zařízení a TRIM to. To vyžaduje odstranění aplikace, která používá váš disk RAID, ale alespoň to nevyžaduje, abyste chodili do DataCenter, abyste vytáhli nějaký hardware ze systému.

Trik je přestat používat disk RAID prostřednictvím ovladače RAID, vystavit SSD jako JBOD, znovu připojit souborový systém a poté jej tam TRIM. Jakmile zahodí bloky, jednoduše vložte disk zpět do režimu RAID, připojte souborový systém a poté restartujte aplikace.

Existuje několik upozornění:

  • Hardware RAID, který používáte, musí umožňovat uvedení zařízení do režimu JBOD.
  • Nemůžete to provést na spouštěcím disku, protože by to vyžadovalo odstranění operačního systému.

Procházení procesem

Zde je malý návod vytvořený na systému s Dell PERC H730P a Samsung SSD. Tento systém budeme nazývat System_C .

1) SSD je v [32:2] na HBA a0 a vytvoříme z něj jeden disk RAID 0:

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

2) Nový logický disk se objeví jako /dev/sdd a nevykazuje žádné možnosti DISCARD:

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

3) Dále na tomto zařízení vytvořte skupinu svazků (VG), svazek a souborový systém 128G:

[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 

Pro účely této ukázky zkopírujeme některá data do /mnt .

4) Přestaňte používat systém a exportujte skupinu svazků:

[root@System_C ~]# umount /mnt[root@System_C ~]# vgchange -a n testdg  0 logických svazků ve skupině svazků "testdg" je nyní aktivní[root@System_C ~]# vgexport testdg Skupina svazků "testdg" úspěšně exportována 

5) Povolte režim JBOD na HBA:

[root@System_C ~]# MegaCli -AdpSetProp -EnableJBOD -1 -a0Adapter 0:Nastavte JBOD na Enable success.Exit Code:0x00 

6) Smažte logickou jednotku a vytvořte na jednotce JBOD. Na většině řadičů RAID vám bezpečnostní kontroly brání ve vytvoření JBOD s jednotkou, která je součástí logického svazku:

[root@System_C ~]# MegaCli -PDMakeJBOD -PhysDrv[32:2] -a0Adaptér:0:Nepodařilo se změnit stav PD na EnclId-32 SlotId-2. Kód ukončení:0x01 

Řešením je odstranit logický svazek. Toto je jednoduchá logická operace, která se nedotkne našich dat. Nejprve si však musíte zapsat příkaz použitý k vytvoření pole RAID 0.

[root@System_C ~]# MegaCli -CfgLdDel -L3 -a0                                     Adaptér 0:Deleted Virtual Drive-3 (target id-3) -PMaothy_BOrv System -PMaothy_BOrv0 ~Cuit Code[:0x0rv0] [32:2] -a0                                     Adaptér:0:Stav EnclId-32 SlotId-2 změněn na JBOD. Výstupní kód:0x00 

7) Obnovte pohled jádra na disky a importujte svá data:

[root@System_C ~]# partprobe[root@System_C ~]# vgscan   Čtení skupin svazků z mezipaměti. Nalezena exportovaná skupina svazků „testdg“ pomocí typu metadat lvm2  Nalezena skupina svazků „rootdg“ pomocí typu metadat lvm2[root@System_C ~]# vgimport testdg  Skupina svazků „testdg“ úspěšně importována[root@System_C ~]# vgchange -a y testdg  1 logické svazek(y) ve skupině svazků "testdg" nyní aktivní[root@System_C ~]# mount /dev/testdg/lv_test /mnt[root@System_C ~]# fstrim -v /mnt/mnt:125,5 GiB (134734139392 bajtů) oříznuto  

Zahodili jsme prázdné bloky na našem souborovém systému. Vložme to zpět na logickou jednotku RAID 0.

8) umount souborový systém a exportujte skupinu svazků:

[root@System_C ~]# umount /mnt[root@System_C ~]# vgchange -a n testdg  0 logických svazků ve skupině svazků "testdg" je nyní aktivní[root@System_C ~]# vgexport testdg Skupina svazků "testdg" úspěšně exportována 

9) Vypněte režim JBOD na řadiči RAID:

[root@System_C ~]# MegaCli -AdpSetProp -EnableJBOD -0 -a0Adapter 0:Nastavte JBOD na Disable success.Exit Code:0x00 

10) Znovu vytvořte logickou jednotku:

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

11) Požádejte jádro, aby prozkoumalo disky a znovu připojilo váš souborový systém:

[root@System_C ~]# partprobe[root@System_C ~]# vgscan   Čtení skupin svazků z mezipaměti. Nalezena exportovaná skupina svazků „testdg“ pomocí typu metadat lvm2  Nalezena skupina svazků „rootdg“ pomocí typu metadat lvm2[root@System_C ~]# vgimport testdg  Skupina svazků „testdg“ úspěšně importována[root@System_C ~]# vgchange -a y testdg  1 logické svazky ve skupině svazků "testdg" jsou nyní aktivní[root@System_C ~]# připojení /dev/testdg/lv_test /mnt 

Vaše data by tam měla být a výkon vašeho SSD by se měl vrátit na původní hodnoty.

[ Bezplatný online kurz:Technický přehled Red Hat Enterprise Linux. ] 

Koneckonců

Zde je několik dalších poznámek:

  • Tento postup je třeba brát s rezervou a s velkým varováním:NEPROVÁDĚJTE to, pokud si nejste jisti, že dokážete identifikovat logické jednotky a JBOD v systému Linux.
  • Tento postup jsem testoval pouze s použitím logických jednotek RAID 0. Zdá se nepravděpodobné, že by fungoval pro jiné typy RAID (5, 6, 1+0 atd.), protože struktura souborového systému bude před OS Linux skryta.
  • Tento postup prosím neprovádějte bez ověřených záloh.

Linux
  1. Použití barev s printf

  2. najít a odstranit soubory s mezerou pomocí příkazu find v Linuxu

  3. Odstranění souborů pomocí rm pomocí find a xargs

  1. Povolte TRIM pro SSD v Linuxu

  2. Jak podložit soubor pomocí FF pomocí dd?

  3. Je možné, aby SSD TRIM (zahodit) fungoval na ext4 + LVM + softwarový RAID v Linuxu?

  1. Používáte Notify-Send s Cronem?

  2. Trim s Lvm a Dm-crypt?

  3. Spuštění skriptu s „. “ A se „zdrojem“?