Монтирование UFS FreeBSD из логического раздела в Linux

Вопрос или проблема

Как мне смонтировать загрузочный раздел FreeBSD UFS под Ubuntu в этой конфигурации:

  • один HDD, который содержит
  • таблицу разделов MBR, которая содержит
  • некоторые первичные разделы Linux и расширенный раздел, который содержит
  • логический раздел Linux и логический раздел FreeBSD, который содержит
  • дисклейбл FreeBSD (так что логический раздел – это “срез”), который содержит
  • загрузочный (UFS) и раздел подкачки FreeBSD

Вот разметка MBR:

ubuntu$ sudo fdisk -l /dev/sda

Диск /dev/sda: 42.9 GB, 42949672960 байт

255 голов, 63 сектора/дорожка, 5221 цилиндров, всего 83886080 секторов
Единицы = сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Идентификатор диска: 0x0005d5af

   Устройство Запуск  Начало       Конец        Блоков   Id  Система
/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  Расширенный
/dev/sda5        13674496    33204223     9764864   83  Linux
/dev/sda6        33206272    83884031    25338880   a5  FreeBSD

А вот дисклейбл:

freebsd$ disklabel /dev/ada0s6
# /dev/ada0s6:
8 разделов:
#          размер     смещение    тип файловой системы   [fsize bsize bps/cpg]
  a:   48580592         16    4.2BSD        0     0     0
  b:    2097152   48580608      swap                    
  c:   50677760          0    неиспользуемый        0     0     # "сырой" раздел, не редактируйте

Я могу загрузить FreeBSD, используя следующий /etc/grub.d/40_custom:

#!/bin/sh
exec tail -n +3 $0
# Этот файл предоставляет легкий способ добавить пользовательские элементы меню. Просто напишите
# элементы меню, которые вы хотите добавить, после этого комментария. Будьте осторожны, чтобы не изменить
# строку 'exec tail' выше.

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
}

Таким образом, я могу получить доступ к разделу FreeBSD из grub2 без проблем. Но Linux не обнаруживает никаких разделов BSD:

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

Версии: Ubuntu 14.04 с ядром 4.2.0-27-generic на x86_64, FreeBSD 10.3 RELEASE amd64, обе свежие установки.

Рабочее решение заключается в том, чтобы вычислить смещение раздела BSD в пределах логического раздела и использовать петлевое устройство с указанным смещением:

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

Используйте fdisk /dev/sdX, используя команду b (для дисклейблов BSD), а затем p (для печати), чтобы получить список дисклейблов/slices BSD. Это будет выглядеть так:

Slice   Start     End Секторы   Размер Тип     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 неиспользуемый       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

Вероятно, вы были запутаны различной номенклатурой жестких дисков в Linux и FreeBSD. Из вашего вывода можно явно видеть, что Linux обнаружил ваш ufs раздел, и это /dev/sda6. Так что вам просто нужно сделать следующее:

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

  1. Загружает модуль файловой системы UFS

    $ sudo modprobe ufs

  2. Создает точку монтирования для UFS

    $ sudo mkdir /mnt/ufs

  3. Находит раздел FreeBSD на диске

    $ sudo fdisk -l | grep FreeBSD

    /dev/sdb2 * 66585 2787880 2721296 1.3G a5 FreeBSD

  4. Монтирует раздел UFS в режиме rw (чтение-запись)

    $ sudo mount -t ufs -o loop,offset=8192,rw,ufstype=ufs2 /dev/sdb2 /mnt/ufs

  5. Перечисляет содержимое смонтированного раздела

    $ ls -la /mnt/ufs

Как определить правильное значение смещения?

Это просто, поэтому вначале мы определяем правильное значение смещения при монтировании раздела.
Нам нужно понять, где на диске начинается файловая система. Смещение указывает на байт, где начинает саму файловую систему внутри раздела диска.

  1. давайте определим правильное значение смещения:

    $ sudo fdisk -l

    мы увидим информацию о секциях:

    /dev/sdb2 * 66585 2787880 2721296 a5 FreeBSD

    --------- -----

    Очевидно, что раздел /dev/sdb2 начинается с сектора 66585

  2. Чтобы получить значение для смещения, умножьте начальный сектор на размер сектора (обычно 512 байт):

    смещение = 66585 * 512 = 34007520

  3. Теперь, зная смещение, вы можете смонтировать раздел:

    sudo mount -t ufs -o loop,offset=34007520,rw,ufstype=ufs2 /dev/sdb2 /mnt/ufs

всего наилучшего**

Ответ или решение

Чтобы смонтировать раздел FreeBSD UFS из логического раздела в Ubuntu, выполните следующие шаги, учитывая предоставленную информацию о разметке диска и структуре файловых систем.

Шаг 1: Установка необходимых модулей

Прежде всего, вам нужно убедиться в наличии модуля файловой системы UFS в вашем ядре Linux. Это можно сделать, загрузив модуль ufs:

sudo modprobe ufs

Шаг 2: Создание точки монтирования

Создайте директорию для точки монтирования, где будет размещен ваш раздел FreeBSD:

sudo mkdir /mnt/ufs

Шаг 3: Определение смещения

Теперь вам нужно рассчитать смещение для корректного монтирования UFS. Основываясь на выходных данных команды fdisk, мы можем определить, где начинается файловая система внутри логического раздела FreeBSD.

В вашем случае логический раздел FreeBSD расположен на /dev/sda6, и чтобы узнать, где начинается основной раздел UFS внутри этого логического раздела, используйте команду fdisk для отображения данных о разделах:

sudo fdisk -l /dev/sda | grep FreeBSD

Вывод может выглядеть, например, так:

/dev/sda6  *    13674496    33204223    25338880   a5  FreeBSD

Согласно предоставленным данным, раздел FreeBSD начинается с сектора 66585. Чтобы получить значение смещения в байтах, перемножьте номер сектора на размер сектора (обычно 512 байт):

offset=$((66585 * 512))

Шаг 4: Монтирование раздела UFS

Теперь, имея значение смещения, вы можете смонтировать раздел UFS в созданную точку монтирования. Например, если ваше смещение для раздела UFS (раздел ‘a’ согласно disklabel) составляет 8192:

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

Если вы рассчитали смещение самостоятельно, используйте его:

sudo mount -t ufs -o loop,offset=<ваше_смещение>,ro,ufstype=ufs2 /dev/sda6 /mnt/ufs

Шаг 5: Проверка монтирования

Вы можете проверить содержимое смонтированного раздела, выполнив команду:

ls -la /mnt/ufs

Заключение

Теперь у вас должна быть корректно смонтированная файловая система UFS из логического раздела FreeBSD. Не забудьте размонтировать ее по завершении, используя команду:

sudo umount /mnt/ufs

Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...