![O que mv faz em caso de erros?](https://rvso.com/image/23928/O%20que%20mv%20faz%20em%20caso%20de%20erros%3F.png)
Acabei de tentar mover uma árvore grande de um disco para outro, que era muito pequena. Agora, fico com algo que realmente não consigo entender - parece que alguns arquivos foram realmente movidos para fora da árvore de origem, enquanto outros foram apenas copiados. Provavelmente isso não é verdade, e estou apenas ignorando algo, como fiz quando verifiquei o espaço livre no disco de destino. :D
O comando era simplesmente mv source-dir destination-dir
, onde ambos os diretórios residem em discos diferentes. Estou a usar mv (GNU coreutils) 7.4
. Em nenhum lugar da página de manual encontrei as respostas para as seguintes perguntas:
- arquivos truncados podem ser criados?
- em caso de erros, alguma coisa na árvore de origem será excluída?
- como recuperar (de forma fácil e rápida)?
Responder1
Quando mv está migrando para um sistema de arquivos diferente, ele primeiro copia todos os dados para o novo sistema de arquivos. Depois que os novos dados são copiados, os dados antigos são removidos. Isso significa que se a movimentação for interrompida ou falhar, o local de origem ainda deverá conter todos os dados.
No que diz respeito à recuperação, apenas os dados de destino devem estar corrompidos. Em vez de usar mv novamente, basta usar rsync e depois rm manualmente
rsync -av source-dir/ dest-dir/
rm -rf source-dir
Responder2
Acho que a introdução da info
página responde a todas as suas perguntas:
Ele primeiro usa parte do mesmo código usado por `cp -a' para copiar os diretórios e arquivos solicitados e, em seguida (assumindo que a cópia foi bem-sucedida) remove os originais. Se a cópia falhar, a parte que foi copiada para a partição de destino será removida. Se você copiasse três diretórios de uma partição para outra e a cópia do primeiro diretório fosse bem-sucedida, mas o segundo não, o primeiro seria deixado na partição de destino e o segundo e o terceiro seriam deixados na partição original.
A recuperação não deve ser um problema, pois os dados são preservados. Eu não sei o quanto isso tenta seratômico( mkdir
por exemplo, é necessária inspeção da fonte) ou se estiver em seu domínio (vs. o do kernel), mas pode haver corrupção se a interrupção ocorrer quando já estiver excluindo a fonte. Nesse ponto, você já teria uma boa cópia no diretório de destino, portanto, uma simples verificação do tamanho de bytes poderia resolver o problema.
EDIT: Fiz alguns testes com arquivos enormes (alguns G) criados com dd
, mas sem resultados conclusivos. Nunca consegui copiar apenas algumas das fontes - cancelei toda a operação (sendo muito rápido) ou depois não tive nenhuma chance devido ao cache de disco e talvez ao bom design do sistema de arquivos (meu ^C sempre pousou após a mudança ter sucesso ).