linux下挂载freebsd slice分区

linux下挂载freebsd slice分区

我在linux下有:

       Device   Boot      Start         End      Blocks   Id  System
/filename.img      *         63     1007999      503968+  a5  FreeBsd

在上面的分区下,我有两个片:ufs 文件系统和交换区。我不知道如何确定挂载 ufs 分区的挂载偏移量。

mount -r -t ufs -o loop,offset=32256,ufstype=ufs2 filename.img /test/

dmesg 输出

ufs_read_super: bad magic number

它不起作用。

答案1

我怀疑是

mount -r -o loop,offset=32768,ufstype=ufs2 filename.img /test/

如果我没记错的话,第一个 BSD 分区开始于相对于整个磁盘的 32kB 边界。这是 512B 的 64 个扇区。相对于PC分区,BSD分区的偏移量为63个扇区,因为PC分区相对于整个磁盘的偏移量为1个扇区:磁盘的第一个扇区包含分区表。

根据 rozcietrzewiacz 的建议,您可以使用以下命令确认 BSD 分区的偏移量

partx -l filename.img

有一个修补让Linux内核支持自动访问循环设备的分区。 Debian 将其应用到他们的内核中。如果您有此补丁,请确保loop驱动程序具有足够大的max_part参数(您可能需要这样做rmmod loop; modprobe max_part=63)。然后 BSD 分区将显示为/dev/loop0p5和 之类的内容/dev/loop0p6

答案2

感谢您的所有提示。

# partx -l filename.iso
HDIO_GETGEO: Inappropriate ioctl for device

我添加了文件名映射,它在 /dev/mapper 目录中创建了逻辑映射

# kpartx -a filename.iso

# ls -l /dev/mapper/
control  loop0p1

最后一张检查

# partx -l /dev/mapper/loop0p1 
1:         0-       -1 (        0 sectors,      0 MB)
2:         0-       -1 (        0 sectors,      0 MB)
3:         0-       -1 (        0 sectors,      0 MB)
4:         0-    49999 (    50000 sectors,     25 MB)
1:   8388671-142078859 (133690189 sectors,  68449 MB)
2:        63-  8388670 (  8388608 sectors,   4294 MB)

最后一个成功了

mount -r -t ufs -o loop,offset=$((8388671*512)),ufstype=ufs2 filename.iso /test/

问候!

相关内容