====== discard (trim/unmap) ======
* [[https://wiki.archlinux.org/index.php/Solid_State_Drives#Trim_an_entire_device]]
* [[https://en.wikipedia.org/wiki/Trim_(computing)]]
* [[https://en.wikipedia.org/wiki/Wear_leveling]]
A legelső generációs SSD-ket leszámítva minden modern SSD támogatja a **discard** funkciót, amivel blokkokat lehet "üresnek" jelölni anélkül, hogy konkrétan kinulláznánk fizikailag.
Ennek két előnye van:
* Egyfelől nem öregítjük egy törléssel feleslegesen magát a memória modulokat
* Másfelől pedig egyértelműen jelöljük az SSD vezérlője felé, hogy ezek a területek szabadok. Így a vezérlő ezt a területet is igénybe fogja venni "wear leveling"-re az élettartam kiterjesztése érdekében.
ATA csatolón ''trim'', SCSI csatolón ''unamp'' a kiadott vezérlő parancs neve
===== Hardware támogatás ellenőrzése =====
hdparm -I /dev/sda | grep TRIM
===== Hardware inkompatibilitás =====
... avagy **Samsung SSD 8xx** hiba
- ''dmesg'':
ata1.00: status: { DRDY }
ata1.00: failed command: WRITE FPDMA QUEUED
ata1.00: cmd 61/10:e8:80:7e:14/00:00:1a:00:00/40 tag 29 ncq 8192 out
res 40/00:08:e8:7e:14/00:00:1a:00:00/40 Emask 0x10 (ATA bus error)
ata1.00: status: { DRDY }
ata1.00: failed command: WRITE FPDMA QUEUED
ata1.00: cmd 61/08:f0:98:7e:14/00:00:1a:00:00/40 tag 30 ncq 4096 out
res 40/00:08:e8:7e:14/00:00:1a:00:00/40 Emask 0x10 (ATA bus error)
ata1.00: status: { DRDY }
ata1: hard resetting link
ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
ACPI Error (psargs-0359): [DSSP] Namespace lookup failure, AE_NOT_FOUND
ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.SPT0._GTF] (Node ffff88081c8e9d58), AE_NOT_FOUND
ata1.00: supports DRM functions and may not be fully accessable.
ACPI Error (psargs-0359): [DSSP] Namespace lookup failure, AE_NOT_FOUND
ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.SAT0.SPT0._GTF] (Node ffff88081c8e9d58), AE_NOT_FOUND
ata1.00: supports DRM functions and may not be fully accessable.
ata1.00: configured for UDMA/133
ata1: EH complete
- a https://serverfault.com/a/244975/122703 segítségével kiderült, hogy az ''ata1.00'' == ''scsi0 id 0'' == **''sda''**, ez a disk pedig lshw -class disk -short
H/W path Device Class Description
=======================================================
/0/100/1f.2/0 /dev/sda disk 512GB Samsung SSD 860
/0/100/1f.2/1 /dev/cdrom disk CDDVDW SH-S223C
/0/100/1f.2/2 /dev/sdb disk 500GB WDC WD5003AZEX-0
/0/100/1f.2/3 /dev/sdc disk 1TB WDC WD1003FBYZ-0
/0/100/1f.2/4 /dev/sdd disk 1TB WDC WD1003FBYX-0
/0/100/1f.2/5 /dev/sde disk 1TB WDC WD1003FBYX-0
/0/5/0.0.0 /dev/sdf disk 2TB EZRX-00D8PB0
/0/6/0.0.0 /dev/sdg disk 6001GB EZRX-00MVLB1
- Így látszik, hogy az SSD-vel van gond:
* https://bugzilla.kernel.org/show_bug.cgi?id=203475
* https://meterpreter.org/linux-kernel-disables-samsung-860-870-ssd-trim-and-ncq/
- Emiatt tanácsos kernel paraméterrel kikapcsolni az //QUEUED TRIM//-et erre az eszközre:
GRUB_CMDLINE_LINUX_DEFAULT="... libata.force=1.00:noncqtrim"
===== SSD-s rendszer beállítása =====
^ Alrendszer ^ Config fájl ^ Beállítás |
^ dm-crypt (luks) | ''/etc/crypttab'' | ''discard'' mount opció |
^ lvm | ''/etc/lvm/lvm.conf'' | ''issue_discards = 1'' beállítás |
^ fs | ''/etc/fstab'' | ''discard'' mount opció |
Titkosított lemezen / fájlrendszeren való **discard** növeli az SSD élettartamát, de gyengíti a titkosítást!
===== Alkalom szerű TRIM-elés =====
Ha a fájlrendszer valamilyen okból kifolyólag nem **discard** opcióval van felcsatolva, hasznos lehet időnként a szabad területeket felszabadítani az SSD számára.
Minden kötet TRIM-elése:
fstrim -av
===== Teljes SSD törlése =====
Használhatjuk a TRIM-et teljes háttértároló "SSD-barát" kiürítésére is:
blkdiscard -v /dev/sda
Ez a művelet nem vonható vissza semmilyen adatvisszaállító programmal!