如何擦除硬盘驱动器
Posted
技术标签:
【中文标题】如何擦除硬盘驱动器【英文标题】:How to erase a Hard Disk Drive 【发布时间】:2012-11-03 15:48:27 【问题描述】:这是一个奇怪的问题,但在这里。我想编写一个程序来用 1s 然后 0s 刷新我的外部硬盘驱动器来彻底清理它,这样我就可以卖掉它了。现在,我为什么要编写自己的软件而不是只使用 DBAN?
据我了解,DBAN 会删除它检测到的所有硬盘。我只想清洁我的外部。
DBAN 闪烁七次。我觉得这对我的目的来说有点过分,因为我的外部不包含非法材料或信用卡信息。
说实话,我其实对固件的工作原理有点好奇。
Google 出现的次数并不多(愚蠢的 Adobe Flash)。我更喜欢在 C/C++ 中执行此操作,但其他语言也可以使用,包括汇编。
【问题讨论】:
使用dd if=/dev/zero of=/dev/sdX
。无需编写程序。
(而且我不认为这个词是“flash”——也许是“scrub”。)
@JanDvorak:为什么?有什么意义?
大声笑,我记得The Great Zero Challenge 的成立是为了一劳永逸地解决这个问题。不幸的是,它可能没有足够好地宣传以得出结论。
这不是一个真正可以回答的问题。 “我想写一个程序……因为我不想使用已经存在的东西。”。认真的吗?
【参考方案1】:
嗯,用 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
。)
请注意,由于缓存,程序在打印“完成”后可能会在最后挂起一段时间。它并没有真正挂起,只是写操作的缓存会阻塞它,直到它们全部完成。
【讨论】:
【参考方案2】:据我了解,DBAN 会删除它检测到的所有硬盘。我只想清洁我的外部。
It doesn't.
DBAN 闪烁七次。我觉得这对我的目的来说有点过分了,因为我的外部不包含非法材料或信用卡信息。
但是当你早上醒来时,它就完成了,对吧?另外,它是apparently configurable。
说实话,我其实对固件的工作原理有点好奇。
IMO,这不是最好的起点。
【讨论】:
【参考方案3】:作为注释。您的问题似乎是关于擦除数据,也就是粉碎等。
刷写硬盘就是更新内部软件。如: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
...
虽然情况相反,但您可以查看/搜索取证。 IE。 FAU、Open Source Digital Forensics 等以获取更多信息。
A bit more on wiping.
【讨论】:
你在正确的轨道上。hdparm
还可用于调用所有现代 ATA 驱动器上的固件级 secure-erase 功能。以上是关于如何擦除硬盘驱动器的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MySQL 数据库从一个硬盘驱动器移动到另一个硬盘驱动器?