Immer wenn ich Linux auf meinem Heimcomputer aktualisiere, habe ich eine Liste mit Aufgaben, die ich normalerweise erledige. Sie sind im Laufe der Jahre zu Gewohnheiten geworden:Ich sichere meine Dateien, lösche das System, installiere von Grund auf neu, stelle meine Dateien wieder her und installiere dann meine bevorzugten zusätzlichen Anwendungen neu. Ich mache auch ein paar Systemanpassungen. Ich mache einige dieser Anpassungen schon so lange, dass ich mich kürzlich gefragt habe, ob ich sie noch machen muss.
Eine Anpassung ist atime
, das ist einer der drei Zeitstempel für jede Datei unter Linux (dazu später mehr). Insbesondere habe ich mich gefragt, ob es sich noch lohnt, atime
zu deaktivieren in neueren Linux-Systemen. Seit atime
jedes Mal aktualisiert wird, wenn auf die Datei zugegriffen wird, hatte ich nach meinem Verständnis einen erheblichen Einfluss auf die Systemleistung.
Ich habe kürzlich meinen Computer auf Fedora 32 aktualisiert und atime
deaktiviert auf meinem aufgerüsteten System aus Gewohnheit. Aber musste ich das noch? Ich beschloss, es weiter zu untersuchen. Hier ist, was ich gefunden habe.
Ein bisschen über Dateizeitstempel
Um noatime
zu verstehen , müssen Sie einen Schritt zurücktreten und ein paar Dinge über Linux-Dateisysteme verstehen und wie der Kernel Zeitstempel auf Dateien und Verzeichnisse anwendet. Sie kennen wahrscheinlich bereits das Datum der letzten Änderung von Dateien und Verzeichnissen. Sie können das in einem ls -l
sehen (lange) Verzeichnisliste oder wenn Sie sich Dateidetails in einem Dateimanager ansehen. Aber hinter den Kulissen verfolgt der Linux-Kernel mehrere Zeitstempel auf Dateien und Verzeichnissen:
- Wann die Datei zuletzt geändert wurde (
mtime
) - Wann die Datei zuletzt geändert wurde (
ctime
) - Der letzte Zugriff auf die Datei (
atime
)
Sie können die stat
verwenden Befehl, um diese Details für eine Datei oder ein Verzeichnis anzuzeigen. Hier ist ein Beispiel für /etc/fstab
Datei auf einem meiner Testserver:
$ stat fstab
File: fstab
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2097285 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2019-04-25 21:10:18.083325111 -0500
Modify: 2019-05-16 10:46:47.427686706 -0500
Change: 2019-05-16 10:46:47.434686674 -0500
Birth: 2019-04-25 21:03:11.840496275 -0500
Aus der Ausgabe können Sie ersehen, dass diese Datei am 25. April 2019 erstellt wurde, als ich das System installierte. Meine /etc/fstab
Datei wurde zuletzt am 16. Mai 2019 geändert, und alle anderen Attribute wurden ungefähr zur gleichen Zeit geändert.
Wenn ich /etc/fstab
kopiere zu einer neuen Datei, ändern sich die Daten, was darauf hinweist, dass dies eine neue Datei ist:
$ sudo cp fstab fstab.bak
$ stat fstab.bak
File: fstab.bak
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:53:58.443659981 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500
Aber wenn ich die Datei einfach umbenenne, ohne ihren Inhalt zu ändern, aktualisiert Linux nur die Änderungszeit für die Datei:
$ sudo mv fstab.bak fstab.tmp
$ stat fstab.tmp
File: fstab.tmp
Size: 261 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 2105664 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:etc_t:s0
Access: 2020-05-12 17:53:58.442659986 -0500
Modify: 2020-05-12 17:53:58.443659981 -0500
Change: 2020-05-12 17:54:24.576508232 -0500
Birth: 2020-05-12 17:53:58.442659986 -0500
Diese Zeitstempel sind für bestimmte Unix-Programme sehr nützlich. Biff ist beispielsweise ein Programm, das Sie benachrichtigt, wenn Sie eine neue E-Mail-Nachricht erhalten. Heutzutage sieht man nicht viele Leute, die Biff verwenden, aber in den Tagen, als Mailboxen lokal auf Ihrem System waren, war Biff ziemlich verbreitet.
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Woher weiß ein Programm, ob Sie neue E-Mails in Ihrem Posteingang haben? Biff vergleicht die Zeit der letzten Änderung (als die Posteingangsdatei mit einer neuen E-Mail-Nachricht aktualisiert wurde) und die Zeit des letzten Zugriffs (das letzte Mal, als Sie Ihre E-Mail gelesen haben). Wenn „Geändert“ jünger als „Zugegriffen“ ist, weiß biff, dass eine E-Mail-Nachricht eingetroffen ist, seit Sie die E-Mail zuletzt gelesen haben, und teilt Ihnen dies mit. Der E-Mail-Client von Mutt tut etwas Ähnliches, um Sie zu benachrichtigen, wenn neue Nachrichten eintreffen.
Diese Zeit des letzten Zugriffs ist auch nützlich, wenn Sie Dateisystemstatistiken und Leistungsoptimierungen durchführen müssen. Auf großen Linux-Systemen müssen Administratoren möglicherweise wissen, worauf zugegriffen wird, damit sie das Dateisystem entsprechend optimieren können.
Aber die meisten modernen Programme benötigen die Zeit des letzten Zugriffs nicht mehr, daher gibt es einige Argumente, sie nicht zu verwenden. 2007 diskutierten Linus Torvalds und mehrere andere Kernel-Entwickler über atime
und seine Leistungsprobleme. Der Linux-Kernel-Entwickler Ingo Molnár machte diese Beobachtung über atime
und das ext3-Dateisystem:
Es ist irgendwie seltsam, dass jeder Linux-Desktop und -Server durch eine merkliche Verlangsamung der IO-Leistung aufgrund der ständigen atime-Updates beeinträchtigt wird, obwohl es nur zwei echte Benutzer davon gibt:tmpwatch [das so konfiguriert werden kann, dass es ctime verwendet, sodass es kein großes Problem darstellt] und einige Backup-Tools. (Okay, und E-Mail-Benachrichtigung wohl auch.) Von Zehntausenden von Bewerbungen.
Aber die Leute benutzen immer noch einige Programme, die es brauchen, und entfernen atime
würde diese Benutzerprogramme beschädigen. Und die Regel in der Linux-Kernel-Entwicklung ist, den Userspace nicht zu brechen.
Der Relatime-Kompromiss
Linux-Distributionen enthalten viele Softwareanwendungen, und Benutzer können andere Programme herunterladen und installieren, die ihren speziellen Anforderungen entsprechen. Das ist der entscheidende Vorteil eines Open-Source-Betriebssystems! Aber das macht es schwieriger, die Leistung Ihres Dateisystems zu optimieren. Benötigen Sie atime
, oder wird das Entfernen etwas auf Ihrem System beschädigen?
Als Kompromiss implementierten Linux-Kernel-Entwickler eine neue Methode:relatime
ist ein etwas anderes Leistungsmaß, das die Leistung mit der Kompatibilität in Einklang bringen soll. Der mount
Manpage sagt dies über relatime
:
Die Zugriffszeit wird nur aktualisiert, wenn die vorherige Zugriffszeit vor der aktuellen Modifizierungs- oder Änderungszeit lag. … Seit Linux 2.6.30 verwendet der Kernel standardmäßig das Verhalten dieser Option (es sei denn, noatime wurde angegeben) … Außerdem wird seit Linux 2.6.30 die letzte Zugriffszeit der Datei immer aktualisiert, wenn sie älter als 1 Tag ist.
Kurz gesagt:Moderne Linux-Systeme (seit Linux 2.6.30, veröffentlicht 2009) verwenden bereits relatime
, was Ihnen einen wirklich schnellen Leistungsschub geben sollte. Das bedeutet, dass Sie Ihre /etc/fstab
nicht anpassen müssen Datei und kann sich auf die relatime
verlassen Kernel-Standard.
Optimieren der Systemleistung mit noatime
Aber wenn Sie Ihr System optimieren möchten, um maximale Leistung zu erzielen, deaktivieren Sie atime
ist auch 2020 noch eine gültige Option.
Diese Leistungsoptimierung ist auf sehr schnellen modernen Laufwerken (wie NVME oder einer schnellen SSD) möglicherweise nicht sehr auffällig, aber es gibt immer noch einen kleinen Schub.
Wenn Sie wissen, dass Sie keine Software verwenden, die atime
erfordert , dann können Sie eine leichte Leistungssteigerung erzielen, indem Sie noatime
festlegen in Ihrer /etc/fstab
Datei. Dies weist den Kernel an, die Zeit des letzten Zugriffs nicht zu verfolgen, um diesen winzigen Leistungseinbruch zu vermeiden, um atime
kontinuierlich zu aktualisieren im Dateisystem. Fügen Sie noatime
hinzu als Option für Ihre Linux-Dateisysteme, normalerweise nach dem Standardeintrag:
/dev/mapper/fedora_localhost--live-root / ext4 defaults,noatime,x-systemd.device-timeout=0 1 1
UUID=be37c451-915e-4355-95c4-654729cf662a /boot ext4 defaults,noatime 1 2
UUID=C594-12B1 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/fedora_localhost--live-home /home ext4 defaults,noatime,x-systemd.device-timeout=0 1 2
/dev/mapper/fedora_localhost--live-swap none swap defaults,x-systemd.device-timeout=0 0 0
Dies wird beim nächsten Neustart wirksam.