Есть винт, на нём раньше была винда, сейчас она успешно грохнута в пользу FreeBSD и нужно стянуть данные со старых слайсов. Всё бы хорошо, но откуда ползут 5 и 6 слайсы? То что в Extended расположено видно как разделы в слайсе.
Они есть и монтируются
bsdlabel давится и ничего не выводит# ls /dev/ad0*
/dev/ad0 /dev/ad0s2 /dev/ad0s2s2 /dev/ad0s2s5 /dev/ad0s3a /dev/ad0s3c /dev/ad0s3cb /dev/ad0s3ce /dev/ad0s3e /dev/ad0s6
/dev/ad0s1 /dev/ad0s2s1 /dev/ad0s2s5 /dev/ad0s3 /dev/ad0s3b /dev/ad0s3ca /dev/ad0s3cd /dev/ad0s3d /dev/ad0s5
fdisk показывает только 4 слайса, что вполне естественно при отсутствии GPT# bsdlabel -A /dev/ad0
bsdlabel: /dev/ad0: no valid label found
И второй вопрос, уже всё облазил, но ответа не нашёл, установка GRUB# fdisk ad0
******* Working on device /dev/ad0 *******
parameters extracted from in-core disklabel are:
cylinders=155058 heads=16 sectors/track=63 (1008 blks/cyl)
Figures below won't work with BIOS for partitions not in cyl 1
parameters to be used for BIOS calculations are:
cylinders=155058 heads=16 sectors/track=63 (1008 blks/cyl)
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 6 (0x06),(Primary DOS, 16 bit FAT (>= 32MB))
start 63, size 2104452 (1027 Meg), flag 0
beg: cyl 0/ head 1/ sector 1;
end: cyl 130/ head 254/ sector 63
The data for partition 2 is:
sysid 15 (0x0f),(Extended DOS (LBA))
start 40965750, size 115330635 (56313 Meg), flag 0
beg: cyl 1023/ head 0/ sector 1;
end: cyl 1023/ head 254/ sector 63
The data for partition 3 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 2104515, size 38860605 (18974 Meg), flag 80 (active)
beg: cyl 39/ head 13/ sector 1;
end: cyl 703/ head 15/ sector 63
The data for partition 4 is:
<UNUSED>
Он отказывается ставиться, пишет
> The file /boot/grub/stage1 not read correctly.
до тех пор пока не запустишь sade и не ткнёшь "сохранить".
Вытащил первые 64 килобайта перед выполнением sade и после выполнения sade.
vbindiff помог выкурить в них отличия в двух местах:
1) два байта по смещению 0x01C4 в MBR забиваются FF FF.
2) по смещению 0x8000 меняется больше данных, но после поблочного переписывания
стало понятно что интересует только первый блок слайса.
Вытаскивал командой dd if=/dev/ad0 of=block bs=512 count=1 seek=64
Что делать и как лечить кроме ручного вмешательства с sade? Hужно автоматом
разворачивать систему.
Единственная команда показавшая разницу до и после выполнения sade
> bsdlabel -A ad0s1
Которая после выполнения sade стала писать две строки с ошибками, но всё равно
всё работает и GRUB уже будет ставиться без вопросов.
Вот вывод до sade
# /dev/ad0s1:
type: unknown
disk: amnesiac
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 24963
sectors/unit: 25163649
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 16 4.2BSD 2048 16384 8
b: 2097152 1048592 swap
c: 25163649 0 unused 0 0 # "raw" part, don't
edit
d: 22017905 3145744 4.2BSD 2048 16384 28552
А вот вывод после sade
# /dev/ad0s1:
type: ESDI
disk: ad0s1
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 24966
sectors/unit: 25165824
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 1048576 16 4.2BSD 0 0 0
b: 2097152 1048592 swap
c: 25163649 0 unused 0 0 # "raw" part, don't
edit
d: 22017905 3145744 4.2BSD 0 0 0
>bsdlabel: partition c doesn't cover the whole unit!
>bsdlabel: An incorrect partition c may cause problems for standard system
>utilities
Чем можно автоматизировать вносимые sade изменения в разметку? Или хотябы
почему такая бредятина получается и при создании разметки через fdisk/bsdlabel
и при создании через gpart create.
Примечательно что если ставить FreeBSD через sysinstall то глюка не вылазит, так как для разметки как правило используется sade, но как раз надо обойтись без sade.

