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 / 438162
Accepted
Dave
Dave
Asked: 2018-04-17 09:49:51 +0800 CST2018-04-17 09:49:51 +0800 CST 2018-04-17 09:49:51 +0800 CST

Restaurar arquivos do tar usando rsync

  • 772

Estou escrevendo a funcionalidade de atualização de software para um equipamento embarcado. Atualmente, o sistema de arquivos raiz é atualizado pegando um novo arquivo rootfs.tar.gz e descompactando-o no sistema de arquivos raiz (substituindo os arquivos existentes e adicionando novos). Mas isso não exclui os arquivos que não estão no novo pacote.

Portanto, agora vou ter que rm -rf todos os arquivos existentes e descompactar o novo arquivo rootfs tar. Isso parece muito trabalhoso e leva muito tempo, e talvez a única coisa que mudou foi um arquivo de configuração.

Em vez disso, gostaria de poder rsync o conteúdo de um arquivo .tar.gz para um diretório. Isso é possível sem passar por algum tipo de intermediário (ou seja, sem descompactar o tar em um diretório temporário e fazer o rsync)?

linux rsync
  • 1 1 respostas
  • 706 Views

1 respostas

  • Voted
  1. Best Answer
    Austin Hemmelgarn
    2018-04-17T11:12:27+08:002018-04-17T11:12:27+08:00

    Diretamente, não tem como fazer o que você quer. Conforme mencionado nos comentários, archivemount pode ser uma opção, embora tenha suas próprias limitações (uma das quais é a dependência de uma opção de configuração específica habilitada quando você criou o kernel).

    No entanto, existem duas opções alternativas que vêm à mente:

    1. Use imagens SquashFS em vez de arquivos tar gzipados. Eles podem ser montados diretamente pelo kernel e, em muitos casos, serão menores do que um arquivo tar compactado equivalente. Você pode então usar o rsync da imagem montada do SquashFS. Se você estiver usando o Buildroot para construir o sistema de arquivos raiz para isso, há uma opção para gerar diretamente essa imagem.

    2. Em vez de ter apenas uma partição raiz, use duas. Ao fazer uma instalação inicial, grave todos os dados em ambas as partições e configure o gerenciador de inicialização para inicializar apenas a partir de uma delas. Quando você atualizar o sistema, destrua a outra partição, extraia seu arquivo raiz lá, atualize o bootloader para inicializar a partir dele e, em seguida, reinicie. Embora isso demore um pouco mais para executar atualizações do que o que você está propondo, ele tem algumas grandes vantagens:

      • Ele permite reverter uma atualização que quebrou algumas funcionalidades quase instantaneamente. Em vez de ter que reinstalar o firmware antigo, basta atualizar o gerenciador de inicialização para inicializar a partir da outra partição raiz e reiniciar.
      • Isso torna muito difícil bloquear o sistema. Como você só atualiza o gerenciador de inicialização após a conclusão da atualização, pode garantir que não inicializará em um sistema de arquivos raiz parcial devido à perda de energia no meio de uma atualização.
      • Ele possibilita a recuperação da corrupção de dados em repouso no hardware de armazenamento sem a necessidade de RAID (embora, se for necessário um dispositivo confiável, você deva considerar seriamente o RAID de qualquer maneira). Se você sabe que sua versão atual é 'ruim', apenas reverta temporariamente para a versão anterior e reinstale a nova versão.
      • Ele reduz o tempo de inatividade. Para sua estratégia, você tem que fazer quase tudo com o dispositivo funcionalmente off-line (caso contrário, corre o risco de as coisas falharem misteriosamente durante a atualização). Com esse método, você pode reduzir o tempo de inatividade necessário para uma atualização para o tempo necessário para reinicializar o dispositivo.
    • 2

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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