Каковы последствия для файловой системы ext4, когда я завершаю cp
команду копирования , нажимая Ctrl+ Cво время ее работы?
Файловая система повреждена? Пространство раздела, занятое неполным скопированным файлом, все еще используется после его удаления?
И, самое главное, cp
безопасное ли завершение процесса?
files
filesystems
ext4
file-copy
Seninha
источник
источник
Ответы:
Это безопасно, но, естественно, вы не закончили копирование.
Когда
cp
команда запускается, она делает системные вызовы, которые инструктируют ядро создавать копии файла. Системный вызов - это функция, которую может вызывать приложение, которое запрашивает у ядра службу, такую как чтение или запись данных на диск. Процесс пользовательского пространства просто ожидает завершения системного вызова. Если бы вы отслеживали вызовы, это выглядело бы примерно так:Это повторяется для каждого файла, который нужно скопировать. Никакой коррупции не произойдет из-за того, как работают эти системные вызовы. Когда системные вызовы , как они вводятся, фатальный сигнал будет принимать только силу после того , системный вызов был закончен , не в то время как он работает. Из-за этого принудительное завершение процесса приведет к его завершению только после завершения текущего запущенного системного вызова. Это означает, что ядро, в котором находится драйвер файловой системы, может свободно завершать операции, которые ему необходимо выполнить, чтобы перевести файловую систему в нормальное состояние. Любой ввод-вывод такого рода никогда не будет завершен в середине операции, что делает их атомарными операциями.
Интересно, что именно поэтому такие команды
cp
могут не завершаться сразу после их уничтожения. Если вы копируете очень большой файл и уничтожаете его, даже с помощью SIGKILL, процесс все равно будет выполняться до завершения текущего системного вызова. С большим файлом это может занять некоторое время, так как процесс будет в непрерывном состоянии.источник
cp
сама. Он имеет различные функции доступа к файлам, которые используют его как значение.cp
после SIGKILL, даже при работе с большими файлами ... возможно, продолжительность этих непрерывных атомарных операций процесса слишком мала. Работает ли то же самое объяснение для убийстваdd
и других процессов чтения / записи на диск?dd
, это зависит от того, чтоbs
вы установите для него. Если это только 512 (по умолчанию), то оно должно быстро завершиться. Если он больше, то это может занять немного больше времени.Поскольку
cp
это команда пользователя, это не влияет на целостность файловой системы.Вы, конечно, должны быть готовы к тому, что по крайней мере один файл не будет скопирован полностью, если вы убьете работающую
cp
программу.источник
CAP_SYS_RAWIO
в Linux или аналогичных в других ОС), которые предоставляют им прямой доступ к базовому устройству файловой системы (напримерsudo dd if=/dev/urandom of=/dev/sda1
), могут нанести всевозможные разрушения.cp
, она, вероятно,cp
тоже была бы повреждена из-за завершения ...