Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.425 ]
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
Descom.sh - Descompactador de arquivos
Limpeza de logs sem dor de cabeça
Copiar sistema completo de um HD para o outro (Tipo Ghost)
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Não consigo instalar distro antiga no virtualbox nem direto no hd (11)
Quais os códigos mais dificeis que vcs sabem fazer? (12)
systemd-resol... precisa ser reiniciado periodicamente [RESOLVIDO] (7)









