Linux下从逻辑分区挂载FreeBSD UFS

Linux下从逻辑分区挂载FreeBSD UFS

如何在此设置中在 Ubuntu 下挂载 FreeBSD UFS 启动分区:

  • 单个 HDD,其中包含
  • MBR 分区表包含
  • 一些主 Linux 分区和一个扩展分区,其中包含
  • Linux 逻辑分区和 FreeBSD 逻辑分区,其中包含
  • FreeBSD 磁盘标签(因此逻辑分区是“切片”),其中包含
  • FreeBSD 引导 (UFS) 和交换分区

这是MBR分区:

ubuntu$ sudo fdisk -l /dev/sda

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders, total 83886080 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: 0x0005d5af

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1953791      975872   83  Linux
/dev/sda2         1953792    11718655     4882432   83  Linux
/dev/sda3        11718656    13672447      976896   82  Linux swap /     Solaris
/dev/sda4        13674494    83884031    35104769    5  Extended
/dev/sda5        13674496    33204223     9764864   83  Linux
/dev/sda6        33206272    83884031    25338880   a5  FreeBSD

这是磁盘标签:

freebsd$ disklabel /dev/ada0s6
# /dev/ada0s6:
8 partitions:
#          size     offset    fstype   [fsize bsize bps/cpg]
  a:   48580592         16    4.2BSD        0     0     0
  b:    2097152   48580608      swap                    
  c:   50677760          0    unused        0     0     # "raw" part, don't edit

我可以使用以下命令启动 FreeBSD /etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "FreeBSD" {
    insmod part_bsd
    insmod ufs2
    set root="(hd0,msdos6,bsd1)"
    kfreebsd /boot/kernel/kernel
    set kFreeBSD.acpi_load=YES
    set kFreeBSD.hint.acpi.0.disabled=0
    set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s6a
    kfreebsd_loadenv /boot/device.hints
}

这样我就可以毫无问题地从 grub2 访问 FreeBSD 分区。但Linux没有检测到任何BSD分区:

ubuntu$ ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4  /dev/sda5  /dev/sda6

版本:x86_64 上带有内核 4.2.0-27-generic 的 Ubuntu 14.04、FreeBSD 10.3 RELEASE amd64,均为全新安装。

答案1

解决方法是计算 BSD 分区在逻辑分区内的偏移量并使用带偏移量的循环设备:

mount -t ufs -o loop,offset=8192,ro,ufstype=ufs2 /dev/sda6 /mnt

答案2

使用fdisk /dev/sdXusing 命令b(对于 BSD 磁盘标签)后跟p(对于打印)来获取 BSD 磁盘标签/切片的列表。这看起来像这样:

Slice   Start     End Sectors   Size Type     Fsize Bsize   Cpg
a     4082400 4606687  524288   256M 4.2BSD    2048 16384 32776
b     4606688 5079391  472704 230.8M swap         0     0     0
c     4082400 8164799 4082400     2G unused       0     0     0
d     5079392 5603679  524288   256M 4.2BSD    2048 16384 32776
e     5603680 6127967  524288   256M 4.2BSD    2048 16384 32776
f     6127968 8164799 2036832 994.6M 4.2BSD    2048 16384 28552

这为您提供了每个分区的起始扇区。扇区乘以扇区大小(512 字节;请参阅 fdisk 输出)即可得出可与 mount 一起使用的偏移量。

例如对于切片f

mount -t ufs -o loop,offset=$((6127968 * 512)),ro,ufstype=ufs2 /dev/sdX /mnt/freebsd

答案3

Linux您可能对和中不同的硬盘命名约定感到困惑FreeBSD。从你的输出中可以清楚地看到 Linux 已经检测到你的ufs分区并且它是/dev/sda6。所以,你只需要执行以下操作

sudo modprobe ufs
sudo mount -t ufs -o ufstype=ufs2 /dev/sda6 /mnt

相关内容