Raspberry Pi SSD Trim

Da ich meinen Raspberry Pi mit einer SSD betreibe, möchte ich natürlich auch das die SSD lange lebt. Stichwort Wear Leveling.

Als Adapter hab ich zwei Stück in Verwendung.

  1. IcyBox (Schwarz)
    • idVendor 0x174c ASMedia Technology Inc.
    • idProduct 0x5136 ASM1053 SATA 3Gb/s bridge
    • bcdDevice 0.01
    • iManufacturer 2 ASMedia
    • iProduct 3 AS2105
  2. Renkforce (Weis)
    • idVendor 0x174c ASMedia Technology Inc.
    • idProduct 0x1153 ASM1153 SATA 3Gb/s bridge
    • bcdDevice 0.01
    • iManufacturer 2 ASMedia
    • iProduct 3 AS2115

Wenn man ohne Einstellungen versucht einen fstrim zu machen.
Wird nur die SD Card in getrimmt. Und da da nur /boot drauf ist, ändert sich da nicht all zufiel und es macht wenig Sinn.

sudo fstrim --fstab --verbose
/boot: 188.1 MiB (197267968 bytes) trimmed on /dev/mmcblk0p6

Beim Rasbian strech ist es

sudo fstrim -a --verbose

Als erstes schauen wir wo der Adapter angesteckt ist.
Ich habe es sowohl an dem USB2 als auch an dem USB3 Port getestet.
Nach den Einstellungen funktioniert TRIM / Discard sowohl an USB2 als auch an USB3.

sudo lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
     |_ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M 
        |_ Port 4: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M

Hier sehen wir das der USB Adapter am USB2.0 Port mit nur 480M steckt.
Wenn wir ihn auf den USB3 umstecken dann haben wir den 5000M

Wir benötigen aber die Infos zum Hersteller (idVendor) und Produkt (idProduct)
Dies können wir ganz einfach per lsusb auslesen

IcyBox an USB2.0

sudo lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 174c:5136 ASMedia Technology Inc. ASM1053 SATA 3Gb/s bridge
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Hier ist die gewünschte Information
Bus 001 Device 003: ID 174c:5136 ASMedia Technology Inc. ASM1053 SATA 3Gb/s bridge

Wer mehr Details haben will

lsusb -v -s 1:3
Bus 001 Device 003: ID 174c:5136 ASMedia Technology Inc. ASM1053 SATA 3Gb/s bridge
 Device Descriptor:
   bLength                18
   bDescriptorType         1
   bcdUSB               2.10
   bDeviceClass            0
   bDeviceSubClass         0
   bDeviceProtocol         0
   bMaxPacketSize0        64
   idVendor           0x174c ASMedia Technology Inc.
   idProduct          0x5136 ASM1053 SATA 3Gb/s bridge
   bcdDevice            0.01
   iManufacturer           2 ASMedia
   iProduct                3 AS2105
   iSerial                 1 00000000000000000000
   bNumConfigurations      1
   Configuration Descriptor:
.
.
.

Renkforce am USB3

sudo lsusb
Bus 002 Device 002: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA 3Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Hier ist die gewünschte Information
Bus 002 Device 002: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA 3Gb/s bridge

Wer mehr Details haben will

sudo lsusb -v -s 2:2
Bus 002 Device 002: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA 3Gb/s bridge
 Device Descriptor:
   bLength                18
   bDescriptorType         1
   bcdUSB               3.00
   bDeviceClass            0
   bDeviceSubClass         0
   bDeviceProtocol         0
   bMaxPacketSize0         9
   idVendor           0x174c ASMedia Technology Inc.
   idProduct          0x1153 ASM1153 SATA 3Gb/s bridge
   bcdDevice            0.01
   iManufacturer           2 ASMedia
   iProduct                3 AS2115
   iSerial                 1 00000000000000000000
   bNumConfigurations      1
   Configuration Descriptor:
.
.
.

Udev rule erstellen

Mit diesen Infos erstellen wir eine Udev Rule.
Und geben da die idVendor und idProduct ein.

sudo nano /etc/udev/rules.d/10-trim_umap.rules
ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="5136", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"

(kein zeilenumbruch)
Abspeichern und neu starten.

Nach dem Neustart probieren wir den fstrim erneut, und siehe da es geht.

fstrim --fstab --verbose
/mnt/backup: 0 B (0 bytes) trimmed on /dev/vg1/backup
/var/lib/influxdb: 0 B (0 bytes) trimmed on /dev/vg1/influxdb
/var/log: 4.9 GiB (5190520832 bytes) trimmed on /dev/vg1/varlog
/boot: 188.1 MiB (197267968 bytes) trimmed on /dev/mmcblk0p6

Wer das Trim / Discart automatisch haben will der fügt das in die /etc/fstab ein. Bei mir schaut so aus

proc                    /proc               proc    defaults         0       0
/dev/mmcblk0p6          /boot               vfat    defaults,discard 0       2
/dev/vg1/swap           none                swap    sw,discard       0       0
/dev/vg1/root           /                   ext4    defaults,noatime,nodiratime,discard     0       1
/dev/vg1/varlog         /var/log            ext4    defaults,noatime,nodiratime,discard     0       1
/dev/vg1/influxdb       /var/lib/influxdb   f2fs    defaults,noatime,nodiratime,discard     0       2
/dev/vg1/backup         /mnt/backup         f2fs    defaults,noatime,nodiratime,discard     0       2

bei mir funktioniert es sowohl beim Raspberry Pi 3b+ als auch beim 4er.
Egal ob USB2 oder 3

Was mit aufgefallen ist wenn ich ein neues LV anlege und dann mounte sagt dmesg

[Sun Mar  1 21:41:04 2020] EXT4-fs (dm-4): mounting with "discard" option, but the device does not support discard
[Sun Mar  1 21:41:04 2020] EXT4-fs (dm-4): mounted filesystem with ordered data mode. Opts: discard

Aber sobald ich einmal neu gestartet habe kommt der Fehler nicht mehr und das LV wird auch getrimmt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*