如何清除U盘中的所有内容(数据、病毒)?

假设我在公共的Windows电脑上使用了一些U盘,并且将一些数据复制到我的Ubuntu电脑上。我不能完全确定Windows电脑是否干净,它可能会在我的U盘上放置一些东西。有没有办法擦除U盘上的所有内容,甚至是MBR病毒和类似于文件系统之外的东西?

7个回答

你可以使用好用的Linux工具dd来完成这个任务。
操作步骤如下:
  1. 首先按下 Ctrl+Alt+T 打开终端。
  2. 然后在终端中输入 sudo blkid
  3. 仔细地检查输出结果。

    [sudo] password for anwar: 
    /dev/sda1: UUID="63c6fb01-aac4-4d38-b29e-5a5780a98d12" TYPE="ext4" 
    /dev/sda2: LABEL="Main" UUID="A80C1BD70C1B9F7E" TYPE="ntfs" 
    /dev/sda5: LABEL="Work" UUID="01CCB271A80A07E0" TYPE="ntfs" 
    /dev/sda6: LABEL="Edubuntu" UUID="364126ac-01c9-4dd2-ab19-eecc733a9640" TYPE="ext4" 
    /dev/sda7: LABEL="Windows" UUID="5A8C72C98C729EE7" TYPE="ntfs" 
    /dev/sda8: UUID="312d4cd9-21a9-4c0d-aa34-26230e70fa89" TYPE="swap"  
    /dev/sdb1: UUID="E87F-1D12" TYPE="vfat" 
    

    看最后一行的 /dev/sdb1。那是格式为Fat(vfat)的USB驱动器。请注意,USB驱动器只有一个名为 /dev/sdb1 的分区。如果它有其他分区,它们将被命名为 /dev/sdb2 ...等等。 USB驱动器本身的名称是 /dev/sdb,请注意,它没有 12 或任何数字在 sdb 之后。

  4. 然后执行以下命令,用0替换USB驱动器中的所有数据。

    sudo dd if=/dev/zero of=/dev/sdX bs=1k count=2048 
    

    我故意没有在命令中给出原始的 /dev/sdb,以免新用户意外破坏系统。请在步骤4中找到的USB驱动器名称中替换上述命令中的内容。

这将使您的USB干净。在此操作后,您需要创建至少一个分区才能使用该USB。
在空白磁盘上创建分区
要在其上创建新分区,可以使用“parted”程序。我将给出一个在完全原始磁盘中创建分区的示例。我们的USB磁盘大小为2GB(约2048)。我们假设它的设备名称为“/dev/sdb”。您可以使用命令“sudo lsblk”来检查您的设备名称(您必须通过查看大小等来猜测正确的设备)。
  1. 首先,在执行最后一个命令之后,我们需要弹出USB并重新插入。
  2. 然后,我们需要在磁盘上创建一个分区表。我们将创建一种名为msdos的分区表类型,有时也称为主引导记录。

    sudo parted /dev/sdb mklabel msdos
    
  3. 接下来,您将添加一个空的“主”分区,稍后将保存Fat文件系统。

    sudo parted -a none /dev/sdb mkpart primary fat32 0 2048
    

    我们指定了起始点(从0 MB)到终点(2048 MB),但实际上磁盘可能没有完整的2048 MB空间,但不用担心,parted会自动调整。请注意,我们正在整个磁盘上创建一个单一的主分区。但是您可以在其上创建多个分区。(虽然不建议这样做,因为Windows只会识别第一个分区)

    这个新创建的分区将具有ID /dev/sdb1

  4. 最后,在/dev/sdb1分区上创建Fat文件系统进行格式化。

    mkfs.vfat -n "Disk" /dev/sdb1
    

    我们正在使用名称“Disk”在/dev/sdb1分区上创建Fat文件系统。

这就是了。您现在拥有一个全新的干净的USB硬盘,带有一个FAT分区。
请注意,您也可以使用磁盘工具程序创建分区,并使用FAT格式化它。

使用磁盘工具

