如何擦除硬盘驱动器

时间:2012-11-15 02:43:47

标签: c linux erase hard-drive

这是一个奇怪的问题,但在这里。我想写一个程序来闪存我的外部硬盘1s然后0s完全清理它所以我可以卖它。现在,为什么我要编写自己的软件而不是仅仅使用DBAN?

  1. 根据我的理解,DBAN会删除它检测到的所有硬盘。我只想清理外部。

  2. DBAN闪烁七次。我认为这对我的目的有点过分,因为我的外部不包含非法材料或信用卡信息。

  3. 老实说,我真的很好奇固件是如何工作的。

  4. 谷歌并未出现过多(愚蠢的Adobe Flash)。我更喜欢在C / C ++中这样做,但其他语言也适用,包括汇编。

3 个答案:

答案 0 :(得分:5)

好吧,在C中这样做很容易。首先,在写入模式下打开相应的设备文件:

int fd = open("/dev/sdc", O_WRONLY);

你只需要write() 512字节块,直到你不能再写了。较新的磁盘使用4096字节扇区,但操作系统通常将它们视为具有512字节扇区,因此512是最安全的值。这是一个完成这个的C程序:

(注意:非常小心选择正确的/ dev设备文件,否则你将要清除错误的磁盘!)

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main(void)
{
    int fd = open("/dev/sdd", O_WRONLY);
    if (fd < 0) {
        fprintf(stderr, "Error opening device file.\n");
        return EXIT_FAILURE;
    }

    // Write 0's all over the disk, in chunks of 512 bytes.
    char* zeros = calloc(1, 512);
    ssize_t written, total = 0;
    do {
        total += written = write(fd, zeros, 512);
        printf("\rBytes written: %ld", total);
    } while (written == 512);
    printf("\nDone!\n");

    close(fd);
    free(zeros);
    return 0;
}

如果删除printf(),您可能会加速,尽管看到进展情况有点酷。您可能还应该在结尾处执行其他错误检查(如果written为-1,则发生错误,您应该检查errno。)

请注意,由于缓存,程序在打印“完成”后可能会在结束时挂起一段时间。它并没有真正悬挂,只是写入操作的缓存才阻止它,直到它们全部完成。

答案 1 :(得分:2)

  

根据我的理解,DBAN会删除它检测到的所有硬盘。我只想清理外部。

It doesn't

  

DBAN闪烁七次。我认为这对我的目的来说有点过分,因为我的外部不包含非法材料或信用卡信息。

但是当你早上醒来时,已经完成了,对吧?此外,它是apparently configurable

  

说实话,我实际上对固件如何工作很好奇。

IMO,这不是最佳起点。

答案 2 :(得分:1)

作为一个说明。你的问题似乎是关于删除数据,也就是粉碎等。

闪存硬盘将更新内部软件。如:HDD has its own firmware。在Linux下你可以做,即:。

$ sudo hdparm -I /dev/sda

然后您将获得以下信息:

ATA device, with non-removable media
    Model Number:       ST31000524AS                            
    Serial Number:      XXXXXXX
    Firmware Revision:  JC4B    
    Transport:          Serial, SATA Rev 3.0

...

这是另一种方式,你可以看看/搜索取证。即FAUOpen Source Digital Forensics等获取更多信息。

A bit more on wiping