AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 669234
Accepted
leetbacoon
leetbacoon
Asked: 2021-09-16 20:56:13 +0800 CST2021-09-16 20:56:13 +0800 CST 2021-09-16 20:56:13 +0800 CST

Fazer backup e restaurar registros de data e hora de arquivos/diretórios?

  • 772

Precisamos fazer backup dos carimbos de data/hora a/c/m de arquivos e diretórios e ter a capacidade de restaurá-los, se necessário.

Um exemplo de comando para fazer backup pode ser:

$ timestamp backup --all-stamps --incl-dir-stamps --recursive out.stampbak file.bin /dir/with/files/

E para restaurar poderia ser:

$ timestamp restore --all-stamps out.stampbak

Existe tal comando para alcançar os resultados que procuro? Precisão de nanossegundos seria preferível, ou qualquer outra coisa mais granular, embora eu acredite que a maioria dos sistemas de arquivos pare em nanossegundos. A conformidade com POSIX também é importante, pois precisamos que os timestamps nos sistemas BSD e GNU/Linux sejam apoiados/restaurados.


Editar: Para esclarecer algumas coisas, os sistemas de arquivos que listei estão, na maioria das vezes, mantendo arquivos por enquanto até que eu possa movê-los para um servidor ZFS mestre. Foi isso que nos fez considerar a possibilidade de preservar os timestamps antes de migrar os dados para o ZFS. Caso os carimbos sejam alterados durante o processo de transferência (usamos vários métodos como HTTP, FTP, SMB), queremos garantir que eles possam ser restaurados para o que deveriam ser. Mesmo após a transferência, seria benéfico manter os carimbos de data/hora como um pequeno backup, portanto, independentemente do fato de os arquivos terminarem no ZFS, a questão ainda é sobre backup/restauração de carimbos de data/hora apenas. Permissões e informações de grupo podem ser omitidas do backup.

Os sistemas operacionais usados ​​para fazer backup de timestamps incluem macOS Mojave 10.14.6, Ubuntu Server 18.04.5 LTS, Debian 10.2/7.8, FreeBSD 12.2 e CentOS 8. A restauração será feita principalmente no FreeBSD (host do servidor ZFS), eu não t acho que será necessário em qualquer outro lugar. Se ajuda mencionar, tenho algumas unidades com arquivos em partições NTFS. É necessário executar uma pequena instância do Windows para fazer backup desses carimbos corretamente?

Além disso, fiquei com a impressão de que a maioria dos sistemas de arquivos usava atime, ctime e mtime, e nenhum outro (suponho que isso difere entre os sistemas de arquivos). Meu objetivo é salvar e restaurar todos eles, se possível.

Mencionei a conformidade com POSIX, pois a ferramenta pode ser usada em qualquer plataforma - peço desculpas se minha descrição anterior estava incorreta ou inadequada. Também pensei ctime = hora de criação/nascimento, agora vejo que é hora de mudança.

Os timestamps de maior importância a serem mantidos são o tempo de criação/nascimento e o tempo de modificação. O tempo de acesso também seria bom, o tempo de mudança é de menor importância, mas ainda ajudaria a ter. Novamente, peço desculpas pelo erro, ainda estou aprendendo.


Edit 2: Neste artigo eu aprendi isso:

  • não há registro de data e hora de criação de arquivo mantido na maioria dos sistemas de arquivos – o que significa que você não pode executar um comando como “mostre-me todos os arquivos criados em determinada data”. Dito isso, geralmente é possível deduzir o mesmo de ctime e mtime (se eles corresponderem – isso provavelmente significa que foi quando o arquivo foi criado).

  • Quando um novo arquivo ou diretório é criado, geralmente todas as três horas – atime, ctime e mtime – são configuradas para capturar a hora atual.

Como o sistema de arquivos de destino será ZFS, onde os carimbos de data e hora dos arquivos/diretórios serão restaurados, provavelmente é melhor salvar pelo menos atime, ctime, mtime, caso o sistema de arquivos do qual os carimbos de data e hora foram salvos não armazene uma hora de nascimento.

backup posix
  • 3 3 respostas
  • 731 Views

