Dateien erstellt und dann jede Sekunde im tmp-Verzeichnis gelöscht

13

Aus Versehen ist mir aufgefallen, dass im Verzeichnis / tmp ständig einige Dateien angelegt und dann sofort gelöscht werden. Mit einer Abfolge von ls -l /tmpgelang es mir, die erstellten Dateien zu fangen:

-rw------- 1 root root       0 Apr  2 19:37  YlOmPA069G
-rw------- 1 root root       0 Apr  2 19:37  l74jZzbcs6

oder ein anderes Beispiel:

-rw------- 1 root root       0 Apr  2 19:44  AwVhWakvQ_
-rw------- 1 root root       0 Apr  2 19:44  RpRGl__cIM
-rw------- 1 root root       0 Apr  2 19:44  S0e72nkpBl
-rw------- 1 root root       0 Apr  2 19:44  emxIQQMSy2

Es geht um Ubuntu 18.10 mit 4.18.0-16-Generic. Dies ist eine fast neue Installation: Ich habe einige Server-Software (nginx, mysql, php7.2-fpm) hinzugefügt, aber auch bei diesen ist das Problem weiterhin vorhanden.

Welche Dateien werden erstellt und warum? Wie würde ich dieses Verhalten beenden? eine sehr unerwünschte auf einer SSD

Vielen Dank!

AKTUALISIEREN

Die Frage ist, wann / tmp nicht im RAM ist (keine tmpfs ).
Die schuldige Software ist x2goserver.service, sonst muss man sie haben .

adrhc
quelle
2
"eine sehr unerwünschte auf einer SSD" erklären dies bitte? Sie haben / tmp nicht als tmpfs? warum nicht? warum sollten dateien im speicher eine ssd beschädigen?
Rinzwind
2
/ tmp muss nicht unbedingt tmpfs sein, es ist also eine gültige Frage
Colin Ian King
2
Ja, es wäre auf einer SSD unerwünscht, wenn die Verzeichnis-Metadaten tatsächlich auf die Festplatte zurückgeschrieben würden, anstatt nur im Cache zu bleiben. Dies ist der Grund, warum /tmpnormalerweise tmpfs verwendet wird (ein Ramdisk-Dateisystem, das den Pagecache als Hintergrundspeicher verwendet). Sie haben Ihre Frage mit tmpfs markiert , sodass Ihre Kommentare zu SSDs unangebracht zu sein scheinen.
Peter Cordes
1
toll - es ist ein Muss
Adrhc
2
@PeterCordes Ich bin mir nicht sicher, ob die Aussage " /tmpist normalerweise auf tmpfs" für einen normalen Ubuntu-Benutzer gültig ist - Wenn Sie nur die Standard-Ubuntu-Installation verwenden, /tmpbefindet sie sich auf der Festplatte und das OP müsste die entsprechenden fstab-Einträge erstellen, um sie in ein zu setzen tmpfs
Charles Green

Antworten:

17

Ich schlage vor, fnotifystat zu installieren und auszuführen, um den Prozess zu erkennen, der diese Dateien erstellt:

sudo apt-get install fnotifystat
sudo fnotifystat -i /tmp

Sie werden einen Prozess sehen, der die folgende Aktivität zum Öffnen / Schließen / Lesen / Schreiben ausführt:

Total   Open  Close   Read  Write   PID  Process         Pathname
  3.0    1.0    1.0    0.0    1.0   5748 firefox         /tmp/cubeb-shm-5748-input (deleted)
  2.0    0.0    1.0    0.0    1.0  18135 firefox         /tmp/cubeb-shm-5748-output (deleted)
  1.0    1.0    0.0    0.0    0.0   5748 firefox         /tmp/cubeb-shm-5748-output (deleted)
Colin Ian King
quelle
3
Nachtrag: Ich bin der Autor dieses Tools: kernel.ubuntu.com/~cking/fnotifystat
Colin Ian King
1
Und Sie sind auch der erste, der die Frage beantwortet hat (obwohl das nicht mehr sichtbar ist). Es ist übrigens ein gutes Werkzeug.
Adrhc
+1 für ein sehr handliches Dienstprogramm. /tmp/...Zum richtigen Zeitpunkt, da ich damit mein nächstes Projekt überwachen kann, bei dem ich Dateien für IPC zwischen Dämon und Benutzerbereich anstelle von komplizierteren DBUS erstellen soll.
WinEunuuchs2Unix
8

