Linux下mount FreeBSD分区

farwang 2014-11-19

如果需要从第二块硬盘拷贝文件,该硬盘格式化为UFS 2文件系统,如何mount 由FreeBSD创建的UFS 2文件系统到Ubuntu系统上呢? 

UFS文件系统广泛的使用在不同的操作系统(例如:HP-UX,Sun Solaris)中,包括FreeBSD。下面的语法用于挂载mount UFS 2文件系统:

mount -t ufs -o ufstype=ufs2,ro /dev/sdXY/path/to/mnt/point

每个分区包含一个文件系统存在FreeBSD中,称为一个Slice。Slice是FreeBSD中的一个术语,通常称为分区。这是因为FreeBSD具有UNIX的背景,Slice是编号的,从1开始到4。因此你需要使用等同的Linux分区名称。

验证UFS分区支持

为了检查你的Linux内核是否支持UFS文件系统,你可以执行下面的命令:

$ cat /proc/filesystems

输出示例:

nodev  sysfs

nodev  rootfs

nodev  bdev

nodev  proc

nodev  cpuset

nodev  binfmt_misc

nodev  debugfs

nodev  securityfs

nodev  sockfs

nodev  usbfs

nodev  pipefs

nodev  anon_inodefs

nodev  futexfs

nodev  tmpfs

nodev  inotifyfs

nodev  eventpollfs

nodev  devpts

       ext2

nodev  ramfs

nodev  hugetlbfs

       iso9660

nodev  mqueue

       ext3

nodev  rpc_pipefs

nodev  autofs

      第一行的关键字nodev含义是文件系统不需要挂载一个块设备,这是为什么也称为虚拟文件系统的原因。支持也被编译到内核中或者作为一个单独的模块。

      检查是否安装ufs驱动的方法:

方法1:# cat /proc/filesystems | grep ufs

方法2:ls -l /lib/modules/`uname -r`/kernel/fs/ufs/ufs.ko

      第1中方法无输出且第2种方法文件不存在表示UFS驱动没有编译到内核或作为模块安装。

安装UFS驱动

root@ubuntu:~# modprobe ufs

root@ubuntu:~# cat /proc/filesystems| grep ufs

      ufs

# modinfo ufs

filename:      /lib/modules/3.11.0-14-generic/kernel/fs/ufs/ufs.ko

license:        GPL

alias:          fs-ufs

srcversion:    961388D4E5A5AA94C372D19

depends:       

intree:        Y

vermagic:      3.11.0-14-generic SMP mod_unloadmodversions

root@ubuntu:~# uname -r

3.11.0-14-generic

root@ubuntu:~# ll/lib/modules/3.11.0-14-generic/kernel/fs/ufs/ufs.ko

# lsmod | grep ufs

# grep BSD_DISKLABEL /boot/config-`uname -r`

CONFIG_BSD_DISKLABEL=y

# grep UFS /boot/config-`uname-r`

CONFIG_UFS_FS=m

# dmesg |grep bsd

mount -t ufs -oufstype=sun|sunx86|44bsd|ufs2|5xbsd|old|hp|nextstep|nextstep-cd|openstep ...

挂载UFS硬盘

      依赖于你的FreeBSD的分区类型是UFS1还是UFS2,你需要引用不同的挂载选项。UFS1使用ufstype=44bsd,UFS2使用ufstype=ufs2.

 

      为了发现FFS分区所对应的设备,运行:

# fdisk -l

# sfdisk -l

   

Disk /dev/hda: 155061 cylinders, 16 heads,63 sectors/track

Warning: extended partition does not startat a cylinder boundary.

DOS and Linux will interpret the contentsdifferently.

Units = cylinders of 516096 bytes, blocksof 1024 bytes, counting from 0

 Device Boot Start    End  #cyls   #blocks  Id  System

/dev/hda1  *      0+  34536- 34537-  17406396    7 HPFS/NTFS

              end: (c,h,s) expected(1023,15,63) found (1023,254,63)

