Вопрос или проблема
Как мне смонтировать загрузочный раздел 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
-
Загружает модуль файловой системы UFS
$ sudo modprobe ufs
-
Создает точку монтирования для UFS
$ sudo mkdir /mnt/ufs
-
Находит раздел FreeBSD на диске
$ sudo fdisk -l | grep FreeBSD
/dev/sdb2 * 66585 2787880 2721296 1.3G a5 FreeBSD
-
Монтирует раздел UFS в режиме rw (чтение-запись)
$ sudo mount -t ufs -o loop,offset=8192,rw,ufstype=ufs2 /dev/sdb2 /mnt/ufs
-
Перечисляет содержимое смонтированного раздела
$ ls -la /mnt/ufs
Как определить правильное значение смещения?
Это просто, поэтому вначале мы определяем правильное значение смещения при монтировании раздела.
Нам нужно понять, где на диске начинается файловая система. Смещение указывает на байт, где начинает саму файловую систему внутри раздела диска.
-
давайте определим правильное значение смещения:
$ sudo fdisk -l
мы увидим информацию о секциях:
/dev/sdb2 * 66585 2787880 2721296 a5 FreeBSD
--------- -----
Очевидно, что раздел /dev/sdb2 начинается с сектора 66585
-
Чтобы получить значение для смещения, умножьте начальный сектор на размер сектора (обычно 512 байт):
смещение = 66585 * 512 = 34007520
-
Теперь, зная смещение, вы можете смонтировать раздел:
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
Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью!