【发布时间】:2017-04-29 17:12:15
【问题描述】:
我正在查看一些用于(安全)擦除硬盘的代码。我注意到在查看不同方法(Infosec 5、DoD 5220.22-M 等)时,我读到了“验证写入”。
例子:
https://www.lifewire.com/dod-5220-22-m-2625856
Pass 3:写入一个随机字符并验证写入
https://en.wikipedia.org/wiki/Infosec_Standard_5#cite_note-5
无论使用哪个级别,都需要验证以确保 覆盖成功。
我的问题是,它技术意味着什么?
当你写入一个数据块时,你是否只检查写入的字节是否等于块的大小(似乎很快)?
您是否回读您写入的块并比较(memcmp?)是否与写入的数据块完全相同?
还有其他我忽略的解决方案吗?
这里有一些示例代码来说明我的问题。哪个解决方案会指示“写时验证”?如果您只检查返回值(来自write)可以您确定,只要匹配所有字节确实写入的块的长度?
// erasure example
// erasure single block, start from 0
// block size
unsigned long block_size = 512;
// data-block we will write
char block[block_size];
// zero the block
bzero(&block, block_size);
// open device
int fd = open('/dev/sdb', O_RDWR);
// write 1st block
int bytes_written = write(fd, &block, block_size);
// verify option: A
if (bytes_written == block_size) {
// all good
}
// verify option B
// go back the number of bytes-wtitten from the current pos.
lseek(fd, -1 * bytes_written);
// read the same number of bytes
int bytes_read = read(fd, &block, bytes_written);
// should be same
if (bytes_read == bytes_written) {
// here code to check i block indeed contains zero's
// use memcmp ?
}
【问题讨论】:
标签: c io hard-drive