<disk type="file" device="disk"> <driver name="qemu" type="qcow2" discard="unmap"/> <target dev="vda" bus="virtio"/>
Anzeigen, welche Blockdevices auf rotierenden Geräten (z.B. magnetische Festplatten) liegen und welche nicht (z.B. SSDs):
lsblk -o NAME,ROTA
Geräte mit 1 in der Spalte „ROTA“ liegen auf rotierenden Geräten, Geräte mit 0 nicht.
z.B. virtio 1)
lsblk -bo NAME,DISC-MAX
oder
grep -vxl 0 /sys/block/*/queue/discard_max_hw_bytes | sed -r 's:/sys/block/(.*)/queue/discard_max_hw_bytes:/dev/\1:'
freie Bereiche des Dateisystems unter /mnt/ext4
„trimmen“:
fstrim -v /mnt/ext4
/mnt/ext4: 9,3 GiB (9950195712 bytes) trimmed
Ab Debian 10 und Ubuntu 18.04 default:
systemctl edit --force fstrim.timer
[Unit] Description=Discard unused blocks once a week Documentation=man:fstrim [Timer] OnCalendar=weekly AccuracySec=1h Persistent=true [Install] WantedBy=timers.target
systemctl cat fstrim.timer
systemctl edit --force fstrim.service
[Unit] Description=Discard unused blocks [Service] Type=oneshot ExecStart=/sbin/fstrim -av
systemctl cat fstrim.service
TODO: verlangsamt laut diversen Webseiten die Geschwindigkeit in der Dateien gelöscht werden, da nach dem Löschen jeder Datei die SSD informiert wird → prüfen
mount -o discard /dev/sda2 /mnt/ext4
7) BTRFS: „Since kernel 6.2 the discard=async mount option is automatically enabled on devices that support that“ → „freed file extents are first tracked in memory and after a period or enough ranges accumulate the trim is started, expecting the ranges to be much larger and allowing to throttle the number of IO requests which does not interfere with the rest of the filesystem activity“
Beim Löschen und verkleinern von Logical Volumes frei werdende Bereiche „trimmen“: 8)
… devices { … issue_discards = 1 … }
<disk type="file" device="disk"> <driver name="qemu" type="qcow2" discard="unmap"/> <target dev="vda" bus="virtio"/>
tr '\0' '\377' < /dev/zero | dd of=/dev/sda2 bs=1MiB status=progress fdisk -l /dev/sda
Device Boot Start End Sectors Size Id Type … /dev/sda2 444416 21415935 20971520 10G 83 Linux
hdparm --read-sector 444416 /dev/sda hdparm --read-sector 21415935 /dev/sda→ sollte lauter Einsen anzeigen TODO: hier prüfe ich nur den ersten und den letzten Sektor, besser wäre ein Test ob alle Sektoren Einsen enthalten
hdparm --read-sector 444416 /dev/sda hdparm --read-sector 21415935 /dev/sda→ sollte lauter Nullen anzeigen TODO: hier prüfe ich nur den ersten und den letzten Sektor, besser wäre ein Test ob alle Sektoren Nullen enthalten
tr '\0' '\377' < /dev/zero | dd of=file1 count=100 bs=512k iflag=fullblock oflag=direct od -x file1
0000000 ffff ffff ffff ffff ffff ffff ffff ffff * 24000000
hdparm --fibmap file1
… byte_offset begin_LBA end_LBA sectors 0 14874624 14884863 10240
rm file1 hdparm --read-sector 14874624 /dev/sda hdparm --read-sector 14884863 /dev/sda→ sollte lauter Einsen ausgeben
hdparm --read-sector 14874624 /dev/sda hdparm --read-sector 14884863 /dev/sda→ sollte lauter Nullen ausgeben
Datei mit lauter Einsen anlegen und wieder löschen: tr '\0' '\377' < /dev/zero | dd of=file1 count=100 bs=512k iflag=fullblock oflag=direct od -x file1
0000000 ffff ffff ffff ffff ffff ffff ffff ffff * 24000000
hdparm --fibmap file1
… byte_offset begin_LBA end_LBA sectors 0 14874624 14884863 10240
hdparm --read-sector 14874624 /dev/sda hdparm --read-sector 14884863 /dev/sda→ sollte lauter Einsen ausgeben
rm file1 syncPrüfen:
watch hdparm --read-sector 14874624 /dev/sda→ sollte (spätestens nach ein paar Minuten) lauter Nullen ausgeben
[Service] ExecStart=lvcreate -l100%FREE -n trim your_volume_group ExecStart=blkdiscard /dev/your_volume_group/trim ExecStart=lvremove your_volume_group/trim