Commit Graph

62 Commits

Author SHA1 Message Date
dsl
d448a28e66 Fix mbr bootcode handling to ensure that the bootselect table is always
written into the correct place - even if the user decides not to update
the mbr code and has the old (pre layout change) code installed.
Tell the user that the mbr code needs updating if the new install uses
'all the disk' and teh old version had the bootselect code (otherwise you
get an empty menu).
Probably fixes PR install/25146
2004-04-25 21:55:18 +00:00
dsl
52f6f4a9de Collect the bootsel info from 'old' - since luke moved the bootsel date
to allow for a M$ disk number.
2004-03-27 20:47:33 +00:00
dsl
3a7dc7f8e9 Generate correct internal data when reading an extended mbr partition
that has holes.
This needs the 'bios sectors per track' before it has been setup - so we
default it to the 'hardware' value.  Since both numbers are 63, and this only
affects the size of the headers on extended partitions it should be safe.
2004-03-26 17:38:44 +00:00
lukem
455da8e60b Move mbr_bootsel from offset 404 to offset 400 in struct mbr_sector to
leave 4 bytes for the Windows NT Drive Serial Number (DSN) at 440-443
(as mbr_sector.mbr_dsn).

Ensure that all the MBR & PBR code reserves space for mbr_sector.mbr_dsn.

Leave the bootsel magic number at 444-445 as mbr_sector.mbr_bootsel_magic
(instead of mbr_sector.mbr_bootsel.mbrbs_magic), but use 0xb5e1 (MBR_BS_MAGIC)
instead of 0xaa55 (MBR_MAGIC) to indicate that this change has occurred.

Rework MBR_BS_NEWMBR to mean "mbr_bootsel has moved to 400".

Modify fdisk(8) to automatically relocate the mbr_bootsel from 404 to 400
if mbr_bootsel_magic is the old value (0xaa55), and unset MBR_BS_NEWMBR
to flag that new mbr_bootsel code must be used if updating the MBR.


These changes fixes a problem where Windows 2000 or Windows XP would corrupt
the last 3 bytes + NUL of MBR partition 3's bootsel name if the bootsel name
was 5 characters long, replacing bytes 6-9 with the DSN.
Also, by explicitly reserving the space for the DSN we prevent problems in the
future if non bootsel MBR or PBR code had other information at bytes 440-443.
2004-03-22 07:11:00 +00:00
dsl
056e02d208 Copy over the correct entry when writing out an extended partition list
that has holes in it.
2004-01-18 16:27:25 +00:00
dsl
ddabfc4cf4 Fix sector numbers written in extended partition chin.
Don't write out dummy extended partitions for unused ares in the extended
partition.
Add some more comments - I write this and I couldn't remember how it worked.
2004-01-18 12:23:36 +00:00
dsl
2726af786f When rounding a partition to end on a cylinder boundary, round the start
down to a cylinder boundary before adding in the requested size.
Stops the partition being one cylinder larger than requested when the
partition doesn't start at the beginning of a cylinder (eg for partitions
starting in sector 63).
Fixes part of PR install/23548
2003-11-27 21:43:22 +00:00
dsl
7ef7a3f227 Checkpoint a load of changes - seems to work ok still.
- rework run_prog() so that the program name (etc) is usually displayed if
  the program generates any output, or terminates with an error.
  Allow arguments to included in single quotes.
  Try to collect console output so it doesn't interfere with curses.
- Add a '*' to the cylinder count if non-integral number of cylinders
  (on disklabel editor)
- Only show partition type for unused partitions.
- Show size including unused space on '+' partition, remove a..z since
  the don't relate to partition IDs (netbsd partition sizes)
- Fix deleting of 'user' partitions - killed size of next ptn.
- Don't default a swap partition is the disk already has one.
- Fix deleting of extended MBR partitions - changed size of ptn 2.
- Show error message if user tries something illegal in mbr editor.
- Default to old diskname (actually disk type - dunno why!)
- Use MI enable_rc_conf() to set RC_CONFIGURED=YES, use a single sed
  command instead of a raft of code playing with files etc.
- Float some menus to just below header text, saves counting and lets
  language variants have different height headers (use y=-1)
- Track whether anything is mounted on /mnt2 better.
- Put more texts into message file.
- Change english prose texts to be more correct.
- Stop french and polish versions core dumping if ptn start/size changed.
- Fix processing logic for saving /etc (action is still borked)
- Do tail-end setup if any sets (eg X) can't be found (but not if you give
  in (yet)).
