Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi2:ssd

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

lpi2:ssd [2019/01/03 12:10]
lpi2:ssd [2021/12/30 08:22] (aktuell)
Zeile 1: Zeile 1:
 +====== SSDs anzeigen ======
 +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. ​
 +
 +===== alle Blockgeräte die discard unterstützen =====
 +z.B. virtio ((
 +<file xml>
 +<disk type="​file"​ device="​disk">​
 +  <driver name="​qemu"​ type="​qcow2"​ discard="​unmap"/>​
 +  <target dev="​vda"​ bus="​virtio"/>​
 +</​file>​
 +))
 +  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:'​
 +((
 +"__A discard_max_hw_bytes value of 0 means that the device does not support discard functionality.__"​
 +https://​www.kernel.org/​doc/​html/​latest/​block/​queue-sysfs.html#​discard-max-bytes-rw
 +))
 +====== Ganzen Inhalt einer Partition oder SSD löschen & TRIM auslösen ======
 +((Optional (damit man es besser sieht) Einsen auf die Partition schreiben:
 +  tr '​\0'​ '​\377'​ < /dev/zero | dd of=/​dev/​sda2 bs=1MiB status=progress
 +  fdisk -l /dev/sda
 +<file txt ausgabe>
 +Device ​    ​Boot ​    ​Start ​      ​End ​ Sectors ​  Size Id Type
 +
 +/​dev/​sda2 ​         444416 ​ 21415935 20971520 ​   10G 83 Linux
 +</​file>​
 +  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))
 +
 +Daten auf Partition ''/​dev/​sda2''​ löschen und [[WPDE>​TRIM]] auslösen:
 +  blkdiscard /dev/sda2
 +
 +((Prüfen:
 +  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))
 +
 +====== manuell freie Bereiche eines Dateisystems "​trimmen"​ ======
 +((Optional: 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
 +<file txt ausgabe>
 +0000000 ffff ffff ffff ffff ffff ffff ffff ffff
 +*
 +24000000
 +</​file>​
 +  hdparm --fibmap file1
 +<file txt ausgabe>
 +
 + ​byte_offset ​ begin_LBA ​   end_LBA ​   sectors
 +           ​0 ​  ​14874624 ​  ​14884863 ​     10240
 +</​file>​
 +  rm file1
 +  hdparm --read-sector 14874624 /dev/sda
 +  hdparm --read-sector 14884863 /dev/sda
 +-> sollte lauter Einsen ausgeben))
 +
 +freie Bereiche des Dateisystems unter ''/​mnt/​ext4''​ "​trimmen":​
 +  fstrim -v /mnt/ext4
 +<file txt ausgabe>
 +/mnt/ext4: 9,3 GiB (9950195712 bytes) trimmed
 +</​file>​
 +
 +((Prüfen:
 +  hdparm --read-sector 14874624 /dev/sda
 +  hdparm --read-sector 14884863 /dev/sda
 +-> sollte lauter Nullen ausgeben))
 +
 +===== regelmäßig "​trimmen"​ =====
 +Laut [[https://​wiki.debian.org/​SSDOptimization#​Mounting_SSD_filesystems|Debian Wiki]] ab Version 10 (Buster) nicht mehr nötig, unter Ubuntu 18.04 default:
 +  systemctl edit --force fstrim.timer
 +<file txt /​etc/​systemd/​system/​fstrim.timer>​
 +[Unit]
 +Description=Discard unused blocks once a week
 +Documentation=man:​fstrim
 +
 +[Timer]
 +OnCalendar=weekly
 +AccuracySec=1h
 +Persistent=true
 +
 +[Install]
 +WantedBy=timers.target
 +</​file>​
 +  systemctl cat fstrim.timer
 +
 +  systemctl edit --force fstrim.service
 +<file txt /​etc/​systemd/​system/​fstrim.service>​
 +[Unit]
 +Description=Discard unused blocks
 +
 +[Service]
 +Type=oneshot
 +ExecStart=/​sbin/​fstrim -av
 +</​file>​
 +  systemctl cat fstrim.service
 +
 +====== kontinuierlich freie Bereiche eines Dateisystems "​trimmen"​ ======
 +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
 +
 +((Prüfen:
 +  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
 +<file txt ausgabe>
 +0000000 ffff ffff ffff ffff ffff ffff ffff ffff
 +*
 +24000000
 +</​file>​
 +  hdparm --fibmap file1
 +<file txt ausgabe>
 +
 + ​byte_offset ​ begin_LBA ​   end_LBA ​   sectors
 +           ​0 ​  ​14874624 ​  ​14884863 ​     10240
 +</​file>​
 +  hdparm --read-sector 14874624 /dev/sda
 +  hdparm --read-sector 14884863 /dev/sda
 +-> sollte lauter Einsen ausgeben
 +  rm file1
 +  sync
 +
 +Prüfen: ​
 +  watch hdparm --read-sector 14874624 /dev/sda
 +-> sollte (spätestens nach ein paar Minuten) lauter Nullen ausgeben))
 +
 +====== kontinuierlich freie Bereiche im LVM "​trimmen"​ ======
 +Beim Löschen und verkleinern von Logical Volumes frei werdende Bereiche "​trimmen":​ ((
 +warum ist das nicht default?
 + 
 +Aus https://​bugs.debian.org/​cgi-bin/​bugreport.cgi?​bug=717313 :
 +"Even with the automatic backups of the lvm metadata, it is impossible to recover from the wrongly removed LV.  This is the reason why this feature is off by default."​ und "The discards commands will also be issued when shrinking or moving a LV to an other PV, if something is going wrong during these operations, the data will be lost. So it's not only when explicitly removing an LV."
 +
 +Alternative:​ so ähnlich wie man regelmäßig fstrim aufruft, kann man die leeren Blöcke einer Volume Group behandeln:
 +
 +<file txt /​etc/​systemd/​system/​fstrim.service.d/​vg.conf>​
 +[Service]
 +ExecStart=lvcreate -l100%FREE -n trim your_volume_group
 +ExecStart=blkdiscard /​dev/​your_volume_group/​trim
 +ExecStart=lvremove your_volume_group/​trim
 +</​file>​
 +))
 +<file txt /​etc/​lvm/​lvm.conf>​
 +
 +devices {
 +
 +issue_discards = 1
 +
 +}
 +</​file>​