我在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/
问候!