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

버전: Ubuntu 14.04, FreeBSD 10.3 RELEASE amd64(x86_64에 커널 4.2.0-27-generic 포함), 둘 다 새로 설치합니다.

답변1

해결책은 논리 파티션 내에서 BSD 파티션의 오프셋을 계산하고 오프셋이 있는 루프 장치를 사용하는 것입니다.

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

답변2

BSD 디스크 레이블/슬라이스 목록을 얻으려면 fdisk /dev/sdXusing 명령 b(BSD 디스크 레이블의 경우)과 (인쇄의 경우) 명령을 사용하십시오 . p이는 다음과 같습니다:

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 출력 참조)를 곱하세요.

예를 들어 슬라이싱의 경우 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

관련 정보