Was sind die Konsequenzen für ein ext4-Dateisystem, wenn ich einen Kopierbefehl beende, indem ich + cp
tippe, während er ausgeführt wird?CtrlC
Wird das Dateisystem beschädigt? Ist der von der unvollständig kopierten Datei belegte Speicherplatz der Partition nach dem Löschen noch verwendbar?
Und ist es vor allem cp
sicher, einen Prozess zu beenden ?
files
filesystems
ext4
file-copy
Seninha
quelle
quelle
Antworten:
Dies ist sicher, aber natürlich haben Sie die Kopie möglicherweise noch nicht fertiggestellt.
Wenn der
cp
Befehl ausgeführt wird, werden Systemaufrufe ausgeführt, die den Kernel anweisen, Kopien der Datei zu erstellen. Ein Syscall ist eine Funktion, die eine Anwendung aufrufen kann, um einen Dienst vom Kernel anzufordern, z. B. das Lesen oder Schreiben von Daten auf die Festplatte. Der Userspace-Prozess wartet einfach darauf, dass der Syscall beendet wird. Wenn Sie die Anrufe verfolgen würden, würde dies ungefähr so aussehen:Dies wird für jede zu kopierende Datei wiederholt. Aufgrund der Funktionsweise dieser Systemaufrufe tritt keine Beschädigung auf. Wenn syscalls wie diese eingegeben werden, wird das fatale Signal erst wirksam, nachdem der syscall hat fertig , nicht während des Betriebs. Aus diesem Grund wird das gewaltsame Beenden des Prozesses erst beendet, nachdem der derzeit ausgeführte Systemaufruf beendet wurde. Dies bedeutet, dass der Kernel, in dem sich der Dateisystemtreiber befindet, die Vorgänge ausführen kann, die erforderlich sind, um das Dateisystem in einen vernünftigen Zustand zu versetzen. Solche E / A-Vorgänge werden niemals mitten in der Operation beendet, was sie zu atomaren Operationen macht.
Interessanterweise werden Befehle wie
cp
nicht sofort beendet, wenn sie getötet werden. Wenn Sie eine sehr große Datei kopieren und sie auch mit SIGKILL beenden, wird der Prozess weiterhin ausgeführt, bis der aktuelle Systemaufruf abgeschlossen ist. Bei einer großen Datei kann dies eine Weile dauern, da sich der Prozess in einem unterbrechungsfreien Zustand befindet.quelle
cp
selbst. Es verfügt über verschiedene Dateizugriffsfunktionen, die diese intern als Wert verwenden.cp
gedacht, dass es nach dem SIGKILLING zu Verzögerungen beim Beenden von a kommt, auch wenn es sich um große Dateien handelt ... Vielleicht ist die Dauer dieser unterbrechungsfreien atomaren Vorgänge eines Prozesses zu kurz. Funktioniert die gleiche Erklärung für das Beendendd
und andere Lese- / Schreibvorgänge auf Datenträgern?dd
, hängt das davon ab, wasbs
Sie dafür eingestellt haben. Wenn es nur 512 ist (die Standardeinstellung), sollte es schnell beendet werden. Wenn es größer ist, kann es etwas länger dauern.Da
cp
es sich um einen Userspace-Befehl handelt, hat dies keine Auswirkungen auf die Integrität des Dateisystems.Sie müssen natürlich darauf vorbereitet sein, dass mindestens eine Datei nicht vollständig kopiert wurde, wenn Sie ein laufendes
cp
Programm beenden .quelle
CAP_SYS_RAWIO
unter Linux oder einem vergleichbaren Betriebssystem), die ihnen direkten Zugriff auf das zugrunde liegende Gerät des Dateisystems gewähren (z. B.sudo dd if=/dev/urandom of=/dev/sda1
), alle möglichen Schäden anrichten.cp
, würde es wahrscheinlich auch nach einer Beendigung beschädigtcp
werden ...