3 respostas

  • Voted
  1. Best Answer
    ilkkachu
    2021-09-18T00:28:08+08:002021-09-18T00:28:08+08:00

    Se você tiver o GNU find e o Perl disponíveis, você pode montar algo com eles. A -printfação to findpode imprimir os timestamps, e o Perl tem a utimefunção de modificá-los. Ou dois, o interno e um no módulo Time::HiRes, o último suporta precisão de subsegundos.

    Alguns arquivos para teste:

    $ find . -printf '%A@ %T@ %p\n'
    1631866504.4180281370 1631866763.5380257720 .
    1631866763.5380257720 1631866768.2101700800 ./dir
    1631866768.2101700800 1631866768.2101700800 ./dir/bar.txt
    1631866760.2619245850 1631866760.2619245850 ./foo.txt
    

    Salve os carimbos de data/hora em um arquivo:

    $ find . -printf '%A@ %T@ %p\0' > ../times
    

    Vamos descartar os timestamps:

    $ touch -d 1999-01-01 **/*
    $ find . -printf '%A@ %T@ %p\n'
    1631866771.6022748540 1631866763.5380257720 .
    915141600.0000000000 915141600.0000000000 ./dir
    915141600.0000000000 915141600.0000000000 ./dir/bar.txt
    915141600.0000000000 915141600.0000000000 ./foo.txt
    

    e recarregue-os a partir do arquivo:

    $ perl -MTime::HiRes=utime -0 -ne 'chomp; my ($atime, $mtime, $file) = split(/ /, $_, 3); utime $atime, $mtime, $file;'    < ../times
    1631866771.6022748950 1631866763.5380258560 .
    1631866771.6022748950 1631866768.2101700310 ./dir
    1631866768.2101700310 1631866768.2101700310 ./dir/bar.txt
    1631866760.2619245050 1631866760.2619245050 ./foo.txt
    

    O arquivo simplesmente contém campos terminados em NUL com o atime, mtime e o nome do arquivo, e o snippet Perl chama utimecada conjunto de valores.

    Com NUL como terminador, ele deve ser capaz de lidar com nomes de arquivos arbitrários, mas observe que usei \nem vez de \0para as impressões aqui, o que não funcionará com esse trecho de Perl, pois espera NUL e não nova linha.

    Além disso, ignorei completamente o ctime, pois até onde sei, ele não pode ser definido com utime()/ de utimensat()qualquer maneira. O mesmo para qualquer carimbo de data/hora de nascimento.

    • 3
  2. schily
    2021-09-18T10:51:57+08:002021-09-18T10:51:57+08:00

    Como discutido anteriormente, a única maneira de definir ctimee semelhante é de dentro do kernel e as interfaces da área de usuário por um bom motivo não permitem definir carimbos de data e hora além de atimee mtime. Se você gosta de manter ctimee crtime, isso pode ser feito com ZFS/sende ZFS/receive, mas isso requer que já tenha ZFS em ambos os lados.

    Então deixe-me repetir o que eu acredito que você gosta de fazer:

    • Copie um sistema de arquivos existente para outro local

    • Retenha atimee mtime, ao fazer isso, copie ou restaure os registros de data e hora por um programa diferente posteriormente.

    Você pode fazer isso executando qualquer método de backup/restauração seguido por outro programa que restaura os carimbos de data/hora ou executando um método de backup/restauração capaz de restaurar os carimbos de data/hora corretamente.

    staré uma ferramenta de backup madura, que pode ajudá-lo com ambos os métodos.

    Se você gosta de usar starpara fazer backup e restaurar os sistemas de arquivos, incluindo os carimbos de hora, por favor, dê uma olhada na página man em: http://schilytools.sourceforge.net/man/man1/star.1.html

    Se você quiser salvar e restaurar os carimbos de data/hora separadamente, precisará salvar os carimbos de data/hora antes de executar o backup, pois o backup provavelmente afetará os atimevalores de todos os arquivos.

    • Para salvar todos os registros de data e hora de todos os arquivos de uma árvore de diretórios, basta executar:

      star -c -dump -meta f=timestamparchive.tar .
      
    • Para restaurar todos os carimbos de data/hora para o novo local, execute:

      star -xU -meta f=timestamparchive.tar
      

    O arquivo de arquivo criado pelo primeiro comando usa aprox. 1,5 kBytes por arquivo. O segundo comando restaurará todos os carimbos de data e hora de todos os arquivos no arquivo que já existem, mas não tocará no conteúdo do arquivo.

    BTW: Eu sou o autor da estrela desde 39 anos.

    • 1
  3. pell
    2021-09-17T13:16:12+08:002021-09-17T13:16:12+08:00

    O comando "ls --full-time" fornece um carimbo de data/hora completo para arquivos que podem ser formatados com "awk" e salvos em um arquivo nomeado com a hora atual usando "date":

    ls --full-time | awk '{print $6"\t"$7"\t"$9}' > timestamps.output.`date +%Y-%m-%d_%k:%M:%S.%N`
    

    Isso produz algo como:

    timestamps.output.2021-09-16_16:33:05.363928457:
    
    2021-09-16  16:13:40.988062443  file1
    2021-09-16  16:13:45.408053173  file2
    2021-09-16  16:13:49.496044596  file3
    2021-09-16  16:13:52.628038023  file4
    

    Isso permitiria que você acompanhasse as alterações nos carimbos de data e hora dos arquivos ao longo do tempo. Claro que você pode formatar os timestamps como quiser.

    Você também pode usar um repositório "git" para acompanhar as alterações do arquivo timestamp.output ao longo do tempo.

    • -1

relate perguntas

  • Desde quando o POSIX e o GNU rm não excluem /?

  • Como posso criar um loop aritmético em um script de shell POSIX?

  • Qual é a maneira correta de lidar com o código de saída do último comando?

  • Posso salvar o instantâneo do timeshift na caixa de depósito?

  • O que acontece com uma sessão unix quando o líder da sessão sai?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve