Toon posts:

Bootsector

Pagina: 1
Acties:

Verwijderd

Topicstarter
erm een aantal dingen geprobeerd en gezocht alleen hoe kon je ook alweer je bootsector van linux in een bestand opslaan zodat ik Windows Bootmanager naar Linux kan laten verwijzen?

tnx alvast,

breez

  • DPLuS
  • Registratie: April 2000
  • Niet online

DPLuS

 

man dd

  • SvMp
  • Registratie: September 2000
  • Niet online
Zo simpel is het dus niet.
Je moet namelijk weten waar die bootsector staat voordat je met dd aan de slag kunt.
Vrij lastig, maar wel te doen.

Stap 1. Vraag info op met fdisk (commando 'p')
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@a:/home/simon# fdisk /dev/hda

The number of cylinders for this disk is set to 1027.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/hda: 255 heads, 63 sectors, 1027 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start  End    Blocks   Id  System
/dev/hda1        1   420   3373618+  97  Unknown
/dev/hda2   *    421     455    281137+  83  Linux native
/dev/hda3        456     827   2988090   83  Linux native
/dev/hda4        828     860    265072+  82  Linux swap

Command (m for help): q

root@a:/home/simon#

Zoek de bootable partitie, dus die met het sterretje. Het kan zijn dat door je bootmanager een andere bootable is, je moet in ieder geval de root-partitie hebben van je Linux-systeem.
In mijn geval is dat /dev/hda2

Stap 2. Block berekenen
Waar staat die bootsector?
Uitrekenen!

Formule: Sectors per cylinder * begincylinder

De sectors per cylinder kun je vinden bij het regeltje "units = cylinders of <getal> * 512 bytes"
Dat <getal> heb je nodig. Is in mijn geval 16065.

Ook heb je de begincylinder nodig. Die vind je terug in de partitietabel, in de kolom start.
In mijn geval is dat 421. Cylinders moeten echter vanaf 0 worden getald en fdisk doet het vanaf 1. Dus moet je er 1 aftrekken.
Mijn begincylinder is dus 421 - 1 = 420

Rekenen: 16065 * 420 = 6747300

Stap 3. Met dd de bootsector opslaan
code:
1
2
3
dd if=/dev/hda of=./bootsector count=1 skip=<getal>

Bij getal moet je het bij stap 2 berekende getal invullen

In mijn geval:
code:
1
2
3
root@a:/home/simon# dd if=/dev/hda of=./bootsector skip=6747300 count=1
1+0 records in
1+0 records out

Met hexdump controleren of je het goed hebt gedaan:
code:
1
hexdump bootsector

Als het laatste getal aa55 is, is de kans groot dat je met een bootsector hebt te maken en je het goed hebt gedaan.
ALs het niet aa55 is, heb je het niet goed gedaan, of je hebt Lilo (of een andere loader) niet in je bootsector staan.
Want bedenk je wel: Lilo moet je in de bootsector hebben geinstalleerd (niet in het MBR!)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-03 21:02

Creepy

Tactical Espionage Splatterer

hmmm kan me herinneren dat ik dat simpeler heb gedaan zonder die skip

if=/dev/hda2 kan je toch ook meteen doen? (als hda2 dus je linux bootschijf is)

dd of=bootsec.lnx if=/dev/hda2 bs=512 count=1
o.i.d.

Enige nadeel is dat als je lilo gebruikt je elke keer als je lilo opties verandert of een nieuwe kernel installeer je dit opnieuw moet doen..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

Op donderdag 08 november 2001 13:06 schreef Creepy het volgende:
if=/dev/hda2 kan je toch ook meteen doen? (als hda2 dus je linux bootschijf is)
Klopt. Skip is eigenlijk helemaal niet nodig.

Het zal wel niet, maar het zou maar wel.


Verwijderd

