AlienDrew Asked: 2019-03-31 00:43:03 +0800 CST2019-03-31 00:43:03 +0800 CST 2019-03-31 00:43:03 +0800 CST 如何一次性将零写入 FAT32 驱动器上的可用空间?[复制] 772 大多数人会认为使用dd或sfill通常用零擦除可用空间......但是,FAT32 驱动器的限制是最大文件大小只能是 4 GB。 如何创建多个较小的文件来擦除 FAT32 驱动器的可用空间以克服此限制? command-line fat32 secure-erase 2 个回答 Voted egmont 2019-03-31T02:08:05+08:002019-03-31T02:08:05+08:00 这听起来确实像一个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它! Best Answer AlienDrew 2019-03-31T02:22:58+08:002019-03-31T02:22:58+08:00 这些说明已经过时,如果您想可靠地将 FAT32 驱动器上的数据归零,请使用该脚本。(如果可以,请随时编辑和更新这些说明) 始终确保您已更新,并安装安全删除工具 sudo apt-get update sudo apt-get install secure-delete 挂载 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小写的驱动器号在哪里) 在驱动器的根目录创建一个临时文件夹并移入其中 mkdir /PATH/TO/MOUNTED/DRIVE/tmp cd /PATH/TO/MOUNTED/DRIVE/tmp 找到可用空间然后创建虚拟文件 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 GBEND是可用空间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 的“空文件”。 找到最后一点要写入的可用空间 df /PATH/TO/MOUNTED/DRIVE fallocate -l ( REST-1 ) emptyfileEND (其中 REST 是显示的可用空间df -hB) 返回驱动器的根目录,现在使用srm(安全删除工具)删除 tmp 文件夹 cd /PATH/TO/MOUNTED/DRIVE srm -llrvz /PATH/TO/MOUNTED/DRIVE/tmp 我创建了一个脚本,它在不使用 fallocate 来支持截断的情况下工作,现在应该可以正常工作。我没有分配 1 GB,而是让脚本分配了 4 GiB 的字节,所以我会更好地填满驱动器。(最后的截断将使文件小于 4 GiB) ###Bash 脚本(与 WSL 兼容)(下载)
这听起来确实像一个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
它!这些说明已经过时,如果您想可靠地将 FAT32 驱动器上的数据归零,请使用该脚本。(如果可以,请随时编辑和更新这些说明)
始终确保您已更新,并安装安全删除工具
挂载 FAT32 驱动器
###在Linux上
(
sdb1
你的sdxx
卷名在哪里)###使用 WSL
(
F
你的驱动器号在哪里)此外,如果尝试挂载到现有文件夹名称,则可能存在挂载不起作用的错误
/mnt
,在这种情况下,如果您尝试挂载,则需要卸载sudo umount /mnt/f
,重新启动 WSL,删除文件夹(sudo rmdir /mnt/f
),重新创建文件夹(sudo mkdir /mnt/f
),最后再次挂载(
f
小写的驱动器号在哪里)在驱动器的根目录创建一个临时文件夹并移入其中
找到可用空间然后创建虚拟文件
其中
START
1 GBEND
是可用空间df -h
-> 要写入多少 GB,例如这将产生九个 1 GB 的“空文件”。
找到最后一点要写入的可用空间
(其中 REST 是显示的可用空间
df -hB
)返回驱动器的根目录,现在使用
srm
(安全删除工具)删除 tmp 文件夹我创建了一个脚本,它在不使用 fallocate 来支持截断的情况下工作,现在应该可以正常工作。我没有分配 1 GB,而是让脚本分配了 4 GiB 的字节,所以我会更好地填满驱动器。(最后的截断将使文件小于 4 GiB)
###Bash 脚本(与 WSL 兼容)(下载)