Warum ist die Synchronisierung so wichtig, wenn ein bootfähiger Linux-USB-Stick erstellt wird?

15

Aus dem Arch Linux Wiki: https://wiki.archlinux.org/index.php/USB_flash_installation_media

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[...] Verpassen Sie nicht die vollständige Synchronisierung, bevor Sie das USB-Laufwerk abziehen.

ich würde gerne wissen

  • Was tut es?
  • Welche Konsequenzen ergeben sich, wenn sie weggelassen werden?

Anmerkungen

ddBefehl verwendet mit optional status=progress:

tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync

Oder pvfür den Fortschritt verwenden

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync
Jonathan Komar
quelle

Antworten:

19

Der ddumgeht die Kernel-Festplatten-Caches nicht, wenn auf ein Gerät geschrieben wird, sodass USBnach ddAbschluss möglicherweise ein Teil der Daten noch nicht auf den Stick geschrieben wird . Wenn Sie USBin diesem Moment Ihren Stick ausstecken , ist der Inhalt auf dem USBStick inkonsistent. Daher kann Ihr System möglicherweise nicht von diesem USBStick booten .

Sync Leert alle noch im Cache befindlichen Daten auf das Gerät.

Anstatt aufzurufen, können syncSie auch die fdatasync ddKonvertierungsoption verwenden:

fdatasync

Schreiben Sie die Ausgabedateidaten physisch, bevor Sie fertig sind

In Ihrem Fall wäre der Befehl:

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

Die conv=fdatasyncMarken ddeffektiv rufen fdatasync()Systemaufruf am Ende der Übertragung kurz vor ddExits (Ich habe dies mit dd‚s Quellen).

Dies bestätigt, dass dddie Caches nicht umgangen oder geleert werden, wenn dies nicht ausdrücklich angewiesen wird.

Serge
quelle
Vielen Dank für Ihren Beitrag, ich bin mir jedoch nicht sicher, ob diese Aussage korrekt ist. Das ddumgeht die Kernel-Disk-Caches nicht, wenn es auf ein Gerät schreibt . Beim Schreiben in eine Datei (über die Dateisystemschicht des Kernels) werden die Dinge zwischengespeichert. Ich mache mir jedoch Sorgen, auf Geräte zu schreiben. Bitte geben Sie eine Quelle für diese Aussage an, wenn Sie können, da dies der Dreh- und Angelpunkt dieser Frage ist. Wenn dies zutrifft, ist dies ein gültiger Grund für die Ausführung syncnach einem Vorgang, bei dem das ddGerät wechselt .
Jonathan Komar
Ja, es wird zwischengespeichert. Das Caching findet innerhalb der Blockgeräteinfrastruktur des Kernels statt. Die Dateioperationen selbst werden nicht zwischengespeichert. Die zugrunde liegende Blockgeräteschnittstelle führt die Einlösung durch. Quelle: lxr.free-electrons.com/source/block/blk-flush.c
Serge
@ Macmadness86 siehe die aktualisierte Antwort
Serge
7
Ich bevorzuge die Verwendung oflag=sync, daher gibt progress die tatsächliche und nicht die zwischengespeicherte Übertragungsgeschwindigkeit aus (also 10 MB / s anstelle von 100 MB / s für eine Sekunde und dann 10 Sekunden Verzögerung).
Bart Polot
Das Schreiben auf ein Blockgerät umgeht VFS insgesamt. Mit anderen Worten: Das Schreiben in eine Datei kann vom Kernel zwischengespeichert werden (und dies ist normalerweise der Fall), aber das Schreiben in ein Gerät wird niemals vom Kernel zwischengespeichert (und dies kann nicht der Fall sein).
Eric
0

Auf der Manpage sync (1): "sync - zwischengespeicherte Schreibvorgänge in dauerhaften Speicher synchronisieren". Grundsätzlich syncist darauf zu achten, dass alle Ihre Daten aus dem Cache auf den Stick geschrieben werden.

schaiba
quelle
Ich verstehe nicht, wo in Ihrer Frage der Teil über das Licht auftaucht.
Schaiba