Frage discard/TRIM bei UCS4.1 + LVM

ucs-4-1
german
lvm

#1

Hallo zusammen,

Ich mag verstehen warum discard unter UCS4.1 bei mir nicht funktioniert wenn LVM benutzt wird, was laut meinem Verständnis eigentlich funktionieren sollte.

Ziel: Ausschließlich Erkenntnisgewinn. Ich möchte herausfinden ob der unten beschriebene Fehler an meinem Setup, oder an UCS4.1, oder schlicht an einem falschen Verständnis der Zusammenhänge liegt.

Worum geht es? Es geht um TRIM/discard, also das was viele von Euch in Zusammenhang mit SSDs kennen. Ich benutze hier bei virtuellen Maschinen, um Platz zu sparen, wenn diese via “thin provision”, aufgesetzt sind.
Kurz: Wenn die VM qcow2, zfs oder thin-lvm als backing storage benutzt.

Wer jetzt Bahnhof versteht: Ich habe einen Artikel darüber geschrieben, der das hoffentlich einigermaßen verständlich erklärt: https://belug.de/howtos-using_trim_inside_virtual_machines.html

Bei meinen Versuchen hat sich jedenfalls herausgestellt, dass UCS4.1 discard nicht unterstützt, wenn ein LVM benutzt wird, jedoch sehr wohl, wenn man “klassisch” sein Dateisystem direkt auf eine Partition knallt.

So weit - so schlecht. Nicht weil discard nicht funktioniert, das ist mir schlicht egal, schließlich gibt es UCS4.2, und da tut ja alles. Mich wurmt, und das richtig dolle, das ich nicht verstehe warum es nicht bei UCS4.1 funktioniert!

Warum ich denke das discard auch bei UCS4.1 mit LVM funktionieren sollte: LVM2 nutzt seit Kernel 2.6 den device mapper, und bei diesem wurde mit Kernel 2.6.36 der discard-support einprogrammiert. Das ist jetzt schon wieder fast 7 Jahre her, deshalb mal der Link dazu: https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-2-6-36-1102066.html?seite=3

Nun, UCS4.1 hat momentan Kernel 4.1.6, also mehr als ausreichend um TRIM/discard mit LVM zu unterstützen.
Meine Versuche zeigen jedoch: noop, tut er nicht. Kann mir jemand bei der Erklärung helfen? Jeder Hinweis wird gerne genommen.

Beste Grüße Lutz


#2

Die Frage hat sich erledigt: Ich habe das Szenario jetzt mit einem frisch installiertem UCS4.1 nachgestellt; dort funktioniert alles wie es soll. Fürs Protokoll:

Testsystem

root@ucs-3026:~# uname -a
Linux ucs-3026 4.1.0-ucs222-amd64 #1 SMP Debian 4.1.6-1.222.201701250821 (2017-01-25) x86_64 GNU/Linux

root@ucs-3026:~# ucr search version/version version/patchlevel version/errata |grep '^v'
version/erratalevel: 429
version/patchlevel: 4
version/version: 4.1

root@ucs-3026:~# lsblk -o NAME,MOUNTPOINT,DISC-MAX,FSTYPE
NAME                     MOUNTPOINT DISC-MAX FSTYPE
sda                                       1G
├─sda1                   /boot            1G ext2
├─sda2                                    1G
└─sda5                                    1G LVM2_member
  ├─vg_ucs-root (dm-0)   /                1G ext4
  └─vg_ucs-swap_1 (dm-1) [SWAP]           1G swap
sr0                                       0B iso9660

TEST

[root@host ~]# du -hs *.qcow2
3.1G    vm-101-disk-1

root@ucs-3026:~# dd if=/dev/urandom of=/bigfile count=1000 bs=1M ; rm /bigfile

[root@host ~]# du -hs *.qcow2
3.9G    vm-101-disk-1.qcow2

root@ucs-3026:~# for i in $(lsblk -o MOUNTPOINT,DISC-MAX|awk '/^\/.* [1-9]+.*/{print$1}');do fstrim -v "$i";done
/boot: 0 bytes were trimmed
/: 1250979840 bytes were trimmed

[root@host ~]# du -hs *.qcow2
3.1G    vm-101-disk-1.qcow2

Wie zu sehen funktioniert TRIM/discard unter UCS4.1 und LVM doch genau wie erwartet.

Gruß Lutz