制作disk

@see http://wiki.osdev.org/GRUB_2
@see http://my-zhang.github.io/blog/2014/06/28/make-bootable-linux-disk-image-with-grub2/

1. grub.cfg

menuentry "bzImage" {
    linux /bzImage
    initrd /initrd.img.gz
    boot
}

2. device.map

(hd0) /dev/loop0
(hd0,1) /dev/loop1

3. disk

bximage -mode=create -hd=500M -q my-linux.img
# The following line should appear in your bochsrc:
#  ata0-master: type=disk, path="my-linux.img", mode=flat
sudo losetup /dev/loop0 my-linux.img
sudo gparted /dev/loop0
# create an MS-DOS partition table
# create primary partition ext2
sudo fdisk -l /dev/loop0
#       Device Boot      Start         End      Blocks   Id  System
# /dev/loop0p1            2048     1021951      509952   83  Linux
# 注意 Start = 2048 = 512 * 2048 = 1M
sudo losetup -o $((512*2048)) /dev/loop1 my-linux.img
sudo mount /dev/loop1 /mnt
sudo mkdir -p /mnt/boot/grub/
sudo cp device.map /mnt/boot/grub/
sudo grub-install --root-directory=/mnt --grub-mkdevicemap=/mnt/boot/grub/device.map --no-floppy /dev/loop0
sudo cp grub.cfg /mnt/boot/grub/
sudo cp bzImage /mnt/
sudo cp initrd.img.gz /mnt/
sync
sudo umount /mnt/
sudo losetup -d /dev/loop0 /dev/loop1