No RHEL / CentOS 7, o mv realmente faz um cp & rm no mesmo sistema de arquivos?

6

À luz das respostas a duas anterior perguntas , parece que sob o RHEL / CentOS 7 mv , mesmo no mesmo sistema de arquivos, está realmente fazendo um cp , em seguida, rm .

Nas edições anteriores do CentOS / RHEL, um mv no mesmo sistema de arquivos (mesmo de um diretório profundo para um novo diretório profundo) era muito rápido mesmo em arquivos grandes (digamos, coleções de mídia de instalação ou vídeos grandes). / p>

No entanto, no meu servidor pessoal do CentOS, ao observar o que o mv está realmente fazendo ao mover arquivos grandes, ele está demorando enquanto cp seguido de rm .

O que me faz perguntar por que o comportamento aparentemente mudou de ser apenas um wrapper para rename() (de acordo com o ).

Isso está correto? E, em caso afirmativo, por que o comportamento mv alterou o comportamento no CentOS 7?

    
por warren 23.08.2016 / 16:33

1 resposta

10

O comando CentOS 7.2 mv tentará usar a chamada rename(3) .

por exemplo, se eu fizer strace mv X Y , então vejo na saída

rename("X", "Y")                        = 0

Assim, podemos ver que mv chamou com sucesso a renomeação.

Se, em vez disso, eu tentar renomear esse diretório para outro disco:

rename("X", "/home/sweh/X")             = -1 EXDEV (Invalid cross-device link)

Podemos ver que mv tentou usar a chamada rename() e isso falhou. Neste ponto, ele começa a fazer um trabalho recursivo

rmdir("/home/sweh/X")                   = -1 ENOENT (No such file or directory)
mkdir("/home/sweh/X", 0700)             = 0
lstat("/home/sweh/X", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
openat(AT_FDCWD, "X", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 2 entries */, 32768)     = 48

Aqui podemos ver que ele criou o diretório de destino e, em seguida, começamos a ler o diretório atual para fazer a cópia / remoção lenta.

Portanto, podemos concluir que mv tentará usar a rápida chamada rename() e só voltará à versão lenta se isso falhar.

    
por 23.08.2016 / 16:47