Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.557 ]
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
Controle de banda com tc do pacote iproute2
Convertendo rotas Linux para Fortigate
Coleta de Informações de crescimento de utilização de file system
Instalação de servidor DHCP rápido e fácil
File Browser: Crie sua Nuvem Pessoal Privada
A produção de áudio e vídeo no Linux e as distribuições dedicadas a esse fim
Criptografando sua Home com Gocryptfs para tristeza do meliante
A Involução do Linux e as Lambanças Desnecessárias desde o seu Lançamento
O Journal no Linux para a guarda e consulta de logs do sistema
Gerenciamento de Vídeo Híbrido (Intel/NVIDIA) via nvidia-prime no Ubuntu e derivados
Assistindo IPTV no Linux com Fred TV e Lista Free TV
Impressora Tomate MDK-007 no Ubuntu (ou qualquer distro Linux)
Acelerando a compilação de pacotes no Arch Linux (AUR) usando todos os núcleos do processador
O computador não reconhece a câmera (2)
Depois não querem que eu fale sobre as baseadas... (3)