2003-10-19 20:17:31 +00:00
lukem
1c33b4e6a4 Overhaul MBR handling (part 1):
<sys/bootblock.h>:
    *	Added definitions for the Master Boot Record (MBR) used by
	a variety of systems (primarily i386), including the format
	of the BIOS Parameter Block (BPB).
	This information was cribbed from a variety of sources
	including <sys/disklabel_mbr.h> which this is a superset of.

	As part of this, some data structure elements and #defines
	were renamed to be more "namespace friendly" and consistent
	with other bootblocks and MBR documentation.
	Update all uses of the old names to the new names.

<sys/disklabel_mbr.h>:
    *	Deprecated in favor of <sys/bootblock.h> (the latter is more
	"host tool" friendly).

amd64 & i386:
    *	Renamed /usr/mdec/bootxx_dosfs to /usr/mdec/bootxx_msdos, to
	be consistent with the naming convention of the msdosfs tools.

    *	Removed /usr/mdec/bootxx_ufs, as it's equivalent to bootxx_ffsv1
	and it's confusing to have two functionally equivalent bootblocks,
	especially given that "ufs" has multiple meanings (it could be
	a synonym for "ffs", or the group of ffs/lfs/ext2fs file systems).

    *	Rework pbr.S (the first sector of bootxx_*):
	    +	Ensure that BPB (bytes 11..89) and the partition table
		(bytes 446..509) do not contain code.
	    +	Add support for booting from FAT partitions if BOOT_FROM_FAT
		is defined.  (Only set for bootxx_msdos).
	    +	Remove "dummy" partition 3; if people want to installboot(8)
		these to the start of the disk they can use fdisk(8) to
		create a real MBR partition table...
	    +	Compile with TERSE_ERROR so it fits because of the above.
		Whilst this is less user friendly, I feel it's important
		to have a valid partition table and BPB in the MBR/PBR.

    *	Renamed /usr/mdec/biosboot to /usr/mdec/boot, to be consistent
	with other platforms.

    *	Enable SUPPORT_DOSFS in /usr/mdec/boot (stage2), so that
    	we can boot off FAT partitions.

    *	Crank version of /usr/mdec/boot to 3.1, and fix some of the other
	entries in the version file.

installboot(8) (i386):
    *	Read the existing MBR of the filesystem and retain the BIOS
    	Parameter Block (BPB) in bytes 11..89 and the MBR partition
	table in bytes 446..509.  (Previously installboot(8) would
	trash those two sections of the MBR.)

mbrlabel(8):
    *	Use sys/lib/libkern/xlat_mbr_fstype.c instead of homegrown code
	to map the MBR partition type to the NetBSD disklabel type.


