如何一次性将零写入 FAT32 驱动器上的可用空间?

如何一次性将零写入 FAT32 驱动器上的可用空间?

大多数人会考虑使用ddsfill通常用零擦除可用空间...但是,FAT32 驱动器的限制是最大文件大小只能为 4 GB。

我如何创建多个较小的文件来清除 FAT32 驱动器的可用空间,以克服此限制?

答案1

这听起来确实像XY问题

sfill或者shred更普遍使用的(coreutils 的一部分)覆盖的内容现存的文件(如果一切顺利,例如文件系统就地覆盖,并查看其手册中提到的其他陷阱)。

如果您想要这个,您可以使用shred -n 1 --random-source /dev/zero; 或者一个小型 shell 脚本来获取文件的大小,然后执行dd conv=notrunc if=/dev/zero of=the_file_to_be_zeroed_out bs=... count=...

但据我所知,这不是你所需要的。(除非你能确保只在将文件清零后删除它,这听起来真的很麻烦,而且几乎不可行。)你需要的是将当前没用过任何文件,这样就不会留下先前删除文件(仍然需要压缩)未使用的区域尽可能地可压缩,也就是说,最好充满零。

您应该创建一个尽可能大且全是零的新文件。使用类似 的操作dd if=/dev/zero of=tmpfile bs=1M,等到它退出并显示错误消息“设备上没有剩余空间”,然后删除此文件。您的图像已准备好压缩 - 但不要忘记先压缩umount

答案2

这些说明已经过时了,如果您想可靠地将 FAT32 驱动器上的数据清零,请使用脚本。(如果可以,请随意编辑和更新这些说明)

  1. 始终确保已更新,并安装安全删除工具

     sudo apt-get update
     sudo apt-get install secure-delete
    
  2. 安装 FAT32 驱动器

    在 Linux 上

     fdisk -l
     sudo mount -t vfat /dev/sdb1 /PATH/TO/MOUNTED/DRIVE
    

    sdb1您的sdxx卷名在哪里)

    使用 WSL

     sudo mount -t drvfs F: /PATH/TO/MOUNTED/DRIVE
    

    F您的驱动器号在哪里)

    此外,如果尝试挂载到 中的现有文件夹名称,则可能存在挂载不起作用的错误,/mnt在这种情况下,如果您尝试挂载,则需要通过 卸载sudo umount /mnt/f,重新启动 WSL,删除文件夹(sudo rmdir /mnt/f),重新创建文件夹(sudo mkdir /mnt/f),最后再次挂载

    f您的驱动器号应为小写)

  3. 在驱动器根目录创建一个临时文件夹并移入其中

     mkdir /PATH/TO/MOUNTED/DRIVE/tmp
     cd /PATH/TO/MOUNTED/DRIVE/tmp
    
  4. 找到可用空间然后创建虚拟文件

     df -h /PATH/TO/MOUNTED/DRIVE
     for i in $(seq START ( END-1 )); \
       do fallocate -l 1G emptyfile${i} && echo Created ${i} out of ( END-1 ); \
     done
    

    其中START1 GB 是END可用空间,表示df -h要写入多少 GB,例如

     for i in $(seq 1 ( 10-1 )); do \
       fallocate -l 1G ${i} && echo Created ${i} out of ( 10-1 ); \
     done
    

    这将产生九个 1 GB 的“空文件”。

  5. 找到最后一点可用空间来写入

     df  /PATH/TO/MOUNTED/DRIVE
     fallocate -l ( REST-1 ) emptyfileEND
    

    (其中 REST 是 中显示的可用空间df -hB

  6. 返回驱动器的根目录,然后使用srm(安全删除工具)删除 tmp 文件夹

     cd /PATH/TO/MOUNTED/DRIVE
     srm -llrvz /PATH/TO/MOUNTED/DRIVE/tmp
    

我创建了一个脚本,它无需使用 fallocate 而使用 truncate 即可运行,现在应该可以正常工作了。我没有分配 1 GB,而是让脚本分配了比 4 GiB 少一个字节的空间,这样我就可以更好地填充驱动器。(最后一次截断将使文件小于 4 GiB)

###Bash 脚本(与 WSL 兼容)(下载

相关内容