它用于 bash/shell 脚本。基本上,我想使用单个命令行来格式化或擦除 USB(或 SD)存储设备。
我本来打算使用fdisk
,但它似乎需要在我想要自动化的地方进行用户交互。
因此我决定尝试用以下方法将其清零:
dd if=/dev/zero of=/dev/<target disk>
;
但它似乎只能将 2.0 GB 的空置或未使用的磁盘空间清零。
root@linux:~# dd if=/dev/zero of=/dev/mmcblk0
dd: writing to '/dev/mmcblk0': No space left on device
3842249+0 records in
3842249+0 records out
1967230976 bytes (2.0 GB, 1.8 GiB) copied, 2.9054 s, 677 MB/s
理想情况下,我正在谈论重新格式化任何可移动存储设备,和/或准备用图像文件对其进行成像.iso
(通过dd
)。
重新格式化不会总是是必需的,但它也会擦除数据;并且对于这种事情,清除设备中存储的任何数据可能应该是默认行为/标准程序。
答案1
因此,这取决于
- 您对‘格式化’驱动器的定义;
- 该驱动器的类型。
“格式”可能是消费技术中最令人困惑的术语之一。甚至你的帖子已经混淆了两三种不同的操作……
通常涵盖三个层次:
准备介质本身(例如将扇区标记写入硬盘)——如今通常由工厂完成,但至少在 IBM PC 时代,它可以由 PC 本身完成。这通常称为“低级格式化”。
将分区表(空白或带有一些分区)写入磁盘的前几个扇区 – 这就是
fdisk
所做的。将空白文件系统写入每个分区 – 这就是要做的事情
format c:
。mkfs
这曾经被称为“高级格式化”。
不过,现在没有第 1 步了,有些人把第 2 步称为“低级格式化”。有时人们把擦除整个磁盘称为“格式化”,尽管它不会用实际的格式化。有时人们把重新安装 Windows 称为“格式化”,即使所有文件都保持不变。
无论如何,其余的答案取决于结果你要:
如果您希望磁盘完全空白(例如,数据恢复应用程序无法找到任何内容),则有两个选择:丢弃或手动擦除。
“丢弃”功能在 SSD 中称为 TRIM,SD 卡也支持此功能 - 它告诉磁盘本身丢弃所有数据。在 Linux 上,
blkdiscard
工具可用于此目的 - 指定一个设备,几秒钟内它就会清空。(类似的工具mkfs.ext4
还会在将新文件系统写入分区之前自动丢弃分区的内容。)如果磁盘不支持丢弃 - 例如,如果它是磁性 HDD,或者如果它是大容量存储接口不支持的 USB 闪存驱动器理解此命令 – 那么您唯一的其他选择就是手动清空每个扇区,即
/dev/zero
像您已经完成的那样填充它。虽然丢弃通常只需要几秒钟,但手动零填充的速度不能比磁盘本身接受写入的速度更快(毕竟,你是写入大量数据)。
如果你不关心残留数据,而只是想要操作系统要查看空白磁盘,只需清空分区表驻留。对于 MBR,它始终是扇区 0,但请不要忘记许多磁盘使用 GPT 分区表。
这是一种非常快速的方法,因为您最多只需删除几千字节。在 Linux 上,该
wipefs
命令将彻底使操作系统无法识别磁盘内容。(默认情况下,该工具仅打印出它会擦除——使用该选项--all
使其真正执行此操作。)
无论如何,现在您有一个操作系统认为是空的磁盘。
如果你希望擦除的磁盘有一些分区请使用分区工具(如 fdisk 或 parted)。虽然常规 fdisk 是交互式的,但充足可以轻松编写脚本的工具 –
sfdisk
、sgdisk
、parted
就是几个例子。Windows 有diskpart
。如果你还希望分区具有文件系统,使用像
mkfs.ext4
或 这样的工具mkfs.vfat
(相当于 Windows 的format
)。
最后,正如上面的评论中提到的:如果你打算将映像(.iso 文件)写入磁盘,那么你不需要不做任何准备。
这种映像写入从扇区 0 开始,因此它会丢弃磁盘上以前的所有内容(直至映像的大小)。无论它有分区和文件,还是空白的,没关系– 它只是被图像的自己的分区和所有。
一切超过映像的大小将保持原样,但操作系统不会在意它 - 因为映像的分区表显示那里没有分区。当然,如果您要将磁盘交给其他人,丢弃或清空磁盘仍然是一个好主意。