00c2580a1343a3dbe354c564e59052c53b8ae4dd
[akaros.git] / Documentation / howtos / make-bootable-grub-hdd.txt
1 # Note: this is pretty old (originally from 2009).  You'll need something
2 # bigger than 8MB these days.
3
4 ###############################################
5 #
6 # How to install grub on an image file
7 #
8 ###############################################
9 # make a 8MB image.  picked these values so there is 1 cyl (minimum, it seems)
10 dd if=/dev/zero of=mnt/hdd.img bs=512 count=16065
11 losetup /dev/loop1 mnt/hdd.img 
12 fdisk /dev/loop1
13 # determine the offset, in sectors
14 fdisk -ul /dev/loop1
15 # mult the sector offset by 512, since losetup offsets by bytes
16 # this will have us point loop2 to the partition on the disk
17 losetup -o 32256 /dev/loop2 /dev/loop1
18 mkfs /dev/loop2
19 mount /dev/loop2 mnt/hdd/
20 # copy over grub info
21 mkdir -p mnt/hdd/boot/grub
22 cp -r /boot/grub/stage1 /boot/grub/stage2 /boot/grub/menu.lst mnt/hdd/boot/grub
23 cp -r the_kernel mnt/hdd/
24 # edit accordingly
25 vi mnt/hdd/boot/grub/menu.lst 
26 grub --device-map=/dev/null 
27         # in here:
28         # important to not use the /dev/loop1, since there is a bug in grub
29         # use the image instead, since it bypasses whatever checks fail later
30         device (hd0) mnt/hdd.img
31         root (hd0,0)
32         setup (hd0) # make sure you don't do (hd0,0).  it'll still work, but not the way you want
33 kvm mnt/hdd.img
34 # or
35 bochs -q 'ata0-master: type=disk, mode=flat, path="./mnt/hdd.img", cylinders=1, heads=255, spt=63'
36 # to use a floppy image (made similarly)
37 bochs -q 'floppya: 1_44=mnt/floppy.img, status=inserted' 'boot:a'
38
39 # to easily edit, keep the hdd image mounted and just copy in your kernel or
40 # whatever
41 # list the loops, delete them with -d to keep things nice and clean
42 losetup -a 
43 losetup -o 32256 /dev/loop0 mnt/hdd.img 
44 mount /dev/loop0 mnt/hdd
45 chown -R brho:brho mnt/hdd
46
47 # you'll need to make sure changes to the mnt/hdd take effect immediately
48 # if you want to run a VM right away with the .img
49 sync
50
51 # notes:
52 # http://www.linuxjournal.com/article/4622
53 # http://sig9.com/bochs-grub
54 # http://web2.clarkson.edu/projects/itl/honeypot/ddtutorial.txt
55 # http://www.mail-archive.com/bug-grub@gnu.org/msg09648.html
56 #
57
58 modprobe loop max_part=10
59
60 Or if your loop device is compiled into the kernel, add the kernel parameter "loop.max_part=10"
61
62 Once you partition loop1, you will see the following devices:
63
64 /dev/loop1
65 /dev/loop1p1
66 /dev/loop1p2
67 ..etc
68
69 Also, when creating an empty file you can do it much more quickly, and with almost nil disk space like this:
70
71 dd if=/dev/zero of=myimage bs=512 count=1 seek=16064