擦除硬盘时“验证写入”是啥意思?
Posted
技术标签:
【中文标题】擦除硬盘时“验证写入”是啥意思?【英文标题】:What means "Verifies the write" when erasing hdd's?擦除硬盘时“验证写入”是什么意思? 【发布时间】: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 ?
【问题讨论】:
【参考方案1】:擦除硬盘时“验证写入”是什么意思?
来自Here
write(...)
函数尝试将 nbytes 从缓冲区写入 与句柄关联的文件。在文本文件上,它将每个 LF 扩展为 CR/LF。函数返回写入文件的字节数。回报 值为 -1 表示错误,并适当设置了 errno。
所以在你的例子中,int bytes_written = write(fd, &block, block_size);
bytes_written 的值,如果等于块大小,验证块的所有内存位置都已写入。
并回答您的其他问题:
(1) 始终检查非 void 函数的返回值,并且通过简单地比较两个 int
值没有明显的效率或速度损失。您甚至可以一步完成,但我不确定这是否会提高效率(查看程序集以确认)。所以而不是:
// verify option: A
if (bytes_written == block_size)
// all good
//可以在同一行进行比较:
if(write(fd, &block, block_size) == block_size) // all good
(2) 可选。它提供了一个额外的验证内存块包含新的内容。
您可以在 this Linux man page 中找到关于 write() 的更详细说明。
【讨论】:
谢谢,我的意思是,返回值(如果 block_size == write(...))是否符合擦除规范的要求。 @Rogier - 是的,任何一种方法,if(block_size == write(...))
或 if(bytes_written == block_size)
都清楚地表明 (validation) 已经进行了 更改 .诸如memcmp(...)
之类的其他步骤只会提供额外的验证,并且对于您的目的是完全可选的,IMO。我已经修改了我的答案,试图让这些想法更清楚。
@Rogier - 我很好奇你的头像是Thunder Mustang,还是一架完整的二战飞机?
我不确定,我在某个地方捡到了它:o 我认为它是 P51(完整)。我确实有我的 PPL。 P51 在我的遗愿清单上!你飞了一个实验/套件?
@Rogier - 酷。是的,我愿意。刚卖了一辆塞斯纳,想购买一辆部分建造的 RV-8。以上是关于擦除硬盘时“验证写入”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章