How to make a Bochs disk image
- First, use a real machine to setup a partition to your liking. If you
need to tar up the disk, use something like:
tar czlp --same-owner -f c.img.tgz --exclude /tmp /
I exclude certain directories to save space. - Use the bximage tool that comes with Bochs to create a disk image:
bximage: hd, flat, 1500, c.img cyl=3047 heads=16 sectors per track=63 total sectors=3071376 total size=1499.70 megabytes
- Use fdisk to create a partition table on the image file:
fdisk c.img
- Setup geometry:
- x - extra functionality
- h 16
- s 63
- c 3047
- r - return to main menu
- n, p, 1, enter, enter - create new partition
- a 1 - make bootable (optional?)
- w - write the table to disk
- Setup geometry:
- Setup the loopback device -- note that you need to use an offset corresponding to the location of the first partition (explanation).
/sbin/losetup -o 32256 /dev/loop0 c.img
- Format the disk:
/sbin/mke2fs -j /dev/loop0
- Mount the disk to put files on it
mount /dev/loop0 /mnt cd /mnt tar xzvpf /home/bits7/NOBACKUP/kbarr/hpldisk/c.img.tgz
- Now you need a bootloader. The /boot/grub/menu.lst on the image
needs to be set up (presumably you did this in step 1). You'll need at
least grub 0.95 as explained in this
thread
% ./grub-0.95/grub/grub --no-floppy grub> device (hd0) c.img grub> geometry (hd0) 3047 16 63 drive 0x80: C/H/S = 3047/16/63, The number of sectors = 3071376, c.img Partition num: 0, Filesystem type is ext2fs, partition type 0x83 grub> root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 22 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+22 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst".. . succeeded Done.
Make sure grub on the image is also 0.95. Also there may be problems if you try to use the graphical bootloader, so make sure you have the text-based one selected on the image's /boot/grub/menu.lst.Offsets and loopback mounting
To determine the correct offset for mounting your disk image, do:/sbin/sfdisk debian-3.0r0.img
You'll get a chart like:Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System debian-3.0r0.img1 0+ 260 261- 131512+ 82 Linux swap debian-3.0r0.img2 261 1023 763 384552 83 Linux
Take the starting cylinder that you care about (261). sfdisk is using cylinders of 516096 bytes, so the offset is 261*516096 = 134701056. Or, use fdisk (with -u) instead:/sbin/fdisk -l -u c.img
In this caseDisk c.img: 0 heads, 0 sectors, 0 cylinders Units = sectors of 1 * 512 bytes Device Boot Start End Blocks Id System c.img1 63 1596671 798304+ 83 Linux
And we take 63 * 512 = 32256.