Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.287 ]
Creio que este script sirva mais para curiosidade/estudo do que para ser utilizado cotidianamente, mas, talvez seja útil a alguém.
Basicamente o NTN (nome dado a simples falta de criatividade: Não Tem Nome) grava arquivos utilizando o dd, em conjunto com isso é gerado o que chamo de "header" (que será gravado junto com o arquivo desejado na mídia removível) que identifica o nome e tamanho do arquivo em questão (nos seus primeiros 30 bytes), para quando formos copiar o arquivo de volta para o HD (por exemplo) possamos saber exatamente o ponto em que o arquivo se encontra no pendrive. (afinal, estamos trabalhando na ausência de um FS).
Um ponto interessante de gravar arquivos desta maneira, é que apenas quem estiver de posse do NTN (e souber que o pendrive possua arquivos) poderá extraí-los de lá, afinal, nenhum S.O. irá conseguir montar a unidade.
O script em si permite a gravação de apenas um único arquivo, mas comprimindo podemos colocar a quantidade que bem entendermos.
O código em si é simples de entender, mas fico a disposição para eventuais dúvidas que possam ter.
* Peço desculpas a eventuais erros e POGs no script, afinal, esse é o meu primeiro (de muitos) Shell Script.
#!/bin/bash clear echo "------------------------------------------------" echo " NTN v1.1, by Davidson " echo "------------------------------------------------" echo "################################################" echo "# Nao utilize o disco rigido como destino #" echo "# para armazenamento e ao utilizar pendrives #" echo "# certifique-se de realizar backup. #" echo "# #" echo "# Um metodo alternativo seria criar um arquivo #" echo "# como destino para o armazenamento. #" echo "################################################" echo "" function gravar() { echo "" echo "Digite o nome do arquivo:" read arq2 while [ ${#arq2} -gt 17 ] do echo "Nome muito grande, por favor renomeie para um menor!" read arq2 done echo "Digite o caminho do dispositivo destino:" read destino echo "" echo "Criando header..." echo $(du -b $arq2 | cut -f1 -s) > .htmp tamanho=$(wc -m .htmp | cut -d' ' -f1) tamanho=$((10-$tamanho)); #Obtencao/criacao do campo tamanho rm .h 2&>/dev/null while [ $tamanho -gt 0 ] do echo -n "0" >> .h tamanho=$(($tamanho-1)); done cat .htmp >> .h rm .htmp #Obtencao/criacao do campo nome arquivo echo "" >> .h tamanho=$((17-${#arq2})); while [ $tamanho -gt 0 ] do echo -en "0" >> .h tamanho=$(($tamanho-1)); done echo -en "\t" >> .h echo $arq2 >> .h #Gravacao no dispositivo echo "" echo "------------------------" echo "Gravando header..." dd status=noxfer conv=notrunc if=./.h of=$destino 2>/dev/null echo "" echo "Gravando arquivo..." dd status=noxfer conv=notrunc if=./$arq2 of=$destino bs=1 obs=1 seek=30 2>/dev/null echo "------------------------" rm .h } function ler() { echo "" echo "Digite o caminho do dispositivo:" read origem echo "" echo "------------------------" echo "Lendo header..." dd status=noxfer if=$origem of=.h bs=1 count=30 2>/dev/null echo "" echo "Gravando arquivo..." dd status=noxfer if=$origem of=$(tail -n1 .h | cut -f2 -s) bs=1 ibs=1 skip=30 count=$(head -n1 .h) 2>/dev/null echo "------------------------" rm .h } function criar_arquivo() { echo "" echo "Qual do arquivo a ser gerado? i.e: 1K/2K... 1M/10M..." read opt echo "" echo "Gerando arquivo..." dd status=noxfer if=/dev/zero of=arq.bin bs=$opt count=1 2>/dev/null } echo "Deseja criar um arquivo para armazenamento(S/N) ?" read opt if [ $opt == 'S' ] then criar_arquivo fi echo "" echo "Deseja ler(1) ou escrever(2)?" read opt if [ $opt -eq 1 ] then ler else if [ $opt -eq 2 ] then gravar fi fi
Script para configuracao rapida da eth0
Script de backup em um case USB
Personalizando o seu shell com bashrc_dahora
Mantendo hora do servidor atualizada com NTP
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Software livre - será que eu estou tão errado assim? (10)
Boot do PosRog so funciona em notebook (1)