bs
arabellek boyutu, dd tarafından yapılan tek bir okuma () çağrısının boyutunu ifade eder .
(Örneğin, her ikisi de bs=1M count=1
ve bs=1k count=1k
1 SGA dosyası neden olur, ancak ikinci 1024 parçalı halde yapacak Birinci versiyon, tek bir adımda yapacak.)
Düzenli dosyalar hemen hemen her tampon boyutunda okunabilir (arabellek RAM’a sığdığı sürece), ancak aygıtlar ve "sanal" dosyalar çoğu zaman bireysel aramalara çok yakın çalışırlar ve her biri için ne kadar veri üreteceklerini keyfi bir şekilde kısıtlarlar. okuma () çağrısı.
Çünkü /dev/urandom
bu sınır, urandom_read () ' da drivers / char / random.c içinde tanımlanmıştır :
#define ENTROPY_SHIFT 3
static ssize_t
urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
{
nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
...
}
Bu, işlev her çağrıldığında istenen boyutu 33554431 bayta sıkıştıracağı anlamına gelir.
Varsayılan olarak, diğer araçların aksine, dd istenenden daha az veri aldıktan sonra yeniden denemez - 32 MiB'ye sahip olursunuz. (Kamil'in cevabında olduğu gibi, otomatik olarak yeniden denemek için, belirtmeniz gerekir iflag=fullblock
.)
Ayrıca, "tek bir okuma boyutunun ()", tüm tamponun bir kerede belleğe sığması gerektiği anlamına geldiğini, bu nedenle büyük blok boyutlarının aynı zamanda dd ile yapılan büyük bellek kullanımına karşılık geldiğini de unutmayın .
Ve hepsi anlamsızdır, çünkü genellikle 16–32 MiB blokların üstüne çıkarken hiçbir performans elde edemezsiniz - sistemler burada yavaş parça değil, rasgele sayı üretecidir.
Yani basitlik için, sadece kullanın head -c 1G /dev/urandom > output
.
dd
. Bana kalırsa doğruhead
,cat
ya darsync
hemen hemen her zaman onun yerine. Ve sorunuz, alternatiflerin genellikle daha güvenli olmasının nedenlerinden biriyse.