O busybox é tão diferente do GNU cpio?

1

Estou tentando fazer um backup incremental usando o cpio, mas parece que a versão do busybox não funciona da mesma forma que a normal? Isso é o que eu tenho até agora:

find data/Backup -mtime -2 | cpio -cm media/USB_FLASH_2

Eu usei originalmente:

find . -mtime -2 | cpio -cm /media/USB_FLASH_2

No entanto, tenho visto pessoas dizerem que o busybox não gosta de caminhos definitivos ao usar o cpio. Não tenho certeza sobre isso.

Ele retorna um erro que basicamente diz que estou usando o cpio errado. Não consigo encontrar ninguém usando o busybox cpio para fazer coisas assim, isso significa que eu não posso fazer isso? Eu olhei para usar o rsync também, mas novamente, ele não faz o que eu esperaria.

Para referência, estou usando o PuTTY para conectar-se por SSH a um ReadyNAS 102.

Depois de usar find . -mtime -2 | cpio -o | { cd /media/USB_FLASH_2 && cpio -imd; }

eu recebo a saída:

BusyBox v1.20.2 (Debian 1:1.20.0-7) multi-call binary.

Usage: cpio [-dmvu] [-F FILE] [-H newc] [-tio] [EXTR_FILE]...

Extract or list files from a cpio archive, or
create an archive using file list on stdin

Main operation mode:
        -t      List
        -i      Extract EXTR_FILEs (or all)
        -o      Create (requires -H newc)
        -d      Make leading directories
        -m      Preserve mtime
        -v      Verbose
        -u      Overwrite
        -F FILE Input (-t,-i,-p) or output (-o) file
        -H newc Archive format
    
por user62094 07.03.2014 / 12:22

1 resposta

2

As opções que os comandos BusyBox têm dependem muito das opções com as quais o BusyBox é compilado. BusyBox pretende ser altamente configurável para que versões reduzidas muito pequenas possam ser compiladas para sistemas onde os recursos são muito limitados. Versões maiores e mais completas podem ser construídas onde isso não é um problema.

No seu caso, cpio precisa da opção -p ou --pass-through (formulário longo) ativada. Normalmente, o cpio se comporta mais como um utilitário de arquivamento como tar , mas também tem uma função extra que permite copiar arquivos. Para ativar isso em BusyBox , ele precisa ser construído com FEATURE_CPIO_P defined (também LONG_OPTS para opções de formulário longo a serem ativadas para qualquer programa).

Da sua última pergunta, eu recomendo strongmente que você use rsync para o que você está fazendo. Provavelmente, é melhor você fazer outra pergunta detalhando exatamente o que está fazendo com rsync e por que ela não faz o que você espera. rsync é uma ferramenta extremamente versátil e, sem dúvida, pode ser configurada para fazer o que você quer.

Dito isto, você poderia tentar o seguinte com cpio , isto irá criar um arquivo e depois extraí-lo novamente (um pouco menos eficiente, mas ainda o mesmo resultado):

find . -mtime -2 | cpio -o | { cd /media/USB_FLASH_2 && cpio -imd; }

Infelizmente, a opção -o também pode ser desativada na opção BusyBox ( FEATURE_CPIO_O build), portanto isso pode não funcionar.

Atualizar

Com base nessa linha de saída, você precisa adicionar uma opção extra ao criar um arquivo:

    -o      Create (requires -H newc)

Isso altera o comando para:

find . -mtime -2 | cpio -oH newc | { cd /media/USB_FLASH_2 && cpio -imd; }

Desta vez eu testei com o cpio no BusyBox para o meu próprio sistema e funciona para mim, no entanto, em alguns casos, os mtimes para diretórios não serão preservados. rsync deve ser a melhor maneira de fazer isso.

    
por 07.03.2014 / 13:32

Tags