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!