Topicstarter
Bedankt allemaal de bootsector zelf wegschrijven is geen probleem had ut voorheen vaker gedaan alleen wist niet meer waarmee ik ut kon doen |:(

maar bedankt,

Breez

  • SvMp
  • Registratie: September 2000
  • Niet online
Op donderdag 08 november 2001 13:13 schreef Jotti het volgende:

[..]

Klopt. Skip is eigenlijk helemaal niet nodig.
Damn daar had ik ff niet aangedacht :) |:(

Verwijderd

Sorrie hoor, heeeele oude topic. Maar het is wel interessant, ik heb gedaan wat svdmeer voorstelde, en wat Creepy zei ook. Maar ik kom op 2 verschillende bestanden van 512 bytes uit. Notitie is wel dat het vanuit een linux systeem op hdB, is uitgevoerd op een windowsXP partitie op hdA. Wellicht dat dat uitmaakt ?

mijn bootsector ligt op sector 0, op de eerste partitie. Dus volgens svdmeer's verhaal wordt het dan
code:
1
dd if=/dev/hda of=bootsector skip=0 count = 1

skip =0 bij mij want 16065 * (1-1) = 0

...en bij Creepy's verhaal
code:
1
dd if=/dev/hda1 of=bootsector2 count = 1


Is het niet zo dat ik bij de eerste opdracht het MBR opgeslagen heb en bij de tweede de bootsector van partitie 1 ?

moet er trouwens bij vermelden dat hexdump bij beide files DIT als laaste uitspuugt:

00001f0 0000 0000 0000 0000 9483 bfa6 0000 aa55
0000200

Klopt het dan wel dat dat 0000200 er nog onder staat ?

[ Voor 1% gewijzigd door Verwijderd op 10-08-2005 10:59 . Reden: 1-0 moest 1-1 zijn ]


  • SvMp
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op woensdag 10 augustus 2005 @ 10:44:
Sorrie hoor, heeeele oude topic. Maar het is wel interessant, ik heb gedaan wat svdmeer voorstelde, en wat Creepy zei ook. Maar ik kom op 2 verschillende bestanden van 512 bytes uit. Notitie is wel dat het vanuit een linux systeem op hdB, is uitgevoerd op een windowsXP partitie op hdA. Wellicht dat dat uitmaakt ?

mijn bootsector ligt op sector 0, op de eerste partitie. Dus volgens svdmeer's verhaal wordt het dan
code:
1
dd if=/dev/hda of=bootsector skip=0 count = 1

skip =0 bij mij want 16065 * (1-1) = 0

...en bij Creepy's verhaal
code:
1
dd if=/dev/hda1 of=bootsector2 count = 1


Is het niet zo dat ik bij de eerste opdracht het MBR opgeslagen heb en bij de tweede de bootsector van partitie 1 ?

moet er trouwens bij vermelden dat hexdump bij beide files DIT als laaste uitspuugt:

00001f0 0000 0000 0000 0000 9483 bfa6 0000 aa55
0000200

Klopt het dan wel dat dat 0000200 er nog onder staat ?
Je hebt inderdaad met de eerste opdracht het MBR opgeslagen en met de tweede de juiste bootsector.

Hoe het komt dat je met die eerste op het MBR komt en niet op de gevraagde partitie?
Verklaring is simpel. Het MBR is absoluut gezien sector 0, en aangezien je dmv. "skip=0" (kun je ook weglaten als het 0 is) de absolute sector 0 leest, heb je dus het MBR.
Dat is duidelijk niet de gevraagde partitie. Terecht gebruik je het geval 0 in je vermenigvuldiging. Als het gaat om cylinder 0, is er echter wat bijzonders aan de hand - wat ik niet in mijn eerdere omschrijving heb genoemd }:O - namelijk: Omdat het MBR daar zit, zit de bootsector niet op head 0, maar begint het bij head 1. Daar kom je door het aantal sectoren (per kop) op te tellen. In vrijwel alle gevallen bij moderne harddisks is dat het getal 63.

Dit geldt ook in het voorbeeld dat ik bijna vier jaar geleden heb gegeven:
code:
1
2
Disk /dev/hda: 255 heads, 63 sectors, 1027 cylinders
Units = cylinders of 16065 * 512 bytes


Voor de duidelijkheid: Die cylinder - head - sector configuratie is virtueel, een projectie, de aantallen zul je niet letterlijk terug zien in je fysieke hardware.

Maar braaf via /dev/hda1, of /dev/hda2, of /dev/hda3, etc... lezen is gemakkelijker ;)

Mijn methode is alleen zinvol als het gaat om images van complete hardeschijven in een bestand, of in het geval dat het MBR is verziekt terwijl de partities zelf er nog wel zijn en je de oorspronkelijke getallen uit je MBR nog wel weet. De bijzondere gevallen zeg maar.

[ Voor 9% gewijzigd door SvMp op 10-08-2005 20:00 ]

Pagina: 1