InicioLinuxGrabando archivos en un pendrive sin sistema de archivo

Grabando archivos en un pendrive sin sistema de archivo

Linux•9/2/2013
Básicamente este script, graba los archivos utilizando el dd, junto a eso genera lo que se llama "Header" (que será grabado junto con el archivo deseado en un medio removible o extraible), que identifica el nombre y tamaño del archivo en cuestion. (en sus primeros 30 byte), para cuando volvamos a copiar el archivo de vuelta para el HD (por ejemplo) podamos saber exactamente el punto en que el archivo se encuentra en el pendrive. (estamos trabajando en la ausencia de un FS).

Un punto interesante de grabar archivos de esta manera, es que sólo los que están en posesión de NTN (y saber que el pendrive posee archivos), podra extraer desde alli, al final ninguna S.O. podra montar la unidad.

El script en si permite la grabación de un único archivo, si comprimimos los archivos en uno podemos colocar la canitdad que necesitamos.

El código en si es simple de entender.


#!/bin/bash
clear
 
echo "------------------------------------------------"
echo "Grabar archivos sin sistema de archivos"
echo "------------------------------------------------"
echo "################################################"
echo "# No utilice el disco duro como destino                                  #"
echo "# para el almacenamiento utilizar un pendrive                       #"
echo "# asegurese de realizar un backup.                                       #"
echo "#                                                                                             #"
echo "################################################"
echo ""
 
function grabar()
{
    echo ""
    echo "Escriba el nombre del archivo:"
    read arq2
 
    while [ ${#arq2} -gt 17 ]
    do
        echo "Nombre muy largo, por favor renombre por uno mas corto!"
        read arq2
    done
 
    echo "Escriba la ruta de destino:"
    read destino
 
    echo ""
    echo "Creando header..."
 
    echo $(du -b $arq2 | cut -f1 -s) > .htmp
    tamanho=$(wc -m .htmp | cut -d' ' -f1)
    tamanho=$((10-$tamanho));
 
    #Creación del campo tamaño
    rm .h 2&>/dev/null
    while [ $tamanho -gt 0 ]
    do
        echo -n "0" >> .h
        tamanho=$(($tamanho-1));
    done
    cat .htmp >> .h
    rm  .htmp
 
    #Creación del campo nombre archivo
    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
 
    #Grabando en el dispositivo
    echo ""
    echo "------------------------"
    echo "Grabando header..."
    dd status=noxfer conv=notrunc if=./.h of=$destino 2>/dev/null
 
    echo ""
    echo "Grabando archivo..."
    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 "Escriba la ruta del dispositivo:"
    read origen
 
    echo ""
    echo "------------------------"
    echo "Leyendo header..."
    dd status=noxfer if=$origen of=.h bs=1 count=30 2>/dev/null
 
    echo ""
    echo "Grabando archivo..."
    dd status=noxfer if=$origen of=$(tail -n1 .h | cut -f2 -s) bs=1 ibs=1 skip=30 count=$(head -n1 .h) 2>/dev/null
    echo "------------------------"
 
    rm .h
}
 
function crear_archivo()
{
    echo ""
    echo "Cual archivo sera generado? i.e: 1K/2K... 1M/10M..."
    read opt
 
    echo ""
    echo "Generando archivo..."
    dd status=noxfer if=/dev/zero of=arq.bin bs=$opt count=1 2>/dev/null
}
 
 
echo "Desea crear un archivo para almacenamiento(S/N) ?"
read opt
 
if [ $opt == 'S' ]
then
    crear_archivo
fi
 
echo ""
echo "Desea leer(1) o escribir(2)?"
read opt
 
if [ $opt -eq 1 ]
then
    ler
else
    if [ $opt -eq 2 ]
    then
        grabar
    fi
fi


Las criticas que puedan realizar, ayudan a mejorar mi conocimiento
Datos archivados del Taringa! original
215puntos
656visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
10visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
cagl86🇦🇷
Usuario
Puntos0
Posts54
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.