这很奇怪。我可以访问另一个国家的服务器来工作。它运行 Linux Centos 7。它安装了 ntfs-3g、ntfsutils 和 ntfsprogs。如果办公室里有人将 USB 驱动器插入服务器,我可以看到它并安装分区。到目前为止一切顺利。
问题是我需要在这个 USB 驱动器上创建一个操作系统,为此我需要 3 个文件,其中一个是 centos 7 的 ISO 映像。为此,有人拿走了 USB 驱动器,在 Windows 10 下用 ntfs 格式化它,并复制了 3 个文件,包括一个 4.5GB 的 DVD iso 映像。复制这 3 个文件后,该人对其进行了检查,并且这 3 个文件按预期作为文件复制到 USB 闪存驱动器上。
当他们将驱动器放入服务器时,消息将 USB 驱动器检测为 32 GB 金士顿数据旅行者。但是,它会创建一个 cdrom 设备 /dev/sg5,并且虽然它创建了 /dev/sde,但并没有创建 /dev/sde1。我无法挂载 /dev/sg5,因为它不是块设备。我无法挂载 /dev/sde,因为它没有分区。
我使用 fdisk 进入 /dev/sde,看到 4 个不可读分区,分区偏移量不合理,这是不可能的。我尝试使用 ntfsfix,它运行完成,但并没有解决问题。分区表仍然不合理。
分区表在 fdisk 中的样子如下:
[root@localhost ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sde: 31.0 GB, 31029460992 bytes, 60604416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x73736572
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sde1 1920221984 3736432267 908105142 72 Unknown
/dev/sde2 ? 1936028192 3889681299 976826554 6c Unknown
/dev/sde3 ? 0 0 0 0 Empty
/dev/sde4 27722122 27722568 223+ 0 Empty
Command (m for help): d
如果我进入 fdisk,删除 4 个分区并创建一个新分区,退出,并将 USB 闪存驱动器格式化为 ntfs,那么我就可以正常安装该驱动器。
所以此时,我想,你知道吗,USB 驱动器有问题。我们使用了另一个 USB 驱动器,再次取出 3 个文件(包括一个 ISO 映像),将它们复制到闪存驱动器上,将其放入服务器,安装 USB 驱动器,复制 3 个文件,制作新的服务器映像,然后将其 catted/dd 到 USB 闪存驱动器。没有错误,服务器从 USB 闪存驱动器正常启动。没有任何问题。
现在我们发现服务器映像中存在一些错误,因此我们尝试重新创建它。和以前一样,我们使用了之前可安装的同一个 USB 驱动器,在 Windows 下将其格式化为 ntfs,将 3 个文件复制到它上面,然后将其放入服务器,现在服务器无法看到分区。另一个 USB 闪存驱动器再次出现了同样的问题,一个非块设备 cdrom /dev/sg5,以及一个 /dev/sde,上面有 4 个无意义的分区,没有可读分区。
我尝试重新启动服务器,但它没有看到分区块设备,
我尝试让对方重新格式化驱动器 ntfs,
我已经尝试过 exfat(出于某种原因,centos 7 根本看不到这个),
我不能使用 fat32 格式,因为 DVD iso 是 4.5 GB,
我尝试添加 USB 闪存驱动器的前 512 个字节,以防它是 mbr,
我尝试删除 Linux 中 /dev/sde 设备上的分区并重新添加 1 个单独的 ntfs 分区。该分区在 Linux 下显示为 /dev/sde1,但当 Windows 格式化它时,USB 闪存驱动器再次无法读取。
对于这两个 USB 驱动器(不同品牌),ntfs 都是可读的,然后在驱动器上安装了操作系统,现在驱动器在 Windows 上可见,但在 Linux 上不可见。
有什么方法可以“修复”这些驱动器,以便它们既可用于 Windows,也可用于 Linux?以前有人见过这种现象吗?
关于原因的可能理论:
- Windows 看到 ISO 映像被复制到 USB 驱动器上,并对其执行一些奇怪的操作,例如在闪存驱动器启动时自行创建一些东西。
- 有一些奇怪的可启动工件留在周围,我们无法摆脱它。
答案1
问题最终得到解决cat /dev/zero > /dev/sde
,方法是:从 Linux 内部使用 fdisking 删除分区,创建一个分区,用 格式化它mkfs.ntfs -f /dev/sde
,然后在 Windows 下复制文件而不进行格式化。