LINUX.ORG.RU

Ответ на: комментарий от anonymous

нет такой программы:

$ aptitude search filefrag
$

Чего стесняетесь-то, самое время продемонстрировать всю мощь linux-конвейера с его пайпами. Найти программу, которая выдает информацию о диске, какой-нибудь калькулятор командной строки.

Indaril_Shpritz
() автор топика
Ответ на: комментарий от anonymous

ну ладно:

$ sudo filefrag -v -b512 /boot/grub/i386-pc/core.img
Filesystem type is: ef53
Filesystem cylinder groups approximately 247
File size of /boot/grub/i386-pc/core.img is 25131 (56 blocks of 512 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..      47:      21232..     21279:     48:             merged
   1:       48..      55:      21280..     21287:      8:             last,merged,eof
/boot/grub/i386-pc/core.img: 1 extent found

я ещё так умею:

$ stat --format=%i /boot/grub/i386-pc/core.img
3614066
                %i - inode number

Дальше мысль не идёт

Indaril_Shpritz
() автор топика
Ответ на: комментарий от anonymous

не, всё-таки не сходится:

$ sudo dd skip=23280 count=56 bs=512 if=/dev/sda >./core2.img
56+0 records in
56+0 records out
28672 bytes (29 kB) copied, 0.000365384 s, 78.5 MB/s

$ du -b /boot/grub/i386-pc/core.img
25131   /boot/grub/i386-pc/core.img

$ cmp -n 25131 /boot/grub/i386-pc/core.img  ./core2.img
$

то есть начало у файла - сектор 23280, это 0x5AF0
смотрим, что пишут в MBR:

$ sudo dd if=/dev/sda count=1 bs=512 >mbr.sec
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000100376 s, 5.1 MB/s

$ objdump -D -b binary -mi386 -Maddr16,data16 mbr.sec | grep ,%ebx
  bc:   66 8b 1e 5c 7c          mov    0x7c5c,%ebx
  c5:   66 8b 1e 60 7c          mov    0x7c60,%ebx

вот эта строчка:
https://github.com/jolicloud/grub2/blob/master/boot/i386/pc/boot.S#L202

Надо заметить, что 0x7c60 и 0x7c5c - это совсем не 0x5AF0

Indaril_Shpritz
() автор топика
Ответ на: комментарий от anonymous

Ну тогда другой вопрос - как узнать, какой файл соответствует LBA-сектору 31836

Indaril_Shpritz
() автор топика
Ответ на: комментарий от anonymous

нет. в GNU Assembler - порядок операндов - откуда -> куда.
пруф:
http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax

Здесь константа грузится в регистр bx,
а потом регистр bx отправляется на заполнение структуры Device Address Packet (DAP) по адресу [si+8]

Структура DAP описана на странице 5:
http://t13.org/Documents/UploadedDocuments/project/d1386r0-EDD.pdf

там как раз говорится, что по смещению 8 нужно уложить Quad word
Starting logical block address, on the target device, of the data to be transferred. This is a 64 bit unsigned linear address.

Indaril_Shpritz
() автор топика
Ответ на: комментарий от i-rinat

Да, спасибо, в этой части получилось и адрес первого сектора файла я выяснил. Но проблема в том, что мой MBR читает начиная с другого сектора. Т.е. не этот файл.

Indaril_Shpritz
() автор топика
Ответ на: комментарий от anonymous

Ну хорошо, тогда в регистр кладётся не константа, как я думал в начале, а содержимое памяти из этого адреса.
Учитывая, что сектор загружен по адресу 7C00, то 0x7c5c - 7C00, это 5с байт от начала (92-ой байт)
#define GRUB_BOOT_MACHINE_KERNEL_SECTOR 0x5c

А в этой памяти у нас лежит единица (то есть сектор следующий за MBR):

$ sudo dd if=/dev/sda skip=92 count=4 bs=1 | hexdump -C
4+0 records in
4+0 records out
4 bytes (4 B) copied, 0.000128191 s, 31.2 kB/s
00000000  01 00 00 00                                       |....|
00000004

Что совсем неверно, так как устанавливал grub2 я командой

$ sudo grub-install /dev/sda2 --boot-directory=/boot --force
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.

т.е. на файловую систему, а не в MBR-Gap

Indaril_Shpritz
() автор топика
Ответ на: комментарий от Indaril_Shpritz

тогда уж

grub-install /dev/sda --boot-directory=/boot

Ставить загрузчик в раздел - странное решение. Ведь тогда его кто-то должен загрузить из раздела, а биос этого не умеет.

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.