今天,我用以下命令对 Linux 机器上的旧 USB3 闪存 8GB 驱动器进行了攻击:
dd if=/dev/random of=/dev/sdb
然后我把它放入Windows PC中,它要求我对其进行格式化,我使用默认值(如4k块大小,fat32等)进行了扩展格式,复制了一些我需要的文件并将其放在我新安装的debian 12机器上fdisk 是这样说的:
Disk /dev/sdb: 7.32 GiB, 7864320000 bytes, 15360000 sectors
Disk model: ****************
Units: sector of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minum/optimal): 512 bytes/ 512 bytes
Disklabel type: dos
Disk identifier: 0x********
Device Boot Start End Sectors Size Id Type
/dev/sdb1 778135908 1919645538 1141509631 544.3G 72 unknown
/dev/sdb2 168689522 2104717761 1936028240 923.2G 65 Novell Netware 386
/dev/sdb3 1869881465 3805909656 1936028192 923.2G 79 unknown
/dev/sdb4 2885681152 2885736650 55499 27.1M d unknown
Partition table entries are not in disk order.
为什么 USB 驱动器上有 4 个分区,其中 2 个分区大约 900Gigs,而 8GB USB 驱动器上有 500 个分区?这是windows机器的制作吗?在 Windows 中格式化期间,我明确要求扩展格式(零填充)。
我尝试使用以下方式安装驱动器:
mount -t vfat /dev/sdb /mnt/flashdrive
并且内容已正确安装,我从 Windows 电脑复制的文件就在那里。
我是否应该考虑驱动器已损坏或被某种病毒劫持?该驱动器是否可信,或者我应该将其视为安全问题吗?可能是 fdisk 错误?
谢谢
我认为这可能与我写入随机数据这一事实有关,也许 mbr 扇区中的随机数据可能导致驱动器出现多个分区,但事实并非如此。我有 3 个相同的闪存驱动器,并使用这次重复相同的过程dd if=/dev/zero
我有 3 个相同的闪存驱动器,并使用这次而不是随机的并得到相同的结果。
对我来说,Windows 以某种奇怪的方式格式化驱动器,使驱动器成为工作的 fat32 闪存驱动器,但使 fdisk 和 gdisk 变得疯狂。
尝试将驱动器放入 Acronis Disk Director 中,它正确地将它们检测为 fat32 闪存驱动器,但是由于 Acronis Disk Director 仍然是 Linux 发行版,通过切换到控制台并运行 fdisk -l 会发生相同的奇怪分区方案。虽然 Acronis GUI 可以正确检测所有内容,但控制台 fdisk 却不能。然而,Acronis GUI 即使允许主分区的格式也不允许清理磁盘、创建额外的分区或类似的东西,它也将其称为“超级软盘”...
可能是制造商如何创建 USB 驱动器造成的问题?
编辑:我添加了 gdisk 输出
gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.9
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Exact type not match not found for type code 7200; assigning type code for
'Linux filesystem'
Exact type not match not found for type code 6500; assigning type code for
'Linux filesystem'
Exact type not match not found for type code 7900; assigning type code for
'Linux filesystem'
Exact type not match not found for type code 0D00; assigning type code for
'Linux filesystem'
Warning! Secondary partition table overlaps the last partition by
3790549690 blocks!
You will need to delete this partition or resize it in another utility.
Model: DataTraveler 3.0
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): *************************
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 15359966
Partitions will be aligned on 1-sector boundaries
Total free space is 15359933 sectors (7.3 GiB)
Number Start (sector) End(sector) Size Code Name
1 778135908 1919645538 544.3 GiB 8300 Linux filesystem
2 168689522 2104717761 923.2 GiB 8300 Linux filesystem
3 1869881465 3805909656 923.2 GiB 8300 Linux filesystem
4 2885681152 2885736650 21.7 MiB 8300 Linux filesystem
答案1
我不知道 Windows 的扩展格式,但你所说的“mount -t vfat /dev/sdb /mnt/flashdrive
正确安装”给出了有用的提示。
使用该命令,您将安装整个驱动器,而不是它的一个分区(/dev/sdb1
、/dev/sdb2
等)。这意味着Windows没有在其上创建分区表,而是将每个扇区(从第一个扇区到最后一个扇区)用作VFAT区域。
如果没有分区表,则fdisk
( 或gdisk
) 显示的内容根本不相关。
我应该考虑驱动器损坏吗
fdisk
不可以,除非您用(或)保存了“分区表” gdisk
。
或者被某种病毒劫持?
不。
该驱动器是否可信,或者我应该将其视为安全问题吗?
你的问题中没有任何内容表明它是不可信的。
可能是 fdisk 错误?
No.fdisk
是一个操作分区表的工具。它显示的是分区表(如果有的话)是什么,但实际上没有。这就是为什么不要使用 .txt 文件修改/保存分区表很重要fdisk
。
我认为这可能与我编写随机数据这一事实有关(...)
不,这是磁盘格式化的方式。
答案2
超级软盘(整个设备上有文件系统的驱动器,没有分区表)仍然包含定义 dos 分区表的片段。
fdisk
or的目的gdisk
是使用分区表。如果没有,则任何一个工具都不会提前知道这一点,并且会尽力解释数据作为分区表。在某些情况下,他们可以确定不存在分区表(例如,当全部为零时),但在许多情况下他们不能。
要点是,甚至随机数据也可以解释为(或多或少疯狂)分区表。这是您在设备上看到的内容。这个问题中有类似的设置:Windows 不挂载 USB NTFS 超级软盘;您可以从我的回答中获得一些见解。
看到疯狂的分区表是其中之一即使对于单个文件系统也更喜欢创建分区表的原因。不过,看来您的 Windows 更了解这一点。 Windows,而且只有 Windows 才是罪魁祸首。磁盘本身很好(或者更确切地说,没有证据表明它已损坏)。
只要你能在你使用的所有系统中挂载文件系统,就没有问题。我不知道 Windows 是否会被它造成的“混乱”所愚弄,但在 Linux 中,如果它们出现,您总是可以显式挂载/dev/sdb
并且根本不使用/dev/sdb1
等等。
但如果您想让设置更加合理,请重新开始。使用dd if=/dev/zero of=/dev/sdb bs=512 count=1
,然后fdisk /dev/sdb
创建一个只有一个主分区的dos分区表(起始扇区和结束扇区默认值即可),其类型应为0C
(W95 FAT32 (LBA)
)。让该工具写入分区表。然后创建一个 FAT32 文件系统sdb1
(在 Linux 中;或者让 Windows 来做,希望它会尊重新的分区表)。