X.L*_*INK 2 linux hard-drive dd
/!\ 在那里寻找更新 2,问题现在已经回答了一半 /!\
我有时会完全擦除我的硬盘驱动器(不是 SSD);成为他们的样子,dd并badblocks -w盲目地擦拭一切。
问题是,他们也在写入硬盘驱动器的备用扇区,这很糟糕,因为它们都是全新的。因此,如果在擦除过程中确实发生了某些事情(断电、写入错误等),那将杀死一个非常有用的扇区......一无所获。
所以问题是:如何避免dd或badblocks擦除硬盘驱动器的备用扇区?
假设:
dd 众所周知,它会盲目地擦除经过它的所有东西。badblocks 已知能够访问未映射的块。更新 1:
dd如果他们没有更换有故障的扇区(显然),肯定无法访问备用扇区。这是由于dd设计方式(Kamil Maciorowski 评论):
可用的逻辑扇区号
dd被映射到编号的物理扇区,并且相应的数字最初是相等的。备用物理扇区最初没有分配逻辑编号,因此 dd 无法访问它们。
更新2:
主要是系统管理员 - 而不是“接近低级”编码器 (C) -,有人可以看看badblocks' 代码并判断它是否确实访问了备用扇区吗?更准确地说,是否badblocks还考虑了其块读/写内的备用扇区?
http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/misc/badblocks.c
在另一边/方式得到答案;我还知道badblocks维护者Theodore Ts'o 在此处拥有一个超级用户帐户。如果他阅读此更新 2,是否有可能直接回答?
既dd不能badblocks也不能访问磁盘硬件备用扇区。主要的原因dd和badblocks 不能访问这些备用扇区是那些utils的的作者不知道怎么了,现代硬盘的硬件和专有性SMART软件可以找到比登天还难了。
这个 Q 似乎是基于操作系统级文件系统和磁盘供应商的硬件级SMART和重新映射例程之间的混淆。历史观点可能会澄清事情......
早期的 PC 硬件供应商在发货前对磁盘进行了测试,并在磁盘标签或随附的打印输出中包含了坏块列表。安装驱动器的管理员可能会在格式化驱动器时使用该坏块列表。 早期格式化程序会提示用户输入坏块列表,用户将手动输入这些列表。如果驱动器已经存在一段时间,管理员可能会重新检查驱动器块。无论如何,这些坏块列表的目的是告诉文件系统不要使用这些块。该badblocksUTIL似乎被设计成那样的心中早硬盘。
较新的硬盘包括重新映射例程以及诸如 SMART 之类的诊断例程,这两者相当于硬盘中的专用计算机,可以自动检查坏块甚至重新映射坏块。很棒的功能,但供应商重新映射的糟糕之处在于它的所有实现都是专有的和闭源的——所以用户不确定它真正在做什么,或者在那里没有做。磁盘的重新映射/诊断固件可能有问题,磁盘上可能存在被间谍或黑帽黑客等占领的秘密位置。由于它是磁盘级别的重新映射(不是操作系统级别),因此可能会导致更多的磁头抖动和磨损,效率低下, (如果某些经常使用的文件或区域位于具有重新映射扇区的位置)。
根据您的要求,我已经查看badblocks.c并且可以证明这是一个非常简单的程序,不使用任何高级磁盘功能,并且不能在磁盘控制器级别上工作。
它所做的只是使用 Linux 标准打开函数将驱动器作为原始设备打开(即作为包含整个设备的虚拟文件),同时应用标志O_DIRECT直接对磁盘进行 I/O,而不通过 Linux 内存缓冲区。
然后,它使用ioctl 函数检索原始设备中的块数 ,该数字仅包括公开可见的块/扇区(无备用扇区),然后使用 Linux 标准函数迭代向每个块/扇区写入和读取模式write和read ,如果返回错误码或者数据不相等则报错。
打开/读/写功能可以追溯到Linux诞生之初,当时磁盘的结构要简单得多,并且没有备用扇区。需要更高级的功能来访问任何内部磁盘数据,例如临时使用时无法获得的备用扇区。
出于好奇,开头的评论badblocks.c说:
* This file is based on the minix file system programs fsck and mkfs
* written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
Run Code Online (Sandbox Code Playgroud)
哪里Minix早于Linux(历史链接),其缺点实际上促使 Linus Torvalds 编写了 Linux 的第一个版本。这只是为了让大家了解这个程序是多么古老和简单。它当然不会触及备用扇区。
我还查看了dd.c,这是一个附加磁盘驱动程序的更复杂的程序。我不熟悉磁盘驱动程序接口,但在我看来,即使可以通过该接口修改备用扇区,头脑正常的程序员也不会这样做。我的理由是: