好吧,我的问题是,我有一个 Jetflash 32 GB USB 闪存驱动器,它曾经有 32,000,000,000 字节,换句话说,它的容量是 29.8 GiB。我以前可以在 Windows 上右键单击,然后看到 29.8 这个数字。
现在我确实通过 Linux 制作了一个可启动的 USB,以便在某人的计算机上安装 Manjaro。我不记得当时我对闪存驱动器做了什么。长话短说,当我在计算机上格式化 USB 时(发生在上述事件发生几周后),我的闪存驱动器现在有 28 GiB 的存储空间。
gparted
所以我损失了将近 2 GiB!使用任何 Windows 工具或在 Linux 中我都看不到任何分区或未分配的空间。
有没有低级可以删除任何 mbr/lba 或任何标志数据并逐个检查我的扇区以确定我的原始容量的工具?
我在互联网上没有找到任何东西。所有与“我的 USB 笔显示较少 GB”相关的主题都是用于解决出现较小分区的问题,而其余空间只是未分配但对磁盘管理器或分区管理器等“可见”,而gparted
我的情况并非如此。
答案1
我dd
之前在闪存驱动器上使用过类似 mkusb 的灵感工具,例如mkusb Ubuntu 帮助页面显示他们:
“使用整个设备”,实际上只有头端(iso 文件的大小),但设备的其余部分不可用。mkusb 只是从 iso 文件中克隆 ISO 9660 文件系统及其内容。此 ISO 9660 文件系统适用于 CD/DVD 磁盘,也适用于 USB 驱动器。使用这样的 USB pendrive 后,您创建新的分区表和文件系统,如果您想将其用于其他用途。
链接链向下延伸至帮助格式化 USB 闪存盘。创建一个新的分区表,然后分区应该可以解决问题,除非您遇到闪存设备出现问题的“特殊情况”。我遇到的那个设备根本听不进去,在格式化和重新使用几个月后,偶尔会拾取旧 ISO 文件系统的残余。
覆盖第一个 GB (ISO 最初的所在位置)解决了我的问题,但是如果你想覆盖整个 USB,这也应该可行(代价是减少一次对闪存的终身写入),或者只覆盖第一个 MB 也应该可行...
使用 Linux 的计划dd
应该可以做到。首先,请 100% 确定您拥有正确的设备(例如/dev/sdx
,使用lsblk
或gparted
或或在插入设备时gnome-disk-utility
查看系统日志应该会告诉您)dmesg
如果只覆盖第一个兆字节(1M,其中 M =1024*1024),你可以这样做
dd if=/dev/zero of=/dev/sdx bs=1M count=1
要覆盖更多 M,请使用更大的计数。
要覆盖第一个千兆字节(1G,其中 G =1024*1024*1024)
dd if=/dev/zero of=/dev/sdx bs=1G count=1
要覆盖整个设备,不要使用任何 bs 或 count,只需执行
dd if=/dev/zero of=/dev/sdx
完成后
dd
会告诉您在到达设备末端之前可以写入多少内容,让您了解实际可写入的内容量,类似于:1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.000838339 s, 1.3 GB/s
如果dd
花费的时间很长,您可以“向正在运行的‘dd’进程发送 USR1 信号,使其将 I/O 统计信息打印到标准错误,然后恢复复制。”如果您很小心,请使用kill
andpgrep
或ps
pkill
或htop
或 even killall
,或者参见man dd
以下示例:
$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied,
34.6279 seconds, 271 MB/s
完成后dd
,写入新分区表并创建新分区并格式化。我会使用gparted
,它在菜单中有一个创建分区表选项,通常效果很好。