Grave arquivos em pendrive sem sistema de arquivos
Publicado por Davidson Francis (última atualização em 28/08/2013)
[ Hits: 5.032 ]
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
Atualisar e instalar pacotes no sistema.
Script de Backup de DVD com growisofs
Baixando e instalando BrOffice 3 no Ubuntu
Agora temos uma assistente virtual no fórum!!! (247)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
iso de sistema 32 bit em atividade (16)
Reset do linux sem perder dual boot (3)
Impressora Canon Ip 1800 (Drivers) 64 bit (3)
Como transfiro os pokemons do fire red para o emulador mupen64? (1)