Bestimmen Sie, welches Programm / welcher Prozess Dateien berührt

Sie können Tools verwenden, um lsofzu bestimmen, welche Prozesse und Binärdateien welche Dateien berühren / öffnen. Dies kann problematisch werden, wenn sich die Dateien häufig ändern. Sie können stattdessen eine Überwachung einrichten, um Sie zu benachrichtigen:

$ sudo fnotifystat -i /tmp

Manchmal gibt ein einfacher Blick auf den Benutzer oder den Gruppenbesitzer einen guten Hinweis (zB:) ls -lsha.


Setzen Sie /tmpin den RAM statt Platte

Wenn Sie möchten, können Sie Ihr /tmpVerzeichnis in den Arbeitsspeicher stellen. Sie müssen anhand des verfügbaren Arbeitsspeichers sowie der Größe und Häufigkeit der Lese- / Schreibvorgänge feststellen, ob dies ein intelligenter Vorgang ist.

$ sudo vim /etc/fstab

...
# tmpfs in RAM
tmpfs         /tmp         tmpfs         defaults,noatime,mode=1777      0 0
...
$ sudo mount /tmp
$ mount | grep tmp # Check /tmp is in RAM
tmpfs on /tmp type tmpfs (rw,noatime)

Wenn Sie über genügend RAM verfügen, kann dies sowohl für die Langlebigkeit Ihrer SSD als auch für die Geschwindigkeit Ihres Systems als eine sehr gute Maßnahme angesehen werden. Sie können dies sogar mit weniger RAM erreichen, wenn Sie tmpreaper(manchmal tmpwatch) aggressiver vorgehen .

ErdeMeLon
quelle
6

sehr unerwünscht auf einer SSD

Sie haben Ihre Frage mit markiert , daher ist mir nicht ganz klar, wie dies mit SSD zusammenhängt. Tmpfs ist ein In-Memory-Dateisystem (oder genauer gesagt ein In-Block-Cache-Dateisystem), sodass es niemals auf eine physische Festplatte stößt.

Selbst wenn Sie über einen physischen Sicherungsspeicher für Ihr /tmpDateisystem verfügten, werden diese kurzlebigen Dateien niemals die Festplatte beschädigen, alle Vorgänge werden im Cache ausgeführt, es sei denn, Sie verfügen über ein System mit nur wenigen Kilobyte RAM.

Mit anderen Worten, es gibt nichts, worüber Sie sich Sorgen machen müssten, da Sie tmpfs verwenden. Andernfalls gibt es immer noch nichts, worüber Sie sich Sorgen machen müssten.

Jörg W. Mittag
quelle
Ich behalte das / tmp im RAM, so dass ich versehentlich auch mit meinem aktuellen fs-Typ (tmpfs) getaggt habe. Ich habe es jetzt entfernt, aber ich finde, dass Sie auch eine nützliche Antwort haben.
Adrhc
@adrhc: Wenn Sie /tmpsich im RAM befinden, hat dies überhaupt nichts mit Ihrer SSD zu tun, daher ist dies weder wünschenswert noch unerwünscht, sondern steht tatsächlich in keinerlei Zusammenhang.
Jörg W Mittag
Ich stimme zu, aber die Frage ist, ob / tmp nicht im RAM ist. Es ist einfach passiert, dass ich / tmp im RAM hatte; Trotzdem faszinierte mich das Problem.
Adrhc
0

Die Leute machen sich zu viele Sorgen um die Schreibfestigkeit von SSDs. Angenommen, das Erstellen und Löschen einer leeren Datei schreibt 24 KB pro Sekunde und die Verwendung der 150-TBW-Spezifikation für das beliebte Samsung 860 EVO 250 GB beansprucht 193 Jahre!

