我尝试在 ubuntu 12.04 系统上执行以下命令:
sudo mount minix203.img -o loop -t minix /mnt/myminix/
为了使用 minix 分区挂载 .img 文件;并得到以下错误:
mount: Not a directory
我的命令有什么问题吗?
答案1
我认为布鲁斯所说的是真的 - 它包含整个分区表。那么这里面就没有什么不能用的了。对于以下命令,您需要util-linux
2.21 或更高版本。
sudo losetup --find --show -P minix203.img
这应该将您的图像附加到环回设备,并显示图像附加到哪个环回设备(例如/dev/loop0
)。假设,fdisk -l /dev/loop0
应该显示分区表和设备名称,以便您能够安装它们。所以你最终会得到类似的结果:
sudo mount /dev/loop0p1 -t minix /mnt/myminix
应该管用。请注意,该loop
选项已消失,losetup
请处理该部分。
但是,如果您碰巧没有util-linux
正确版本的软件包,您可以使用fdisk
和手动执行此操作losetup
(或者更好 - 从外部源安装软件包)。在这种情况下,您只需要进行一些计算即可。首先是附加整个驱动器的图像:
sudo losetup --find --show part.img
这应该告诉您设备名称 - 让我们假设它是/dev/loop0
.然后,尝试fdisk -l
一下以获得分区布局:
fdisk -l /dev/loop0
对于我的文件,我得到如下输出:
Disk /dev/loop0: 67 MB, 67108864 bytes, 131072 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 identifier: 0x2645940b
Device Boot Start End Blocks Id System
/dev/loop0p1 2048 63487 30720 83 Linux
/dev/loop0p2 63488 131071 33792 83 Linux
不要被欺骗,这些可能不是现有的设备名称。您必须确定要使用此表安装哪个分区。大小或文件系统类型应该让您做出一些假设。
现在是计算时间 - 您需要分区的偏移量及其大小。您可以通过将扇区大小乘以单位大小来得到结果(以字节为单位)。你可以看到fdisk
告诉我我的扇区大小是512字节,所以如果我想挂载/dev/loop0p1
,它从第(2048 * 512)个字节开始。这就是偏移量,它等于 1048576(当然是在该示例的情况下)。
扇区大小为end_sector_number - start_sector_number + 1
,因为这些数字包含在内(最终扇区在该大小之内)。这里它等于 61440 个扇区 == 31457280 字节。这就是我们所需要的。
您现在可以分离环回设备并重新连接它,限制其大小限制到您想要安装的特定分区(用您自己的数字替换这些数字):
sudo loopback -d /dev/loop0
sudo loopback -f --show -o 1048576 --sizelimit 31457280 part.img
它可能会将其附加到/dev/loop0
,您现在可以安全地安装它:
mount -t minix /dev/loop0 /mnt/myminix
除了通常会影响整个驱动器的 MBR 的情况(例如使用 mkfs 进行格式化)之外,这应该几乎完全可操作。
它是如何工作的?
MBR 分区表的布局很简单 - 首先有 512 字节的描述,分区从哪里开始,在哪里结束,然后是数据。对于扩展分区,这可能会有点困难。您可以手动设置分区限制,这就是内核为您自己为常规硬盘驱动器所做的事情。
答案2
那是 Minix 的一个相当旧的版本。
有一个Google 网上论坛页面这里面有你的答案。引用那篇文章:
在 minix203.img 中有一个完整的高清图像,包括分区表。 mount一开始查找的不是第一个分区,而是分区表。所以安装失败。
我相信较新的 Minix 3 ISO 映像也存在同样的情况。安装程序知道有一个小一点的 Joliet 文件系统和一个更大的 Minix 文件系统。所以你不能只挂载 ISO 镜像(环回)然后看东西。
答案3
这个答案可能不会立即相关,但我在一次调查中发现了它
chroot 救援。
我的情况:
我在计算机上安装 Ubuntu 之后安装了 Windows,但我的引导加载程序 (grub) 已损坏并且操作系统探测器无法在系统上看到 Ubuntu 映像。
这是我所做的:
1) 使用 Ubuntu Live CD 启动。
2)从磁盘管理器中找到我的卷的位置:
root - /dev/sda6
boot - /dev/sda8
3)创建临时目录/tmp/mydir并以root身份执行以下命令。
mount /dev/sda6 /tmp/mydir
mount --bind /proc /tmp/mydir/proc
mount --bind /sys /tmp/mydir/sys
mount --bind /dev /tmp/mydir/dev
mount --bind /dev/pts /tmp/mydir/dev/pts
最后,我想将启动设备即/dev/sda8绑定到/tmp/mydir/boot文件夹,然后麻烦就来了。
mount --bind /dev/sda8 /tmp/mydir/boot
我收到以下错误:
mount : not a directory
一开始我对这个和这个有点困惑GitHub 文章帮我解决了。当我尝试将设备(此处为 /dev/sda8)安装到已安装的设备(此处为 /dev/sda6)时,出现了问题。简而言之,您不能这样做,因为该--bind
选项需要一个目录而不是像 /dev/sda8 这样的块设备作为输入。
现在好消息来了!有一个解决方法。我将启动卷安装到 /tmp 中的另一个目录,然后将此目录绑定到 /tmp/mydir/boot。
mount /dev/sda8 /tmp/booty
mount --bind /tmp/booty /tmp/mydir/boot
这解决了mount : not a directory
错误。
4)我进行了chroot
救援以解决我的最终问题。