come riempire una scheda SDXC da 64 gb con file casuali

3

Ho bisogno di creare 64 GB di file con una dimensione tra 30 e 50 MB per valutare la copia di un numero elevato di file da una scheda SDXC su un HDD esterno. Quindi ho bisogno di alcuni file con cui provare.

Immagino di poter creare un numero arbitrario di file (possono essere byte casuali) con una dimensione del file compresa tra x MB e y MB che in totale non limitano una dimensione di z GB su OSX?

È facile farlo nel terminale per un non programmatore?

    
posta steros 27.08.2016 - 23:57
fonte

2 risposte

6

64 GB di file, da 30 a 50 MB ciascuno

In primo luogo, ci sono un paio di modi per creare file di grandi dimensioni. Questo comando crea molto rapidamente un file di 30 MB di zeri.

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

Questo comando crea un file da 50 MB di byte casuali. Non è veloce come un file di zeri.

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

Ecco alcuni altri comandi utili per questo progetto.

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

Script di shell

Scegliere i file di zeri (è più veloce) e mettere tutto insieme in uno script di 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 conta i file in modo che ogni file abbia un nome diverso
  • cnt è un numero casuale da $ min a $ max utilizzato dal comando dd per creare un file tra $ min MB e $ max MB

Copia lo script e incollalo in una nuova finestra TextEdit. Seleziona Format->Make Plain Text dalla barra dei menu. Salva il file sul desktop e chiamalo random_data_files.sh .

Creazione dei file

Apri una finestra Terminal ed esegui questi comandi:

cd ~/Desktop
chmod a+x random_data_files.sh

Crea una cartella o monta una scheda SDXC. cd alla cartella o alla carta. Esegui lo script della shell.

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

Lo script creerà circa 1.600 file (a volte più, a volte meno) per 64 GB di file da 30 a 50 MB. Apri un'altra finestra Terminale nella stessa cartella o nella scheda e utilizza:

du -h

per vedere i progressi della sceneggiatura. Per favore commenta se qualcosa non è chiaro o se hai un problema.

    
risposta data 28.08.2016 - 03:15
fonte
3

alternativo:

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

Sul mio SSD, il sonno assicura che "data" non ripeta il nome del file, poiché il file mkfile impiega 100-200 millisecondi. I file sono tutti zeri. Il -v ti fa dire la dimensione del file.

Ripeti fino a quando non ricevi un messaggio di errore completo del dispositivo.

'dd' richiede solo 15-20 millisecondi per tutti gli zeri e da tre a cinque secondi per la variazione casuale.

    
risposta data 28.08.2016 - 05:26
fonte

Leggi altre domande sui tag