
Estou me perguntando se isso é considerado seguro. Eu sei que os identificadores de arquivo funcionam bem desde que um link permaneça, e sei que o identificador é o inode e não o nome, mas não tenho certeza de como funciona em diferentes FS.
Por exemplo, copiar de um disco rígido ext4 para um pendrive NTFS ou copiar de um pendrive FAT para uma unidade ext4.
Eu estava copiando vários arquivos de mídia grandes e os renomeei antes de a cópia ser concluída. As somas de verificação correspondem. Eu me pergunto se é sempre seguro, funcionará na direção oposta, há peculiaridades que eu deveria conhecer ou razões para evitar fazer isso?
O sistema operacional/distro é Ubuntu com o kernel Linux 5.0.0-15.
Responder1
Não tenho certeza de como isso funciona em diferentes FS.
A operação de renomeação em si não funciona em sistemas de arquivos diferentes; não há diferença entre gravar em um arquivo, digamos, de um editor de texto e gravar em um arquivo usando cp
um arquivo de origem em outro sistema de arquivos.
No Linux, a rename
chamada do sistema é transparente para outros links para o arquivo, que incluem outros links físicos e descrições (e descritores) de arquivos abertos.A página de manual afirma explicitamente
Descritores de arquivos abertos paracaminho antigotambém não são afetados.
(Estou me qualificando com “no Linux” apenas porque não consegui encontrar uma referência em POSIX; acho que isso é comum em sistemas operacionais estilo POSIX.)
Portanto, quando você copia um arquivo entre sistemas de arquivos, cp
abre a origem para leitura, o destino para gravação e inicia a cópia. As operações de renomeação não afetam os descritores de arquivo usados; você pode renomear a origem e/ou o destino sem afetar cp
.
Outra maneira de pensar nisso é que o nome do arquivo no diretório que o contém faz parte da entrada do diretório, que aponta para seu inode; as descrições dos arquivos abertos são outros ponteiros para o inode, assim como outros links físicos. Alterar o nome do arquivo não afeta nenhum outro ponteiro existente.
As advertências a serem observadas são que ferramentas como mv
não se limitam ao que a rename
chamada do sistema pode fazer; se você mv
arquivar em sistemas de arquivos, ele rename
falhará (ou mv
descobrirá que a operação ocorre em sistemas de arquivos e nem mesmo tentará) e mv
então recorrerá à cópia manual do conteúdo do arquivo e à exclusão do original. Isso não dará bons resultados se o arquivo que está sendo renomeado for alterado simultaneamente.