按下Super键,然后在其中输入“磁盘工具”。
在磁盘工具窗口中,在“外围设备”部分选择USB驱动器。
您可能需要先卸载驱动器。
然后点击“格式化驱动器”按钮。
从新窗口中选择分区表类型。选择“主引导记录”。
创建新分区表后,磁盘工具窗口将如下所示。
点击“创建新分区”按钮。
选择“分区类型”,并可选择为分区命名。
4-5秒内将创建分区,之后您将拥有一个干净的USB磁盘。
使用Gparted
首先,如果你还没有安装gparted,你需要先安装它。你可以通过点击这个链接gparted Install gparted来安装它,或者在终端中使用以下命令进行安装:
sudo apt-get install gparted
然后,在Dash中输入"gparted"来打开gparted。要打开Dash,按下Super键,也就是"Windows"键。
接下来,在右侧的下拉菜单中选择USB设备。它应该类似于/dev/sdb、/dev/sdc等。请特别注意不要选择/dev/sda,因为那是你的操作系统所在的设备。除非你知道自己在做什么,否则只能选择其他设备。
选择USB设备之后(在我的系统中是/dev/sdb),查看是否有任何分区被挂载。你可以在挂载的分区条目中看到一个钥匙图标和该分区的挂载点。
卸载设备上已挂载的任何分区。要卸载,选择分区→右键点击→从菜单中选择"卸载"。
然后进入gparted菜单→"设备"→选择"创建分区表",以覆盖并在选定的设备上创建一个新的分区表。
会弹出一个新窗口警告你即将执行的操作。默认的分区类型是"msdos",我强烈建议你不要更改它,除非你知道自己在做什么。还要再次检查一下,确保你确实选择了正确的设备。然后点击"应用"按钮。
点击"应用"按钮后,设备将完全为空。没有分区,也没有数据。
然后选择未分配的空间→右键点击→选择"新建"来创建一个新的分区。
在创建新分区的对话框中,选择"创建为"为"主分区",文件系统为"fat32",然后点击"添加"按钮。可选地,你还可以给这个分区命名。
点击"添加"按钮后,gparted会显示一个预览,告诉你如果应用这些更改,设备会变成什么样子。工具栏中会有一个浅绿色的勾号图标。你需要点击该图标来应用更改。还有一个"撤消"按钮,如果在任何步骤出错,你可以使用它。
应用更改后,gparted会显示一个消息,表示"所有操作已成功完成"。
现在你已经完成了。
使用新的磁盘工具(12.10)
Ubuntu 12.10现在配备了一个新的磁盘工具。它使用新的udisks2程序作为后端。
  1. 首先通过在 Dash 中键入“Disks”打开新的磁盘工具。按下 Super 键以调出 Dash。

    enter image description here

  2. 打开磁盘(之前的磁盘工具)程序后,请执行以下操作:

    1. 选择外部磁盘。

    2. 如果磁盘已挂载,请卸载它。

    enter image description here

  3. 然后通过点击“停止”播放图标选择分区并删除它。

    enter image description here

    如果磁盘上有多个分区,请重复此步骤,直到所有分区均被删除。

  4. 删除完所有分区后,磁盘现在只包含空闲空间。您现在可以通过点击小的 + 图标创建一个分区。

    enter image description here

  5. 选择类型为“FAT”,设置标签,然后点击“创建”按钮来创建一个分区。

    enter image description here

  6. 您的磁盘现在包含一个分区。您可以通过点击“播放”图标来挂载该分区。您可以直接浏览已挂载驱动器的位置,方法是点击带有标签“正在使用,是”链接。

    enter image description here

你完成了。

2@Anwar:请注意,从12.10版开始,“磁盘工具”已经变得非常简化,失去了所有磁盘管理功能。所以你可能希望在未来添加一个gparted选项;) 做得很好! - ish
20哇!这个回答就像有人问我怎么杀掉一只蟑螂,然后得到的回答是:“拿着这个火箭筒和十枚导弹……” - Luis Alvarado
喜欢记忆棒切换 - user92200
你能解释一下命令行指令的第四步吗?它给出了一个硬编码的块大小和数量,但示例中没有说明整个磁盘的大小。显然,人们需要根据自己的磁盘来更改这些参数。 - ScrollerBlaster
如何为我的USB闪存驱动器设置正确的块大小和计数以使用dd命令? - Matt Parkins
2那个块大小其实并不重要,它实际上是从磁盘的一开始清除文件系统信息。1k * 2048 等于 2 MB。你可以增加大小。分区步骤实际上创建了新的文件系统。所以,不用担心。@matt - Anwar
请查看上面的评论,@滚动者。 - Anwar
更多命令行查看设备的方法: dfmount | column -t - shawnhcorey
@AnwarShah 在“在空白磁盘上创建分区”的部分中,第二步时,我的Ubuntu 14.04.4报错说:信息:您可能需要更新/ etc/fstab。尽管如此,我继续完成了所有的步骤,但在第三步和最后一步中都遇到了同样的问题:/ dev/sdb1:权限被拒绝。我应该如何更新/ etc/fstab呢? - Mencia
@Mencia 不知道为什么会发生这种情况。我猜想,你可能没有使用sudo或者同时磁盘已经被弹出了。你可以尝试其他选项,比如使用gparted - Anwar
@Anwar 当我运行你的命令时,返回的结果是:2097152字节(2.1 MB,2.0 MiB)已复制,0.524652秒,4.0 MB/s - Liso
优秀的帖子永远不会过时! - George Udosen
@Anwar,命令中的 count 参数是错误的。我认为它不应该是必需的,但我不确定。 - qwazix
用dd命令的答案成功地擦除了我写入USB闪存盘上的GPT格式ISO安装镜像,而无法使用图形界面磁盘工具删除。效果非常好! - Charles P. Schaum

如果你想要彻底且无法恢复地消除某物,"shred" 是一个相当不错的选择。
shred -f -n 5 /dev/sdX

在这里,sdx 是你的闪存盘应该能起到作用 - 它会用随机数据覆盖整个驱动器 5 次(将 n 更改为适当的数字)。

