之前一直用grubinst_gui.exe 来制作安装系统的u盘,它xx于在windows(nt/2k/xp)下, 每次都要启动虚拟机,而且还要将镜像通过虚拟机复制到u盘上。对于使用ubuntu的我,这可真是够麻烦了,很低效。我一直在找方法在linux下实现,曾经尝试过(1)直接在ubuntu下安装grub到u盘,但是ubuntu现在用的是grub2,写grub的menu.lst很复杂,而且安装过程在u盘产生很多无用的内容,于是放弃。(2)在虚拟机的rhel下安装grub,menu.lst简单了,不过也产生无用内容,而且这还不如在虚拟机xp下弄方便。。。放弃。(3)在ubuntu下重新编译grubinst,但是编译过程出错。 后来,细细读了下grubinst的文档,发现原来可以用bootlace.com代替,而且bootlace.com是xx用c写的,可以直接在linux下执行!!!!!!!于是,此方法就诞生了,经过测试,正常!如下(以下测试均在ubuntu10.04下完成): 一、格式化u盘(假设u盘识别为/dev/sdb,这个以你的计算机上实际情况为准): null@null:~$ sudo fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sdb: 4013 MB, 4013948928 bytes 124 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 7688 * 512 = 3936256 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xcad4ebea Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1019, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-1019, default 1019): Using default value 1019 Command (m for help): p Disk /dev/sdb: 4013 MB, 4013948928 bytes 124 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 7688 * 512 = 3936256 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xcad4ebea Device Boot Start End Blocks Id System /dev/sdb1 1 1019 3917005 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. null@null:~$ sudo mkfs.vfat /dev/sdb1 mkfs.vfat 3.0.7 (24 Dec 2009) 二、用bootlace.com安装grub到u盘mbr: null@null:~$ sudo ./bootlace.com --no-backup-mbr --mbr-disable-osbr /dev/sdb Disk geometry calculated according to the partition table: Sectors per track = 62, Number of heads = 124 Success. 三、复制grldr、menu.lst到u盘根目录。 null@null:~$ mkdir /tmp/udisk null@null:~$ mount /dev/sdb1 /tmp/udisk/ null@null:~$ sudo cp ./grub_test/grldr /tmp/udisk/ null@null:~$ sudo cp ./grub_test/menu.lst /tmp/udisk/ 至此,u盘已经可以从grub引导启动了。下面尝试从u盘安装linux系统(以rhel5.3为例子)。 ########################################################## 四、将rhel5.3的iso镜像中的images下的boot.iso提取复制到u盘根目录。将rhel5.3的dvd镜像复制到u盘根目录。 五、编辑menu.lst文件,添加以下内容并保存。 title RedHat Linux AS5up3 Install find --set-root /boot.iso map --mem /boot.iso (hd32) map --hook chainloader (hd32) 至此,可以将u盘插到到机器上启动,并在出现grub界面时选择“RedHat Linux AS5up3 Install“,然后就会出现linux安装光盘启动画面,此时输入linux method然后回车,出现选择安装方式的时候选择hardisk,然后选择u盘的盘符即可开始安装。 附: bootlace.com is a DOS/Linux utility for installing grldr.mbr to MBR. The whole grldr.mbr is embedded in the body of the bootlace.com utility, so bootlace.com can be used independently. See below. ****************************************************************************** *** bootlace.com - Install GRLDR.MBR bootstrap code to MBR *** ****************************************************************************** BOOTLACE.COM installs GRLDR.MBR boot record to the MBR of a harddrive or of a harddrive image file, or to the boot sector of a floppy or a floppy image. Usage: bootlace.com [OPTIONS] DEVICE_OR_FILE OPTIONS: --read-only do everything except the actual write to the specified DEVICE_OR_FILE. --restore-mbr restore the previous mbr. --mbr-no-bpb do not copy BPB in the boot sector of the leading FAT partition to MBR. --no-backup-mbr do not copy the old MBR to the second sector of DEVICE_OR_FILE. --force-backup-mbr force the copy of old MBR to the second sector of DEVICE_OR_FILE. --mbr-enable-floppy enable the search for GRLDR on floppy. --mbr-disable-floppy disable the search for GRLDR on floppy. --mbr-enable-osbr enable the boot of PREVIOUS MBR with invalid partition table(usually an OS boot sector). --mbr-disable-osbr disable the boot of PREVIOUS MBR with invalid partition table(usually an OS boot sector). --duce disable the feature of unconditional entrance to the command-line. Normally one can unconditionally get the command-line console by a keypress of `C', bypassing all config-files(including the preset-menu). This is a security hole. So we need this option to disable the feature. DUCE is for Disable Unconditional Command-line Entrance. --chs-no-tune disable the feature of geometry tune. --boot-prevmbr-first try to boot PREVIOUS MBR before the search for GRLDR. --boot-prevmbr-last try to boot PREVIOUS MBR after the search for GRLDR. --preferred-drive=D preferred boot drive number, 0 <= D < 255. --preferred-partition=P preferred partition number, 0 <= P < 255. --serial-number=SN setup a new serial number for the hard drive. SN must be non-zero. --time-out=T wait T seconds before booting PREVIOUS MBR. if T is 0xff, wait forever. The default is 5. --hot-key=K if the desired key K is pressed, start GRUB before booting PREVIOUS MBR. K is a word value, just as the value in AX register returned from int16/AH=1. The high byte is the scan code and the low byte is ASCII code. The default is 0x3920 for space bar. See "int 16 keyboard scan codes" below. --floppy if DEVICE_OR_FILE is floppy, use this option. --floppy=N if DEVICE_OR_FILE is a partition on a hard drive, use this option. N is used to specify the partition number: 0,1,2 and 3 for the primary partitions, and 4,5,6,... for the logical partitions. --sectors-per-track=S specifies sectors per track for --floppy. 1 <= S <= 63, default is 63. --heads=H specifies number of heads for --floppy. 1 <= H <= 256, default is 255. --start-sector=B specifies hidden sectors for --floppy=N. --total-sectors=C specifies total sectors for --floppy. default is 0. --lba use lba mode for --floppy. If the floppy BIOS has LBA support, you can specify --lba here. It is assumed that all floppy BIOSes have CHS support. So you would rather specify --chs. If neither --chs nor --lba is specified, then the LBA indicator(i.e., the third byte of the boot sector) will not be touched. --chs use chs mode for --floppy. You should specify --chs if the floppy BIOS does not support LBA. We assume all floppy BIOSes have CHS support. So it is likely you want to specify --chs. If neither --chs nor --lba is specified, then the LBA indicator(i.e., the third byte of the boot sector) will not be touched. --fat12 FAT12 is allowed to be installed for --floppy. --fat16 FAT16 is allowed to be installed for --floppy. --fat32 FAT32 is allowed to be installed for --floppy. --vfat FAT12/16/32 are allowed to be installed for --floppy. --ntfs NTFS is allowed to be installed for --floppy. --ext2 EXT2 is allowed to be installed for --floppy. --install-partition=I Install the boot record onto the boot area of partition number I of the specified hard drive or harddrive image DEVICE_OR_FILE. DEVICE_OR_FILE: Filename of the device or the image file. For DOS, a BIOS drive number(hex 0xHH or decimal DDD) can be used to access the drive. BIOS drive number 0 is for the first floppy, 1 is for the second floppy; 0x80 is for the first hard drive, 0x81 is for the second hard drive, etc. Note: BOOTLACE.COM writes only the boot code to MBR. The boot code needs to load GRLDR as the second(and last) stage of the GRUB boot process. Therefore GRLDR should be copied to the root directory of one of the supported partitions, either before or after a successful execution of BOOTLACE.COM. Currently only partitions with filesystem type of FAT12, FAT16, FAT32, NTFS, EXT2 or EXT3 are supported. Note 2: If DEVICE_OR_FILE is a harddisk device or a harddisk image file, it must contain a valid partition table, otherwise, BOOTLACE.COM will fail. If DEVICE_OR_FILE is a floppy device or a floppy image file, then it must contain a supported filesystem(i.e., either of FAT12/FAT16/FAT32/NTFS/EXT2/EXT3). Note 3: If DEVICE_OR_FILE is a floppy device or a floppy image file, and it was formated EXT2/EXT3, then you should specify --sectors-per-track and --heads explicitly. Important!! If you install GRLDR Boot Record to a floppy or a partition, the floppy or partition will boot solely grldr, and your original IO.SYS(DOS/Win9x/Me) and NTLDR(WinNT/2K/XP) will become unbootable. This is because the original boot record of the floppy or partition was overwritten. There is no such problem when installing GRLDR Boot Record onto the MBR. Update: Some NTLDR/IO.SYS/KERNEL.SYS files can be directly chainloaded in the latest GRUB4DOS. Tip: If the filename begins in a dash(-) or a digit, you may prefix a dirname (./) or (.\) to it. Examples: Installing GRLDR boot code to MBR under Linux: bootlace.com /dev/hda Installing GRLDR boot code to MBR under DOS: bootlace.com 0x80 Installing GRLDR boot code to a harddisk image under DOS or Linux: bootlace.com hd.img Installing GRLDR boot code to floppy under Linux: bootlace.com --floppy --chs /dev/fd0 Installing GRLDR boot code to floppy under DOS: bootlace.com --floppy --chs 0x00 Installing GRLDR boot code to a floppy image under DOS or Linux: bootlace.com --floppy --chs floppy.img BOOTLACE.COM cannot function well under Windows NT/2000/XP/2003. It is expected (and designed) to run under DOS/Win9x and Linux. Update: For image FILES, bootlace.com function well under Windows NT/2000/XP/2003. For devices, bootlace.com will not work under Windows NT/2000/XP/2003 because bootlace.com is a DOS utility and Windows NT/2000/XP/2003 does not allow bootlace.com to access devices. |