Quais são as consequências para um sistema de arquivos ext4 quando encerro um cp
comando de cópia digitando Ctrl+ Cenquanto ele está em execução?
O sistema de arquivos é corrompido? O espaço da partição ocupado pelo arquivo copiado incompleto ainda pode ser utilizado após a exclusão?
E, o mais importante, encerrar um cp
processo é algo seguro a se fazer?
files
filesystems
ext4
file-copy
Seninha
fonte
fonte
Respostas:
Isso é seguro, mas naturalmente você pode não ter terminado a cópia.
Quando o
cp
comando é executado, ele faz syscalls que instruem o kernel a fazer cópias do arquivo. Um syscall é uma função que um aplicativo pode chamar que solicita um serviço do kernel, como ler ou gravar dados no disco. O processo de espaço do usuário simplesmente aguarda a conclusão do syscall. Se você rastrear as chamadas, seria algo como:Isso se repete para cada arquivo que deve ser copiado. Nenhuma corrupção ocorrerá devido à maneira como esses syscalls funcionam. Quando syscalls como estes são inseridos, o sinal fatal só terão efeito após a syscall tenha terminado , não enquanto ele está sendo executado. Por esse motivo, a eliminação forçada do processo só fará com que ele seja encerrado após a conclusão do syscall atualmente em execução. Isso significa que o kernel, onde reside o driver do sistema de arquivos, é livre para concluir as operações necessárias para colocar o sistema de arquivos em um estado saudável. Qualquer E / S desse tipo nunca será encerrada no meio da operação, tornando-as operações atômicas.
Curiosamente, é por isso que comandos como
cp
não podem terminar imediatamente quando são mortos. Se você estiver copiando um arquivo muito grande e o matando, mesmo com o SIGKILL, o processo ainda será executado até que o syscall atual termine. Com um arquivo grande, isso pode demorar um pouco, pois o processo estará em um estado ininterrupto.fonte
cp
ela mesma. Possui várias funções de acesso a arquivos que usam internamente isso como um valor.cp
SIGKILLing depois, mesmo ao lidar com arquivos grandes ... talvez a duração dessas operações atômicas ininterruptas de um processo seja muito curta. A mesma explicação funciona para matardd
e outros processos de leitura / gravação de disco?dd
, isso depende do quebs
você definir para isso. Se for apenas 512 (o padrão), deve terminar rapidamente. Se for maior, pode demorar um pouco mais.Como
cp
é um comando userspace, isso não afeta a integridade do sistema de arquivos.Obviamente, você precisa estar preparado para que pelo menos um arquivo não tenha sido copiado completamente se você matar um
cp
programa em execução .fonte
CAP_SYS_RAWIO
no Linux ou o equivalente em outros sistemas operacionais) que lhes dão acesso direto ao dispositivo subjacente do sistema de arquivos (por exemplosudo dd if=/dev/urandom of=/dev/sda1
), podem causar todo tipo de confusão.cp
, seria provavelmente ter corrompido a partir de um terminoucp
também ...