你可以使用 fdisk -l 命令找到闪存盘的路径。


非常有用!我通常使用shed -vzn 3 /dev/sdX-v表示详细模式,-n 3表示重写3次,-z表示在最后写入零以隐藏擦除过程。 - Benedikt Köppel

打开终端
执行
lsblk

你的屏幕上出现了类似的东西:

enter image description here

假设您的USB驱动器为sdb,具有4 GB内存 然后执行
dd if=/dev/zero of=/dev/sdb bs=2M count=2048

以这种方式,您将用零覆盖整个U盘。包括任何可能的病毒和恶意软件在内的所有内容都将被删除。
这里的`/dev/sdb`部分非常重要,您需要格外小心。 例如,如果您在`/dev/sdb`中将`b`替换为`a`,那么您的整个硬盘将被写入零。
这里我给出了`count=2048`,因为我的U盘大小是4GB,而且由于这里创建的块大小是2MB,所以`2 MB x 2048 = 4096 MB = 4GB`。请将`2048`替换为适合您的值。 另外,如果您愿意,可以将块大小更改为您想要的任何值。
现在执行以下操作:
fdisk -l

输出结果大致如下

enter image description here

在这里,您确认当前的U盘内存大小。

接下来,您需要创建分区表。我们将使用parted工具来完成。

在终端中输入以下内容:

parted
select /dev/sdb

将其标记为GPT类型的分区表。
mklabel gpt

将默认单位大小从MB更改为GB
unit gb

最后创建分区表:
mkpart /dev/sdb 0GB 3.7GB

这里我使用了3.7GB,因为我的U盘实际可用空间是3.7GB。请将其替换为您自己的值。

接下来查看最终结果。

print

整个事情将类似于以下内容:

enter image description here

按下 q 并按下 enter 退出 parted 提示符。
现在是创建文件系统的时候了。我们将创建通用文件系统 fat32
同时,我们将使用 mkfs 命令来完成。
在终端中输入以下内容。
mkfs.vfat /dev/sdb1

现在你有一个全新的U盘,没有任何病毒和恶意软件。

sudo dd if=/dev/zero of=/dev/sdX bs=1k count=2048 

上面给出的脚本只会擦除分区表,而不是整个磁盘,这正是原帖中所要求的。
要完全擦除磁盘并将所有位设置为零。
sudo dd if=/dev/zero of=/dev/sdX bs=4M iflag=nocache oflag=direct

额外选项的解释:

删除"count=2048"将取消对2048字节的限制,以便dd可以在整个磁盘上执行操作。

bs=4Mb - bs是块大小,因此这将以4Mb的块进行擦除,比1k更快。

iflag和oflag将尝试禁用缓冲,对于恒定流来说是不需要的。

然后按照上面概述的说明来分区和格式化磁盘。

要找到磁盘的盘符,请打开终端并运行:

sudo tail -f /var/log/messages

然后插入闪存驱动器,磁盘字母将被显示出来!
将磁盘字母替换为/dev/sdX中的X。
这将清空磁盘上的所有数据!

你可以格式化驱动器以确保其上的所有数据都被彻底删除。请参阅如何格式化USB或外部驱动器?以了解如何操作。 警告:这将会擦除驱动器上的所有数据!在尝试此操作之前,请确保您不会删除任何重要文件。

这并不完全符合问题(我认为问题是要求擦除整个设备,而不仅仅是像链接中所指示的任何一个分区)。然而,我认为总体上已经足够了 - 如果你真的想要彻底清除文件分配表,你可以使用dd命令从/dev/zero或类似的位置复制到整个设备(而不是/dev/sdX1,它是第一个(通常也是唯一的)分区)。如上所述,请小心操作。 - chronitis

在Linux中可以看到U盘中的Windows病毒文件。只需删除所有你不认识的文件。检查所有文件夹以确保安全。我长期以来一直成功使用这种技术。这样,你甚至可以保留你的数据。

1对于“autorun”类型的文件来说,这是正确的,但某些恶意软件可能会通过一些恶作剧代码使USB启动盘具有可引导性,而这些代码位于分区之外。或者更可怕的是,如果它重写了驱动器的固件并使用自己的命令,即使使用dd命令覆盖整个驱动器也无法擦除它。有趣的事实是,USB闪存驱动器甚至微型SD卡都有微小的嵌入式微处理器/微控制器(成本约为20美分),它们有自己的固件来读取和写入数据,并跟踪哪些闪存芯片出现故障,将好的芯片替换坏的芯片等。 - Xen2050

这个强力的蛮力将使用零覆盖方式完全清除分区表,让您可以自由地使用您选择的工具重新分区。
sudo dd if=/dev/zero of=/dev/sdb bs=1M count=1

一定要确保选择正确的输出设备,而不是某个内部磁盘驱动器!出现错误后的恢复将非常困难。写入后,我会取出并重新插入U盘。

来源:https://ubuntuforums.org/showthread.php?t=2319295