/dev/hda2      34536+ 134767- 100231-  50516392+  f  W95 Ext'd (LBA)

              start: (c,h,s) expected(1023,15,63) found (1023,255,63)

              end: (c,h,s) expected(1023,15,63) found (1023,254,63)

/dev/hda3    134767+144935-  10169-  5124735  a5  FreeBSD

              start:(c,h,s) expected (1023,15,63) found (1023,255,63)

              end: (c,h,s) expected (1023,15,63)found (1023,254,63)

/dev/hda4    144935+ 155060  10126-  5103189  a9  NetBSD

              start: (c,h,s) expected (1023,15,63) found (1023,255,63)

              end:(c,h,s) expected (1023,15,63) found (1023,80,63)

/dev/hda5      34536+ 102366-  67830- 34186288+  83  Linux

              start: (c,h,s) expected(1023,15,63) found (0,1,1)

              end: (c,h,s) expected(1023,15,63) found (1023,254,63)

/dev/hda6    102366+ 104294    1929-   971901  82  Linux swap / Solaris

              start: (c,h,s) expected(1023,15,63) found (0,1,1)

              end: (c,h,s) expected(1023,15,63) found (120,254,63)

/dev/hda7    104295+ 134767-  30473- 15358108+  83  Linux

              start: (c,h,s) expected(1023,15,63) found (0,1,1)

              end: (c,h,s) expected(1023,15,63) found (1023,254,63)

/dev/hda8    134767+143910-  9143-  4608000

/dev/hda9    143910+144935-  1026-    516735

/dev/hda10   144935+ 154078-  9143    4608072

/dev/hda11   154078+ 155060    983-    495117

/dev/hda12        0+ 34536-  34537-  17406396

/dev/hda13    34536+ 102366-  67830- 34186288+

/dev/hda14    102366+ 104294    1929-   971901

/dev/hda15    104295+ 144935-  40641- 20482843+

      因此,对于FreeBSD(FFSv2),/dev/hda3等价于/dev/ad0s3

      NetBSD(FFSv1),/dev/hda4等价于/dev/wd0c。

      但是这些设备是整个BSD的Slice(BOIS分区),不是BSD分区。

      通过仔细检查sfdisk的输出结果,我们发现/dev/hda3包含/dev/hda8和/dev/hda9,/dev/hda4包含/dev/hda10和/dev/hda11。

      我们可以推出,对于FreeBSD/dev/hda8等价于/dev/ad0s3a(FreeBSD的根分区),/dev/hda9等价于/dev/ad0s3b(FreeBSD的Swap分区)。

      对于NetBSD,/dev/had10等价于/dev/wd0a(NetBSD根分区),/dev/hda11等价于/dev/wd0b(NetBSD的Swap分区)。

      因此FreeBSD的根分区位于/dev/hda8,首先创建一个目录用于mountFFS分区,然后挂载它。

# mkdir/mnt/freebsd

# mount -t ufs-o ro,ufstype=ufs2 /dev/hda8 /mnt/freebsd/

NetBSD的根分区位于/dev/hda10上,首先创建一个挂载FFS分区的目录,然后挂载它。

# mkdir/mnt/netbsd

# mount -t ufs-o ro,ufstype=44bsd /dev/hda10 /mnt/netbsd/

让我们浏览挂载的目录:

# ls /mnt/*bsd

/mnt/freebsd:

bin  cdrom  COPYRIGHT  dist    etc  lib      media proc    root  sys usr

boot compat  dev        entropy home  libexec  mnt   rescue  sbin  tmp var

/mnt/netbsd:

altroot etc                gnome-screensave.core  mnt      root  var

bin     GENERIC            kern                  netbsd  sbin

boot    GENERIC-DIAGNOSTIC  lib                   onetbsd stand

CUSTOM  GENERIC-LAPTOP      libdata                proc    tmp

dev     GENERIC-NOACPI      libexec                rescue  usr

相关推荐