Что происходит, если mv прерван?

Что происходит если Linux mv команда прервана? Скажите, я перемещаю целый каталог в некоторое другое место и прерываю его, в то время как оно перемещается. Исходный каталог все еще будет нетронутым?

73
задан 18.03.2011, 11:25

4 ответа

При перемещении каталога в ту же файловую систему Вы только перемещаете запись каталога от одного местоположения в файловой системе к другому. Например, mv /source/dir /target/dir удалит запись каталога dir от /source и создайте новый в /target. Это сделано одним атомарным системным вызовом (т.е. непрерываемое). inode, содержащий записи каталога dir а также фактическое содержание самого каталога не затронуто.

При перемещении каталога от одной файловой системы до другого все файлы сначала копируются в новую файловую систему и затем несвязанные с исходной. Таким образом, если Вы прерываете mv в то время как это копирует, можно закончить с двумя копиями некоторых файлов – в старом местоположении и в новом.

52
ответ дан 07.12.2019, 08:09

Реализация GNU выполняет итерации по аргументам на командной строке, попытки переименовать сначала, и, если это приводит к сбою, рекурсивно копирует и затем рекурсивно удаляет источник. Так

mv a b c/

удалит прежде, чем скопировать b и не начнет удалять что-либо в, прежде чем целевая копия будет завершена.

Обратите внимание, что это относится к реализации GNU только.

Разъясниться: если каталога, содержащего d и e и b, будет файлом, то порядок будет

  • создайте c/a
  • копия a/d-> c/a/d
  • копия a/e-> c/a/e
  • удалите a/d
  • удалите a/e
  • удалите a
  • копия b-> c/b
  • удалите b
35
ответ дан 07.12.2019, 08:09

Нет. mv управляет объектом объектом, таким образом, объекты, которые были уже обработаны, будут удалены из источника.

4
ответ дан 07.12.2019, 08:09

Определенно нет. Перемещение сделано объектом объектом. Следовательно, объект, перемещенный к месту назначения на грани прерывания, не должен больше существовать в источнике.

Если mv был выпущен для большого файла (между различным), и он был прерван затем, источник будет неповрежден. На цели Вы будете видеть неполный файл на грани прерывания.

Можно однако восстановить mv с той же командой, и процесс продолжится.

2
ответ дан 07.12.2019, 08:09

Теги

Похожие вопросы