cómo llenar una tarjeta SDXC de 64 gb con archivos aleatorios

3

Necesito crear archivos por un valor de 64 GB con un tamaño entre 30 y 50 MB para evaluar la copia de una gran cantidad de archivos desde una tarjeta SDXC a un disco duro externo. Así que necesito algunos archivos para probar.

¿Me imagino que podría crear un número arbitrario de archivos (pueden ser bytes aleatorios) con un tamaño de archivo entre x MB y y MB que en total no limitan un tamaño de z GB en OSX?

¿Es esto fácil de hacer en la terminal para un no programador?

    
pregunta steros 27.08.2016 - 23:57

2 respuestas

6

64 GB de archivos, de 30 a 50 MB cada uno

Primero, hay un par de maneras de crear archivos grandes. Este comando crea un archivo de ceros de 30 MB muy rápidamente.

dd if=/dev/zero of=file.dat count=30 bs=1048576

Este comando crea un archivo de 50 MB de bytes aleatorios. No es tan rápido como un archivo de ceros.

dd if=/dev/urandom of=file.dat count=50 bs=1048576

Aquí hay otros comandos útiles para este proyecto.

jot -r 1 30 50             # makes a random number between 30 and 50
du -sm . | awk {'print $1'} # finds the size in MB for the current folder

Shell script

Elegir archivos de ceros (es más rápido) y juntar todo en un script de shell:

#!/bin/sh
min=1          # minimum file size
max=1          # maximum file size
limit=1        # limit of total files size
filetype="dat" # filetype
folder="."     # folder to put files in
zeros=1        # fill with zeros or random bytes?

while getopts ":h:n:m:l:f:t:z:" opt; do
  case $opt in
    h) echo "-n {min. file size in MB} -m {max. file size in MB} -l {limit of total size of all files in GB} -t {string filetype without dot ex.: 'jpg'}-z {1 = fill with zeros | 0 = fill with random bytes (slower) }"
    ;;
    n) min="$OPTARG"
    ;;
    m) max="$OPTARG"
    ;;
    l) limit="$OPTARG"
    ;;
    f) folder="$OPTARG"
    ;;
    t) filetype="$OPTARG"
    ;;
    z) zeros="$OPTARG"
    ;;
    \?) echo "Invalid option -$OPTARG" >&2
    ;;
  esac
done

if [ $zeros -eq 1 ]
then
  source=/dev/zero
else
  source=/dev/urandom
fi

n=1                                      # count files
lm=$((($limit*1000)-($max-1)))           # real total file size limit
sz='du -sm "$folder" | awk {'print $1'}' # size of folder in MB

while [ $sz -lt $lm ];
do
   cnt='jot -rn 1 $min $max';
   dd if=$source of=$folder/file$n.$filetype count=$cnt bs=1048576 2> /dev/null;
   status=$?;
   if [ $status -eq 0 ]; then
      echo file$n.$filetype $cnt MB;
   else
      echo write file$n.$filetype failed;
      exit $status;
   fi
   let n=n+1;
   sz='du -sm "$folder" | awk {'print $1'}';
done
exit;
  • n cuenta los archivos para que cada archivo tenga un nombre diferente
  • cnt es un número aleatorio de $ min a $ max que utiliza el comando dd para crear un archivo entre $ min MB y $ max MB

Copie el script y péguelo en una nueva ventana de TextEdit. Seleccione Format->Make Plain Text en la barra de menú. Guarde el archivo en el escritorio y asígnele el nombre random_data_files.sh .

Creando los archivos

Abra una ventana Terminal y ejecute estos comandos:

cd ~/Desktop
chmod a+x random_data_files.sh

Haz una carpeta o monta una tarjeta SDXC. cd a la carpeta o tarjeta. Ejecute el script de shell.

~/Desktop/random_data_files.sh -n 30 -m 50 -l 64 -t jpg -f {your_folder}

El script creará aproximadamente 1,600 archivos (a veces más, a veces menos) para 64 GB de archivos de 30 a 50 MB. Abra otra ventana de Terminal en la misma carpeta o la misma tarjeta, y use:

du -h

para ver el progreso de la secuencia de comandos. Por favor, comente si algo no está claro o si tiene un problema.

    
respondido por el creidhne 28.08.2016 - 03:15
3

Alternativo:

mkfile -v $(echo "$((30+$RANDOM*20/32767))")m "/tmp/$(date)"
sleep 1

En mi SSD, la suspensión se asegura de que 'fecha' no repita el nombre del archivo, ya que el archivo mk toma 100-200 milisegundos. Los archivos son todos ceros. La -v hace que te diga el tamaño del archivo.

Repita esto hasta que reciba un mensaje de error completo del dispositivo.

'dd' toma solo 15-20 milisegundos para todos los ceros y de tres a cinco segundos para la variación aleatoria.

    
respondido por el WGroleau 28.08.2016 - 05:26

Lea otras preguntas en las etiquetas