O que acontece se o mv
comando Linux for interrompido? Digamos, estou movendo um diretório inteiro para outro lugar e o interrompo enquanto ele estiver em movimento. O diretório de origem continuará intocado?
72
Se você mover um diretório no mesmo sistema de arquivos, somente moverá a entrada do diretório de um local no sistema de arquivos para outro. Por exemplo, mv /source/dir /target/dir
irá apagar a entrada de diretório de dir
partir /source
e criar um novo em /target
. Isso é feito por uma chamada do sistema atômico (ou seja, ininterrupta). O inode que contém as entradas do diretório dir
e o conteúdo real do próprio diretório não é afetado.
Se você mover o diretório de um sistema de arquivos para outro, todos os arquivos serão copiados primeiro para o novo sistema de arquivos e depois desvinculados do original. Portanto, se você interromper mv
a cópia, poderá acabar com duas cópias de alguns dos arquivos - no local antigo e no novo.
fsck
(que provavelmente será executado automaticamente na reinicialização, pois o disco não foi desmontado corretamente).strace mv /fs1/dir /fs2/
- a última coisa que o mv faz é chamarunlinkat
todos os arquivos de origem de uma só vez (não um por um, pois são copiados).A implementação GNU repete os argumentos na linha de comando, tenta renomear primeiro e, se isso falhar, copia recursivamente e exclui recursivamente a fonte. assim
excluirá a antes de copiar b e não começará a excluir nada em a antes que a cópia de destino seja concluída.
Observe que isso se aplica apenas à implementação GNU.
Para esclarecer: se um é um diretório que contém d e e , e b é um arquivo, a ordem será
fonte
mv
também, portanto, não é apenas GNU.Você move um diretório, interrompe a movimentação e o diretório original permanece intacto:
Se você mover vários diretórios, cada um ficará intacto na origem ou no destino, dependendo de quando você interrompeu:
Como recebi minha resposta:
Como teste, copiei uma pasta grande para um diretório NFS, interrompi e o número de arquivos na pasta grande de origem permaneceu o mesmo, e o conteúdo parcial foi deixado no diretório NFS. Eu usei "find. -Type f | wc -l" para verificar.
Parece que a resposta de Simon está correta.
fonte
A resposta aceita está definitivamente errada sobre a mudança entre sistemas de arquivos - um fato que já me salvou muitos problemas algumas vezes. Ao mover um diretório que contém subdiretórios, nenhum arquivo em um subdiretório será excluído antes que todo o subdiretório tenha sido copiado. Ou seja, entre o significado real de "objeto por objeto" - um subdiretório É um objeto (arquivo) e, portanto, sua integridade deve ser preservada por uma cópia completa no destino antes que qualquer coisa possa ser excluída. Portanto, a resposta de Simon me parece a correta.
fonte
Não. O mv opera objeto por objeto; portanto, os objetos que já foram processados serão removidos da fonte.
fonte
Definitivamente não. A movimentação é feita objeto a objeto. Portanto, o objeto movido para o destino até o ponto de interrupção não deve mais existir na fonte.
Se o mv foi emitido para um arquivo grande (entre diferentes) e foi interrompido, a fonte estará intacta. No alvo, você verá um arquivo incompleto até o ponto de interrupção.
No entanto, você pode restaurar o mv com o mesmo comando e o processo continuará.
fonte
Se você deseja interromper o mv porque deseja desconectar-se do terminal, basta enviá-lo para segundo plano:
fonte