Existe realmente nenhuma maneira no Linux para obter tempo de criação de arquivos no compartilhamento cifs / smb?

6

Estou muito embaraçoso em um script de backup e perdi algo importante. Eu sei que os sistemas de arquivos ext3 não rastreiam a data de criação, mas a cópia de arquivos dentro do ext3 atualiza o tempo alterado conforme visto via stat (o que funcionaria). No entanto, quando os arquivos são copiados de um servidor Windows para outro (cujas montagens eu tenho via smb / cifs), do meu teste, o horário alterado não é atualizado. Estou usando o find para fazer a pesquisa nos compartilhamentos cifs. Existe realmente nenhuma maneira de detectar quando um novo arquivo é criado em um compartilhamento cifs do Linux usando "find"?

Além disso, estou muito familiarizado com o rsync e, nessas circunstâncias, as limitações do rsync o descartam como uma opção. Eu estava pensando que eu poderia usar o rsync para a pesquisa e tentar canalizar os resultados para a ação (gzip), mas acho que as sub-camadas seriam ridículas. Pode estar errado, claro. Qualquer sugestão será muito bem-vinda. Pode fornecer mais detalhes, mas da minha pesquisa não acho possível.

    
por kiwisan 19.01.2014 / 04:27

2 respostas

15

O kernel do Linux tem uma chamada de sistema xstat(2) em andamento há vários anos. David Howells, da RedHat, fez grande parte do trabalho. xstat(2) permite recuperar o tempo de criação (às vezes rebatizado o "tempo de nascimento" ou "tempo de nascimento" nos mundos Linux e BSD por nenhuma razão muito boa) dos arquivos dos diversos sistemas de arquivos que o suportam, incluindo EXT4 um timestamp de criação no disco) e o CIFS (que, com sua herança DOS / OS / 2 / Windows, suporta um timestamp de criação como um cidadão de primeira classe há décadas). M. Howells trabalhou nos patches CIFS que acompanham a chamada do sistema.

O OpenSolaris e os BSDs realmente têm st_birthtim em sua chamada de sistema stat(2) , e o recurso é acessível aos autores de scripts por meio de programas aplicativos, como find e ls . Na página do OpenSolaris ls man, você encontrará crtime ao lado de atime , mtime e ctime em vários lugares. Da mesma forma, o comando FreeBSD find tem -Bmin , -Bnewer e -Btime primários. E o Mac OS ls tem uma opção -U .

Se você estivesse escrevendo o seu script para o OpenSolaris, o BSDs ou o Mac OS 10, você poderia continuar com o que você quer fazer com os tempos de criação agora mesmo. De fato, se você estivesse escrevendo para o Windows, poderia fazer o mesmo. O Cygwin tem suporte a st_birthtim desde 2007 , tornando o timestamp CreationTime do Win32, teve desde a primeira versão do Windows NT e que o Windows NT mantém em ambos os volumes NTFS e FAT, disponível para ferramentas Cygwin.

No entanto, o mesmo não é verdade no mundo GNU Linux. A capacidade de tempo de criação ainda não chegou a GNU coreutils ' ls ou para GNU findutils ' find . Na verdade, nem sequer faz parte do kernel principal do Linux ainda. Parte do problema é que a chamada do sistema xstat(2) foi atolada em um desvio em que as pessoas queriam manter três carimbos de data e hora, em vez de ter quatro como na API do kernel do Windows NT e copiar ctime para substituí-lo por crtime .

A resposta de Linus Torvalds em 2010 foi que "tudo é totalmente inútil e as pessoas não conseguem nem concorde com um nome "e" Vamos esperar cinco anos ".

Na verdade, como suspeito que a maioria das pessoas lendo isso saberá, o mundo tem concordado amplamente com o nome "tempo de criação" desde os anos 80 e já estamos esperando pelo menos 25 anos. É o nome usado no OS / 2 1.0; é o nome usado no VMS ODS-1; é o nome usado no Windows NT 3.5; é o nome usado no SMB; e é o nome usado na pergunta. ☺

Leitura adicional

por 19.01.2014 / 16:53
1

Eu não posso realmente responder a esta pergunta, mas pelo menos eu posso lhe dar uma dica: o livro Implementando o CIFS: O Common Internet File System de Christopher R. Hertel tem estas duas páginas muito interessantes: / p>

página 1 e página 2

Eles parecem indicar que é possível recuperar as informações que você está procurando.

    
por 19.01.2014 / 09:06