5

这是一个奇怪的问题,但在这里。我想编写一个程序来用 1s 然后 0s 刷新我的外部硬盘驱动器来彻底清理它,这样我就可以卖掉它了。现在,我为什么要编写自己的软件而不仅仅是使用 DBAN?

  1. 据我了解,DBAN 会删除它检测到的所有硬盘驱动器。我只想清洁我的外部。

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

  3. 老实说,我其实有点好奇固件是如何工作的。

谷歌并没有出现太多(愚蠢的 Adob​​e Flash)。我更喜欢在 C/C++ 中执行此操作,但其他语言也可以使用,包括汇编。

4

3 回答 3

6

好吧,用 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。)

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

于 2012-11-15T03:28:07.317 回答
2

据我了解,DBAN 会删除它检测到的所有硬盘驱动器。我只想清洁我的外部。

它没有

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

但是当你早上醒来时,它已经完成了,对吧?此外,它显然是可配置的。

老实说,我其实有点好奇固件是如何工作的。

IMO,这不是最好的起点。

于 2012-11-15T03:05:14.893 回答
1

作为注释。您的问题似乎是关于擦除数据,也就是粉碎等。

刷硬盘就是更新内部软件。如:硬盘有自己的固件。在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

...

尽管这是相反的方式,但您可以查看/搜索取证。即FAU开源数字取证等以获取更多信息。

更多关于擦拭

于 2012-11-15T03:07:05.370 回答