(150 * 10 ^ 12) / ((2 * 3 * 4 * 1024) * 60 * 60 * 24 * 365,25) = 193

Verwenden Sie für ext4-Dateisysteme "tune2fs -l", um Lifetime-Schreibvorgänge zu finden. Oder verwenden Sie "smartctl -a" und suchen Sie nach Total_LBAs_Written. Ich finde immer, dass die SSD noch viel Leben hat.

Fraser Gunn
quelle
Die Frage lautet: "Wie werden die Dateien erstellt und warum? Wie kann ich dieses Verhalten beenden?", Wie passt Ihre "Antwort" zur Frage?
Bummi
Obwohl ich die Frage nicht direkt beantworte, finde ich diese Informationen auch nützlich, obwohl sie im Zusammenhang mit der Verwendung dieser Befehle nicht sehr genau sind. ZB mit tune2fs bekomme ich tune2fs: Bad magic number in super-block while trying to open /dev/nvme0n1 Found a gpt partition table in /dev/nvme0n1.
Adrhc
0

Sie haben den falschen /dev/nvme0...Namen verwendet:

$ sudo tune2fs -l /dev/nvme0n1
tune2fs 1.42.13 (17-May-2015)
tune2fs: Bad magic number in super-block while trying to open /dev/nvme0n1
Couldn't find valid filesystem superblock.

Das richtige Format ist:

$ sudo tune2fs -l /dev/nvme0n1p6
tune2fs 1.42.13 (17-May-2015)
Filesystem volume name:   New_Ubuntu_16.04
Last mounted on:          /
Filesystem UUID:          b40b3925-70ef-447f-923e-1b05467c00e7
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              2953920
Block count:              11829504
Reserved block count:     534012
Free blocks:              6883701
Free inodes:              2277641
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1021
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8160
Inode blocks per group:   510
Flex block group size:    16
Filesystem created:       Thu Aug  2 20:14:59 2018
Last mount time:          Thu Apr  4 21:05:29 2019
Last write time:          Thu Feb 14 21:36:27 2019
Mount count:              377
Maximum mount count:      -1
Last checked:             Thu Aug  2 20:14:59 2018
Check interval:           0 (<none>)
Lifetime writes:          4920 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       1308352
Default directory hash:   half_md4
Directory Hash Seed:      a179d56c-6c68-468c-8070-ffa5bb7cd973
Journal backup:           inode blocks

So weit die Lebensdauer der NVMe-SSD reicht:

$ sudo nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning                    : 0
temperature                         : 38 C
available_spare                     : 100%
available_spare_threshold           : 10%
percentage_used                     : 0%
data_units_read                     : 22,351,778
data_units_written                  : 14,667,833
host_read_commands                  : 379,349,109
host_write_commands                 : 127,359,479
controller_busy_time                : 952
power_cycles                        : 1,925
power_on_hours                      : 1,016
unsafe_shutdowns                    : 113
media_errors                        : 0
num_err_log_entries                 : 598
Warning Temperature Time            : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1                : 38 C
Temperature Sensor 2                : 49 C
Temperature Sensor 3                : 0 C
Temperature Sensor 4                : 0 C
Temperature Sensor 5                : 0 C
Temperature Sensor 6                : 0 C
Temperature Sensor 7                : 0 C
Temperature Sensor 8                : 0 C

Die Schlüsselzeile hier ist:

percentage_used                     : 0%

Nach 18 Monaten Gebrauch beträgt der SSD-Prozentsatz 0%. Wenn es nach 3 Jahren 1% erreicht, weiß ich, dass die SSD 300 Jahre hält.

Offensichtlich würde diese Antwort nicht in den Kommentarbereich passen, um auf andere Kommentare zu antworten.

WinEunuuchs2Unix
quelle
Welcher Teil der Ausgabe von tune2fs bezieht sich auf die Lebensdauer der SSD?
ADRHC
@adrhc Ich habe die richtige Art des Anrufs gezeigt, tune2fsals Antwort auf Ihren Kommentar zu Fraser Gunns Antwort mit einer Fehlermeldung.
WinEunuuchs2Unix