我有一个坏的硬盘驱动器,之前我把它发送给RMA我想尽可能从它擦拭。 我尝试使用Windows实用程序,也做了/ dev /随机的dd。 问题是我不能等待这些解决scheme中的任何一个完成,因为RMA的原因是它以1 MB /秒的最大速度写入。 500GB硬盘一次只需要140个小时。
我一直在寻找一个实用程序(甚至是Linux上的bash脚本),随机挑选扇区,并向这些扇区写入随机数据(甚至是零)。 我希望如果我运行这个24小时,这将擦除大约80 GB的数据。 由于它是随机select的,所有较大的文件将不可能恢复,较小的文件将被擦除,将丢失块或可能可恢复。 不幸的是,在这一点上,这是我的最佳解决scheme。
解
感谢“evildead”,我能够获得驱动器上的大量数据,随机填充/ dev / urandom中的垃圾。 如果有人需要,bash脚本如下:
#!/bin/bash while (true); do randnum=${RANDOM}${RANDOM} number=$((10#$randnum%976773168)) echo -e $number >> progress.txt dd if=/dev/urandom of=/dev/sdx1 skip=$number count=1 done
您将需要用驱动器上的块数replace976773168。 我最初在bash中尝试了$ RANDOM,但它只是一个16位整数,因此只有32k。 因为我需要一个超过9亿的数字,所以我将两个$ RANDOM值相加,例如,如果我的随机数是22,861和11,111,那么我得到了2,286,111,111,然后将其与我的块大小相匹配,在我的范围内得到一个非常随机的值。 它没有完美的熵,但是再一次,电脑上真的是随机的? ;)如果第一个随机数是0,那么10#就是这样,它强制bash使用基数10,而不是基数8,如果它认为数字是八进制数(前导零),则使用它。 我也将这些随机数字写入一个文件中,稍后分析一下这个数据是什么。 如果你不需要这个,你可以把它拿出来
echo -e $number >> progress.txt
它会运行良好。 另外不要忘记用实际的驱动器或分区来代替sdx1 。 我希望这对某人有帮助,我知道这对我有帮助。
你可以使用shell和dd结合使用。
例如
while (true); do number=$((($RANDOM * 32768 + $RANDOM))) dd if=/dev/urandom of=/dev/sdx1 seek=$number count=1 done
你只需修改从$ RANDOM生成的数字,以适合你的块。
编辑2016年:请注意,旧的解决scheme是不正确的。 因为我们想在输出stream的随机位置覆盖一个字节,所以我们必须使用seek来代替skip,正如注释中所提到的那样。
我的系统没有损坏,从/dev/random写入约为650Kb / s。 从/dev/urandom写入是7Kb / s。
我已经为自己工作这个问题,并为纯粹的bash解决scheme,你必须是现实的,你的目标是什么,因为除非你的目标是学习如何在bash中做到这一点,因为重点是在bash中做的所有目标虽然bash在解决scheme中很有用,但是以其他方式更好地完成擦除磁盘。
evildead的bash algorythm随机selectdd将写入驱动器的工作,但是,/ dev / urandom比/ dev / random要慢很多,我认为用随机数据块来驱动硬盘是不太安全的,我认为它会如果你快速地做两遍写一个零的时间,就很难从擦除的驱动器中检索数据。
对于我自己,我写了一些驱动器与:
tr '\0' '\377' < /dev/zero | pv > /dev/sdz
然后我给驱动器写了零:
pv < /dev/zero > /dev/sdz
请注意使用pv。 这是一个伟大的程序,但你必须在大多数系统上安装它。 很容易find,似乎没有一个手册页,但有一个在线。 它显示了通过pipe道传输数据的进度,有些程序甚至可以在传递一定数量的数据后将其设置为停止。
那么纯粹是因为我恼火的是没有bash解决scheme会像上面写的任何一个那样写随机数,所以我写了一个叫做svrandom的小型C程序来产生随机数QUICKLY,我从bash调用如下:
while :; do ./svrandom; done | pv > /dev/sdz
在我的系统上,写入/ dev / zero的速度与随机数一样快地填充驱动器/ dev / sdz。 用随机数擦拭驱动器的目标达到了,并且在解决scheme中使用了bash。
/* svrandom a small program from shadowvision.com September 2015 to generate strings of random numbers. the default setting of 10000000 gives about 453 megs, adjust as needed */ #include <stdio.h> #include <stdlib.h> int main() { int r,a,b; /* adjust following number as needed to suit your string length */ for(a=0;a<10000000;a++) { for(b=0;b<5;b++) { r=rand(); printf("%d",r); } } return(0); }
在源文件中,我提到你可以通过调整一个数字来控制随机数字串的长度。 如果你从while循环中调用它,你不需要,虽然在每个循环结束时可能会有一个回车,但是如果你只想从程序中得到一个连续的string,你将不得不改变这个数字。
喀嚓! 四处张望,我发现这个解决scheme在https://superuser.com/questions/19326/how-to-wipe-free-disk-space-in-linux
openssl enc -aes-256-ctr -pass pass:“$(dd if = / dev / urandom bs = 128 count = 1 2> / dev / null | base64)”-nosalt </ dev / zero | pv> / dev / SD {X}
就像那个家伙说的那样,我不敢相信这是多快。 它写入磁盘的速度比我认为磁盘的最大写入速度要快。
在我看来,这个命令是使用openssl来encryption/ dev / urandom作为种子从/ dev /零零string,但我不是100%确定。 我用C程序写的随机数字解决scheme以82mbps写入我的系统,这个openssl解决scheme的写入速度是100mbps。 哇!
如果你有一个强大的磁铁,你可以物理擦拭它。
我拆开旧的硬盘,从磁头定位组件中取出音圈磁铁。 这些是稀土磁铁,从典型的3.5“驱动器,它们足够强大,足以抹去硬盘驱动器上足够的伺服磁道,因此它将完全无法使用。
无论如何,拿到磁铁,在驱动器的顶盖上来回擦拭,在不到一分钟的时间里,你将有一个死亡的驱动器。 由于无论如何都是RMA,他们不应该在意。
Darik的Boot and Nuke(又名DBAN)是最好的自动化这个过程的软件,
这是一个启动CD,具有全面的驱动擦拭机制,具有很强的抗干扰性(擦拭驱动器的时间)
感谢您的解决scheme!
由于我不允许用脚本评论答案,所以我必须自己添加我的小增强。
为了更方便,我只是稍微调整了一下,以便只需要定义设备。 fdisk将会提供多less个扇区:
#!/bin/bash # add device to mangle # example: # disk=/dev/sde disk= # get number of sectors sectors=$(fdisk $disk -l| head -1| awk '{print $7}') # run while (true); do randnum=${RANDOM}${RANDOM} number=$((10#$randnum%$sectors)) echo -e $number >> progress.txt dd if=/dev/urandom of=$disk skip=$number count=1 done
dban选项是对这个问题的正确答案。
从/ dev / random写入“随机”数据会在大多数系统上遇到问题,因为您会耗尽系统上的熵,并且非常缓慢地写入数据。
几乎和/ dev / random一样,“随机”是用一个随机密码短语来encryption一串零。 你可以使用dd和openssl来做到这一点,它可以让系统像系统能够写入磁盘一样快(而不是等待/ dev / random)。 你可以在运行3-5次的同时,运行一些刚刚从/ dev / random进行的操作。
dd if=/dev/zero | openssl des > /dev/hda13