From: Michael Prokop Date: Mon, 23 Feb 2009 22:24:45 +0000 (+0100) Subject: Add mbr docs X-Git-Tag: v0.9.2~31 X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=commitdiff_plain;h=01db40988b6161a133af7cb5db33fcd62097a1ab;hp=8e1e332e6e2057852da6b3565d2af1f35d1f84c9 Add mbr docs --- diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..19bccb7 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,32 @@ +all: doc + +doc: doc_man doc_html + +doc_html: html-stamp + +html-stamp: mbr.8.txt + asciidoc -b xhtml11 -a icons mbr.8.txt + touch html-stamp + +doc_man: man-stamp + +man-stamp: mbr.8.txt + asciidoc -d manpage -b docbook mbr.8.txt + sed -i 's///' mbr.8.xml + xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl mbr.8.xml + # ugly hack to avoid duplicate empty lines in manpage + # notice: docbook-xsl 1.71.0.dfsg.1-1 is broken! make sure you use 1.68.1.dfsg.1-0.2! + cp mbr.8 mbr.8.tmp + uniq mbr.8.tmp > mbr.8 + # ugly hack to avoid '.sp' at the end of a sentence or paragraph: + sed -i 's/\.sp//' mbr.8 + rm mbr.8.tmp + touch man-stamp + +#online: all +# scp mbr.8.html grml:/var/www/grml/mbr/index.html +# scp images/icons/* grml:/var/www/grml/mbr/images/icons/ +# scp images/screenshot.png grml:/var/www/grml/mbr/images/ + +clean: + rm -rf mbr.8.html mbr.8.xml mbr.8 html-stamp man-stamp diff --git a/doc/mbr.8.txt b/doc/mbr.8.txt new file mode 100644 index 0000000..63c9fba --- /dev/null +++ b/doc/mbr.8.txt @@ -0,0 +1,179 @@ +Master Boot Record, Booting from USB etc.(8) +============================================ + +Name +---- +mbr - Master Boot Record, Booting from USB etc. + +Synopsis +-------- + +None. :) + +[IMPORTANT] +This document is work in progress. + +[NOTE] +We are using /dev/sdz as the typical device name. Adjust it to whatever +your device corresponds to of course, it's just to prevent any data loss due to +wrong copy/paste. + +Layout +------ + +The Master Boot Record (MBR) is the first data block with 512 bytes on the x86 +architecture providing a partition table and a bootloader. In the first 446 +bytes is the bootcode, providing the bootloader (400 bytes), a disk signature (4 +bytes) and NULL (2 bytes). The following 64 bytes are the partition table, +followed by 2 bytes which are the MBR signature. + +Bootcode +~~~~~~~~ + +The bootcode consists of bootloader and disk signature: + +Bootloader +^^^^^^^^^^ + +Windows: ntldr with boot.ini (Windows NT/XP) or bootmgr with \Boot\BCD (Windows Vista) + +Disk Signature +^^^^^^^^^^^^^^ + +Operating systems like Windows identify the disk using the disk signature. +Running 'fixmbr' doesn't touch the disk signature but just the bootloader. +Running 'fdisk /mbr' touches the bootloader *and* the disk signature (it writes +a standard MBR, it won't touch the partition table though). +TODO: what about fixboot? + +Partition table +~~~~~~~~~~~~~~~ + +Harddisk addressable: 8GB (Cylinder Head Sector, CHS), 2TB (Logical Block +Addressing with 32bit, LBA) or >2TB (GUID Partition Table, GPT) + +MBR Signature +~~~~~~~~~~~~~ + +The 2 bytes 55 and AA (both hex), known as the Magic Number. This signature +tells the system that there should exist a valid MBR - otherwise you'll get +something like "No operating system" or "Non-Bootable Disk". + +Backup and Restore +------------------ + +Clone whole MBR: + + # dd if=/dev/sdz of=mbr_backup.dd bs=512 count=1 + +Restore the MBR again: + + # dd if=mbr_backup.dd of=/dev/sdz bs=512 count=1 + +Clone MBR *without* partition table: + + # dd if=/dev/sdz of=mbr_bootcode.dd bs=446 count=1 + +Restore MBR *without* partition table again: + + # dd if=mbr_bootcode.dd of=/dev/sdz bs=446 count=1 + +Backup partition layout: + + # sfdisk -d /dev/sdz > backup.sfdisk + +Restore partition layout again: + + # sfdisk /dev/sdz < backup.sfdisk + +Write new, clean MBR: + + lilo -M /dev/sdz -s /dev/null + +Troubleshooting and Pitfalls when booting +----------------------------------------- + +/////////////////////////////////////////////////////////// +TODO: better list type for the error message / reason part? +See http://www.methods.co.nz/asciidoc/userguide.html +/////////////////////////////////////////////////////////// + +[horizontal] +*Error message*:: ran out of input data. System halted + +*Reason*:: Everything OK, except for the filesystem used on your usb device. So +instead of fat16 you use for example fat32. Fix: use the appropriate filesystem +(fat16 for usb pens usually). The Bootsplash might be displayed, the kernel +loads but you very soon get the error message. + +*Error message*:: Invalid operating system + +*Reason*:: the partition layout is not ok. Very probably there’s no primary + partition or none has the flag ‘bootable’ set. + +*Error message*:: No operating system found. + +*Reason*:: you forgot to set the boot-flag on the partition. Or there really isn't +any operating system at all. + +*Error message*:: kernel-panic: unable to mount root-fs... + +*Reason*:: Kernel boots but fails to find the root filesystem. root= argument in +your kernel commandline is pointing to the wrong device. Adjust root=..., +consider using root=UUID=.... + +*Error message*:: Could not find kernel image: ... + +*Reason*:: either a broken isolinux/syslinux version or a broken BIOS. Check out +whether the vendor provides a BIOS update or if using bootloader grub instead of +isolinux/syslinux fixes the problem. + +USB modes +--------- + + * USB-HDD: usually the default and prefered booting mode. + * USB-ZIP: ??? - can be set up via: + + # mkdiskimage -4 /dev/sdz 1 64 32 # device = 1GB + # mkdiskimage -4 /dev/sdz 0 128 32 # device >1GB and <=2GB + # mkdiskimage -F -4 /dev/sdz 0 255 63 # device >2GB and <=8GB + + For devices above 8GB (taken from + http://www.knoppix.net/wiki/Bootable_USB_Key): + + # mkdiskimage -F -4 /dev/sdz 1 255 63 + # dd if=/dev/zero of=/dev/sdz bs=1 seek=446 count=64 + # echo -e ',0\n,0\n,0\n,,C,*' | sfdisk /dev/sdz + + USB-ZIP requires to have 64 heads and 32 sectors and less than 1024 + cylinder count. + + * USB-Floppy: ??? + +TODO +---- + +Check out the *real* difference between: + + # mbr-install /dev/ice + # lilo -S /dev/null -M /dev/ice ext && lilo -S /dev/null -A /dev/ice 1 + # cat /usr/lib/syslinux/mbr.bin > /dev/ice + # syslinux /dev/iceX + # syslinux -sf /dev/iceX + # mkdiskimage ... (USB-ZIP?) + # ...? + +Partition stuff: + + * How does a correct partition look like? + * The partition should start behind MBR at 1st cylinder and 63rd sector? + * fdisk -l -u /dev/sdz vs. fdisk -l /dev/sdz + +Resources +--------- + +* http://de.wikipedia.org/wiki/Master_Boot_Record +* http://en.wikipedia.org/wiki/Master_boot_record +* http://michael-prokop.at/blog/2007/04/22/booting-from-usb-pen-troubleshooting-and-pitfalls/ +* http://www.ata-atapi.com/hiwmbr.html +* http://thestarman.pcministry.com/asm/mbr/index.html