GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie groß ist ein atomarer Schreibvorgang auf der Festplatte meines Systems?

besser spät als nie :)

Die schnelle Antwort lautet:"2.147.479.552 Bytes, wenn die Kernel-Version 3.14 oder neuer ist"

ausführliche Antwort:

Soweit ich weiß, geht es darum, Syscall zu schreiben:

http://man7.org/linux/man-pages/man2/write.2.html

1) Alle POSIX-Systeme ( Linux, BSD, alle Unix ) sind garantiert in der Lage, bis zu MAX_SSIZE Bytes zu schreiben

Wenn count größer als SSIZE_MAX ist, ist das Ergebnis gemäß POSIX.1 implementierungsdefiniert; siehe ANMERKUNGEN für die Obergrenze unter Linux.

# getconf SSIZE_MAX
32767

2) Linux kann garantiert bis zu 1,99 GiB schreiben (und es ist atomarer Betrieb für Linux-Kernel-Version 3.14 und neuer)

Unter Linux überträgt write() (und ähnliche Systemaufrufe) höchstens 0x7ffff000 (2.147.479.552) Bytes und gibt die Anzahl der tatsächlich übertragenen Bytes zurück. (Dies gilt sowohl für 32-Bit- als auch für 64-Bit-Systeme.)

Aber es ist nur ab Linux-Kernel 3.14

ein fairer atomarer Betrieb

Gemäß POSIX.1-2008/SUSv4 Abschnitt XSI 2.9.7 ("ThreadInteractions with Regular File Operations"):

Alle der folgenden Funktionen sollen bezüglich der in POSIX.1-2008 spezifizierten Wirkungen atomar sein, wenn sie auf regulären Dateien oder symbolischen Links operieren:...

Zu den nachfolgend aufgelisteten APIs gehören write() und writev(2). Und zu den Effekten, die über Threads (und Prozesse) hinweg atomar sein sollten, gehören Aktualisierungen des Datei-Offsets. Unter Linux vor Version 3.14 war dies jedoch nicht der Fall:Wenn zwei Prozesse, die sich eine offene Dateibeschreibung teilen (siehe open(2)), gleichzeitig ein write() (oder writev(2)) ausführen, dann wird die I/O Die Operationen waren nicht atomar in Bezug auf die Aktualisierung des Datei-Offsets, mit dem Ergebnis, dass sich die von den beiden Prozessen ausgegebenen Datenblöcke (fälschlicherweise) überlappen konnten. Dieses Problem wurde in Linux 3.14 behoben.


Linux
  1. Erhöhen Sie die Größe einer Cloud-Boot-from-Volume-Server-Systemfestplatte

  2. Alternative zu Rs `memory.size()` unter Linux?

  3. Was ist der herkömmliche Installationsort für Anwendungen unter Linux?

  4. Wie viel Größe wird beim Kompilieren des Linux-Kernels benötigt?

  5. Was ist die maximale Länge des Passworts auf einem Unix/Linux-System?

Einführung in das Linux-Dateisystem

Was ist die Shell unter Linux?

Was ist der Kill-Befehl in Linux?

Wie kann festgestellt werden, was auf einem Linux-Server den meisten Speicherplatz belegt?

was ist der zuverlässigste befehl, um die tatsächliche größe einer datei zu finden linux

Was ist die Standardgrößeneinheit im Linux-Befehl ls -l?