我如何仅粉碎设备的第一部分和最后一部分?

我如何仅粉碎设备的第一部分和最后一部分?

shred命令(coreutils8.23)从头到尾用可配置数据覆盖设备,这对于它设计的用例来说非常好(所有用例都与向整个设备写入某些内容有关)。

在我的情况下,处理设备的前 x 个字节和后 y 个字节shred对整个设备的影响就足够了,但我似乎找不到避免指定明确值(设备大小等)的好解决方案。我可以使用从随机源写入设备的计算部分dd,但随后我必须获取设备大小,处理 MiB 和 MB 等。也许有像shred(或者我只是错过了什么)这样舒适的东西。

大多数分区相关信息(gpt、msdos 分区表和备份)都放在设备的开始和结束处。

答案1

你确定你真正想要的不是“wipefs-从设备上擦除文件系统签名“?


dd使用起来并不难,尤其是从gparted或获取正确的数字fdisk,见下文。

全盘方法有效,如dd if=/dev/zero of=/dev/sdx。可能用 来bs=1M提高速度。或者/dev/zero用 /dev/urandom 替换以获得更随机的数据。如“ArchWiki 的安全擦除磁盘“。

对于仅一个分区号“n”,又名“sdxn”,可以做到dd if=/dev/zero of=/dev/sdxn

对于“前” n MB,你可以这样做dd if=/dev/zero of=/dev/sdx bs=1M count=n

对于“开始”和“结束”,您可以找出驱动器的扇区大小和总扇区数 -gparted在“查看->设备信息”下轻松告诉您,它甚至会告诉您分区的起始和结束扇区在哪里。partedfdisk(对于 MBR)也应该如此。

然后,用一些数学知识来确定要擦拭的地方。

  • Tiny (512b) 精确方法 - 查找要擦除的扇区。如果您的驱动器有 512 字节扇区,并且有 251658240 个扇区(即 120GB,= 251658240 个扇区 * 512 字节 / 1024 转换为 k / 1024 转换为 M / 1024 转换为 G)...

    • 要擦除最后的 1G(gig,G=1024*1024*1024 字节),你可以计算出 1GB 中的扇区(1GB/512b = 1 * 1024 * 1024 * 1024 / 512 =2097152),然后从扇区总数中减去该值 251658240 - 2097152 =249561088并从该扇区开始,针对多个扇区:
      dd if=/dev/zero of=/dev/sdx bs=512 seek=249561088 count=2097152

  • 如果每次处理 512b 的速度太慢,您可以将bs, seek&转换为使用 M (M=1024*1024)。磁盘始终从 0 开始,但结束于 251658240 * 512 / 1024 / 1024 =count122880以 M 为单位。

    • 擦除最后 1G,一个 G 中有 1024 个 M,因此跳过 122880 - 1024 =121856M 和 do:
      dd if=/dev/zero of=/dev/sdx bs=1M seek=121856 count=1024

  • 一次 Gig 的粗略估计,在写入超出“末尾”不会造成损坏(磁盘的最末尾,不会擦除中间分区)的情况下工作正常。尝试一次 1G(G=1024*1024*1024 字节)。请参阅了解man dd更多信息,它可以理解 K、M、G 等。

    • 最后一个 G,dd if=/dev/zero of=/dev/sdx bs=1G seek=119省略count继续直到设备末尾。

或者,对于一个可能快点将“随机”数据写入整个分区/驱动器的方法,你可以使用dm-隐窝

首先,在要加密的分区(sdXY)或完整磁盘(sdX)上创建一个临时加密容器,例如使用默认参数

# cryptsetup open --type plain /dev/sdXY container

第二,检查它是否存在

# fdisk -l
Disk /dev/mapper/container: 1000 MB, 1000277504 bytes
...
Disk /dev/mapper/container does not contain a valid partition table

最后,用伪随机数(加密数据)擦除它,不需要使用 /dev/urandom,因为加密密码用于随机性:

# dd if=/dev/zero of=/dev/mapper/container
dd: writing to ‘/dev/mapper/container’: No space left on device

相关内容