如何使用“dd”刻录后的文​​件来更新 USB 记忆棒?

如何使用“dd”刻录后的文​​件来更新 USB 记忆棒?

我有一个无法启动的 test.iso 文件,它只是一个包含一些文件和文件夹的映像。我使用“dd”命令将此 test.iso 文件写入我的 USB 记忆棒。

dd if=/root/test/test.iso of=/dev/sdd bs=4096

最后,我将所需的文件放到了 USB 棒上,但我想手动添加另外两个文件,但由于处于只读模式,因此无法添加。我该如何执行此过程以便以后可以写入文件?是否有任何“dd”参数可以避免只读模式,还是我应该使用其他参数创建 iso 文件?

这是输出file /root/test/test.iso

test.iso: ISO 9660 CD-ROM filesystem data 'My-Image'

答案1

解释

您的USB 驱动器test.iso包含一个 ISO 9660 文件系统。dd执行 -ing 后,您的 USB 驱动器将包含该文件系统的副本。ISO 9660 适用于只读媒体(如 CD),并且其设计为只读。

您的 Linux 可以从 USB 挂载 ISO 9660,就像挂载 CD 一样。甚至还有一种方法可以从常规文件挂载(即您可以从 挂载文件系统test.iso,我们将介绍这一点)。无论从哪里挂载,ISO 9660 都是只读的。

在某些情况下,我们可以在将“iso”添加到 USB 后写入 USB 棒dd。如果“iso”包含其他类型的文件系统,或分区表和此类文件系统,就会发生这种情况。人们倾向于将块设备的任何副本称为“iso”,即使它包含 ISO 9660 以外的内容。他们将“iso”写入 USB,没有任何问题,因此他们(我想直到现在你也是如此)认为可以安装任何“iso”进行写入。虽然您的文件包含 ISO 9660,但它是真实的iso,因此是只读的。

你对 所做的dd只是从 读取test.iso并写入/dev/sdd。 没有什么神奇之处。 你可以用或dd做同样的事情(更多示例和一些见解在此答案中:catcppv使用命令克隆 SSD)。其中有几个选项dd可以转换数据(因此输出与输入不相同),但它们肯定不能将一种文件系统类型转换为另一种文件系统类型。


解决方案

要创建修改后的 ISO 文件系统,您需要使用genisoimage。您不希望这样,因为新的 ISO 文件系统仍然是只读的。

您要做的是在 USB 上创建一个空文件系统。它应该是专为读取而设计的类型写作:ext4、ext3、Btrfs、NTFS、FAT32……注意文件系统有限制。仅对于 Linux,您应该使用 ext4。如果要在 Windows 上也使用该文件系统,NTFS 是个好主意。您应该知道您想要哪种类型的文件系统。

如果您不再有/root/test/test.iso,请将文件从 USB 复制到另一个位置,因为我们将擦除 USB 棒的当前内容。

我假设/dev/sdd仍然是您的 USB。请注意,这可能会在重新启动或移除和插入 USB 后发生变化,因此您不应自动做出此假设。根据您当前的情况调整所有命令,并确保您使用的是正确的设备(lsblk可能很方便)。

umount /dev/sdd继续操作之前,请卸载 USB ( )。

创建文件系统的标准程序/dev/sdd如下:

  1. 用于wipefs -a /dev/sdd从头开始。
  2. 创建具有一个大分区的分区表(而不是超级软盘) 与fdisk /dev/sddgdisk /dev/sdd,或类似工具。
  3. 使用(例如)在新分区(/dev/sdd1)内创建文件系统。mkfs.<type>mkfs.ntfs

有一些工具(通常带有 GUI)可以完成所有这些工作,例如gparted您的发行版使用的任何磁盘管理工具。

然后,像包含 ISO 9660 时一样,将 USB 挂载到某个位置,但这次您将挂载新的可写入的空文件系统。您还应该从test.iso另一个挂载点(即某个现有的空目录)挂载 ISO 9660 文件系统:

mount /root/test/test.iso /another/mountpoint

最后,您将 复制/another/mountpoint到已安装的 USB。之后,您umount /another/mountpoint

或者,如果您不再有/root/test/test.iso,请在擦除 USB 之前复制您保存的文件。不管怎样, 中的文件test.iso现在都位于您的 USB 上,位于您可以写入的文件系统中。

答案2

这与文件系统的类型及其元数据(大小)有关。

如果test.iso实际上例如是一个ext4图像并且它的文件系统大小尚未填满,那么您可以将其挂载到/dev/sdd某处并将额外的文件写入所选的挂载点(例如/mnt)。

如果文件系统大小不如驱动器大小大,则可以使用相应的实用程序(例如)对其进行扩展,resize2fsext4获取更多空间。

(对于分区图像,您可能需要查看losetup -P。)

如果文件系统类型不允许此类操作,那么您可能需要重建映像并将整个新映像写入驱动器。(显而易见,如果您不喜欢这样,那么您实际上应该使用允许此类操作的文件系统格式化驱动器,然后将映像中的文件复制过来。)

相关内容