我有一个无法启动的 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
做同样的事情(更多示例和一些见解在此答案中:cat
cp
pv
使用命令克隆 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
如下:
- 用于
wipefs -a /dev/sdd
从头开始。 - 创建具有一个大分区的分区表(而不是超级软盘) 与
fdisk /dev/sdd
或gdisk /dev/sdd
,或类似工具。 - 使用(例如)在新分区(
/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
)。
如果文件系统大小不如驱动器大小大,则可以使用相应的实用程序(例如)对其进行扩展,resize2fs
以ext4
获取更多空间。
(对于分区图像,您可能需要查看losetup -P
。)
如果文件系统类型不允许此类操作,那么您可能需要重建映像并将整个新映像写入驱动器。(显而易见,如果您不喜欢这样,那么您实际上应该使用允许此类操作的文件系统格式化驱动器,然后将映像中的文件复制过来。)