我正在尝试编写一个脚本来对 USB 驱动器进行一些操作,删除它遇到的所有分区并创建新的分区(更多信息请参见此链接)。
当我使用 GParted 进行处理时,一切都运行正常,特别是当使用其文件系统创建新分区时,任何旧数据都会消失(并且对于我正在处理的内容而言,此操作不会花费太多时间)。
但是,当我用 进行等效操作时fdisk
,我总是在与之前相同的旧分区中找到旧数据!
我该如何进行才能彻底删除旧分区的数据(并且像使用 GParted 一样快)?
我尝试过命令dd if=/dev/zero of=/dev/sdb bs=512 count=1
或shred -vzn 0 /dev/sdb
类似命令,但它们要么实际上不会删除文件,要么与 GParted 相比需要花费太多时间来完成。
答案1
在 中没有这样的事情fdisk
。与 GParted 不同,它根本不关心文件系统和分区内容——您需要手动执行此操作。
此外,您没有解释如何确定“旧数据已消失”——您是否检查了实际的分区设备,还是只是挂载了它?分区中可能充满了垃圾,但这并不重要,只要文件系统显示“根目录中有 0 个文件”。
我怀疑 GParted 是否有完全清空分区的功能——更有可能的是它只是创建了一个新的文件系统在上面之前存在的任何内容。(也就是说,在 SSD 上,mkfs
工具做使用 TRIM 丢弃整个分区,这几乎是即时的。但是,对于 HDD,没有什么可以让磁盘旋转得更快 - dd 不会比 GParted 慢很多。)
因此以下内容应该足够了:
- 用于
wipefs --all /dev/xxx
擦除可识别的文件系统结构, - 使用
mkfs.ext4 /dev/xxx
(或 mkfs.whatever-else)创建一个空白文件系统。