Test built "make release" for i386, and new bootblocks verified to work
(even off FAT!).
2003-10-08 04:25:43 +00:00
dsl
3322ced37b Make partition menu sit just below header (regardless of header size).
Change flag for bootmenu default from 'b' to 'd'.
2003-09-27 10:39:35 +00:00
takemura
8260617c99 Fixed alignment of call by reference arguments. This change solves unalignement
access and segmentation fault problem on MIPS architecture.
2003-09-21 02:30:18 +00:00
dsl
b2fa78b58e Let noexec, nodev and nosuid be written to /ets fstab entries
Always use 1023 cylinders in mbr for large disks
2003-08-10 14:51:48 +00:00
dsl
96ace5d58c Remove 'menu_ent' parameter from action routines.
Add menu for all disklabel partition types.
Default 'partition type' and 'sizechoice' menus to current value.
Change 'standard/use existing' to 'set sizes/use existing'.
2003-07-27 07:45:08 +00:00
dsl
7f5beafa6b Sprinkle a load of consts, and change a few variable names.
Now compiles with WARNS=3.
2003-07-25 08:26:21 +00:00
dsl
a2d5357066 Fix code that guesses bios geometry from mbr info.
When asking for bios geometry, ask for sectors per track and heads
then calculate cylinders from volume size.
Write MBR_MAGIC into correct place when writing extened partitions.
2003-07-14 09:59:00 +00:00
dsl
e64fcd4452 Use a menu when asking for the install disk (fixes PR install/20121).
Make disk_desc[], disk and numdisks local to get_disks (instead of globals).
Fix a little fallout from the above.
A bit of mbr.c was missing #ifdef BOOTSEL...
2003-07-11 15:28:58 +00:00
dsl
6da321c1aa Sort out (and remember) the disk partition we will install into.
This should stop the i386 code splatting all over the start of the disk
during upgrade.
Upgrade will still use partition 'a' (unless you loop through the install
far enough first!)
2003-07-08 17:38:54 +00:00
dsl
294dd49644 Stop timezone submenu exploding (strcmp of MSG_xxxx).
Allow mbr partition type to be changed without losing disklabel info
for same area of disk (allows type to be changed from 165 to 169).
2003-07-08 11:58:57 +00:00
dsl
4314639609 Remove some messages that are not used and are unliklely to be needed. 2003-07-07 21:26:32 +00:00
dsl
33ae7b798b Fix non-i386 builds 2003-07-07 12:55:48 +00:00
dsl
0e919832bd Another pass of the rototiller. Mainly:
1) New MBR editor
2) Hierarchic timezone menu
2003-07-07 12:30:19 +00:00
dsl
17ae477780 Implement a limit on the size of / so that its guaranteed readable by the boot code.
Remove pointless 'len' parameter from read_mbr and write_mbr.
Make read_mbr initialise mbr if it can't be read (delete MD code).
Make i386 always ask at least once about the bootcode.
Move LIB_MOVE and LIB_COUNT from md.h to aout2elf.c
2003-06-14 12:58:45 +00:00
dsl
deef134ca4 Fix code that determines BIOS CHS from MBR - used to get confused by big disks.
Make same function return useful defaults if it can't find an answer.
Make all ports default to the useful defaults if bios geometry is unknown.
Move some messages to mbr set from mi set.
Fix i386 code that selects which bios disk, simplify interface to menus.
Remove now unnecessary global data from many ports.
2003-06-13 22:27:03 +00:00
dsl
bc119f42a4 Remove all references to minfsdmb and STDNEEDMB - neither are used any more. 2003-06-13 11:57:28 +00:00
dsl
52e8cddd9b KNF 2003-06-12 16:48:43 +00:00
dsl
19b2fb2fb0 Add NULL to all process_menu() calls - value is passed through to the
action routine.
Make the french and polish versions compile.
NB needs a new version of menuc - so need 'build.sh tools'
2003-06-03 11:54:48 +00:00
dsl
b62cbc21e9 Make all architectures (except amiga and mac68k) use the MI make_bsd_partitions.
This does change the default size of /, but I'm going to rewrite
make_bsd_partitions next to make it less user-hostile.
(I'm not sure adding in 2 * ram is actually useful! Especially size it left
/usr with a -ve size on all my test installs with 256MB ram and 1GB disk)
Make bootsel code delete menu names if the partition is unused.
Use raw device for cdrom access (I've a kernel that doesn't report an invalid
label so /dev/cd0a dosn't work).
2003-05-30 22:17:00 +00:00
dsl
6fb33c4537 Reduce the number of global variables slightly, use the ones that are
left consistently.
Make the i386 install let you partition a disk beyond the CHS limit if the
system bios doesn't support LBA reads (the checks aren't ideal yet).
Make the bsddislabel.c code usable onan i386 system - but don't use it yet.
2003-05-21 10:05:20 +00:00
dsl
d41b09d182 Report number for unknown MBR partition types.
Correct bootseect default for new mbr code.
Add bootsel config code (from arch/i386/md.c)
2003-05-16 19:44:23 +00:00
dsl
3c476fffb6 Pull some code fragments from machine and language dependant files into mbr.c
Resynchronise amd64 with i386
2003-05-07 19:02:52 +00:00
dsl
d5c9f83022 Use C structure mbr_sector_t instead of char[] for 'mbr'.
(I hope the edits for the ports I can't build are right!)
i386/amd64 pick up a minor change to the md_read_bootcode which
might preseve the bootselect config.
2003-05-07 10:20:18 +00:00
shin
d1f3739431 fix typo. 2003-02-08 09:53:08 +00:00
christos
2d7e213ded pass lint[pass1] 2003-01-10 20:00:27 +00:00
fvdl
171b46b525 FILE *log -> FILE *logfp, to avoid warnings about gcc-current's
builtin log() function.
2002-12-05 01:17:15 +00:00
mrg
d4c1463d23 if the type of either partition is 0 ("unused"), then these partitions
do not overlap.  from Tyler Retzlaff <rtr@wasabisystems.com> and fixes
PR#12386.
2002-08-13 03:58:56 +00:00
grant
2df65a0a6e make mbr and disklabel editor consistently use Start, End, Size in
that order.

"offset" -> "start" where applicable.
2002-08-12 02:22:52 +00:00
mrg
81cda3082a fix PR#11945 Tyler Retzlaff <rtr@wasabisystems.com>:
>The reason this occurs is because of left over scum in unused partition
>table slots for host system parts.  This should clean it up.
2002-08-02 05:38:18 +00:00
mrg
8da46e6897 de-__P()-ify 2000-12-22 10:12:12 +00:00
hubertf
3df3bcf30b Fix typo in calculation of partition's end (s/mbrp_size/mbrp_start/).
Fix reported in PR 7556 by Arne Juul <arnej@math.ntnu.no>
2000-12-18 04:52:52 +00:00
fvdl
8a696e8ea8 Improve labelling a bit, by allowing some shortcuts to start partitions
where another one ends, and ending partitions where another one start,
or at the start of the disk / until the end of the disk.
2000-10-17 19:44:28 +00:00
fvdl
902ae34ae6 When converting from relsecs to chs, if the value exceeds the maxmimum
that can be specified with CHS, truncate it to the maximum values that
the BIOS provided, not 1023*255*63. Some BIOSs get awfully cranky when
you do that.
2000-05-27 18:41:36 +00:00
fvdl
97965ecea8 Convert ask_sizemult to take an argument, so that MBR using ports can
actually call it with the right sectors per cylinder size during
MBR partitioning.
2000-03-14 22:42:48 +00:00
soren
017785443d Synchronize partition types with <sys/disklabel_mbr.h>.
Closes PR install/8301 by Jonathan Cline.
1999-09-04 19:49:23 +00:00
fvdl
47d416e15d When converting the end of a partition to CHS, use start + size - 1, not
start + size.
1999-07-30 20:46:10 +00:00
fvdl
d25150d087 Don't try to convert the CHS values if not needed. Add extra flag
to write_mbr to for this.
1999-07-10 23:07:15 +00:00
cgd
5c3428778d convert tables to use the new table formatting functons. i386 tested,
mac68k and bebox bits compiled to the extent possible.  (bebox seems
broken, with duplicated menu names, but it doesn't look like that's my
fault.)
1999-07-04 08:01:39 +00:00
cgd
a640bc7014 copyright notice typo fixups, as noticed in PR#7248. This software
was developed, not develooped.
1999-06-20 06:08:13 +00:00
fvdl
337300d376 Change partition type if we're installing into an old 386bsd partition.
Check if there's no active partition after MBR editing.
Ask for own MBR to be installed if we're booting from out of CHS range.
Ask for bootselector to be installed if > 1 OS, and configure it.
1999-05-02 13:07:15 +00:00
bouyer
de3024ade3 Correct some bugs in mbr handling, which could lead to invalid partition
tables being written on disk:
- when counting non-BSD partitions, use part[i], not part[0]
- when using full disk for NetBSD, initialise all the fileds of the
  mbr entries (especially flags)
- When converting to on-disk format, if start and size = 0, initialise
  c/h/s to 0 for both start and end. convert_mbr_chs() would make an entry
  0/0/0, 0/0/1 which is not bogus, but not what we really want either.
1999-04-14 16:00:42 +00:00
bouyer
be743ed36b - Add 2 functions in label.c, getpartoff()/getpartsize() used to let the user
enter partitions offet and size. The user can chose unit independantly of
  the unit used for display ('M'/'c'/'s'). These functions do the proper
  bound checks and alignement/roudups. Used in the edfspart menu and
  i386 md_make_bsd_partitions() (other ports should do the change as
  well).
- now that getpartsize() does the rigth thing, kill the swapadj hack (which was
  buggy anyway).
- in i386 md_make_bsd_partitions(), don't propose defaults that don't fit on
  the disk. If the disk is too small, fallback to custom instead.
- fix a bug in mbr.c, where the partition flags would not have always been
  reset. sysinst created me a MBR with 2 active partition. The boot code
  doesn't like it :)
- added a message for eventual mount failures.
- killed donewfs and extracting messages, as we run  the commands in a
  subwindow these messages just flashed on the screen.
- Changes a few exit(1) to return(1), to give the user a second chance.
- added msg_clear() or wclear(stdscr) in a place or two, to make
  display a bit nicer.
- in run_cmd(), if the command succeeded, don't wait for the user to
  press enter.
1999-04-11 22:40:19 +00:00