将U盘分为1个区,文件系统格式为vfat格式
1、查看计算机存储设备信息
[root@localhost ~]# fdisk -l ... Disk /dev/sdb: 4008 MB, 4008706048 bytes 255 heads, 63 sectors/track, 487 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb4 * 1 488 3914689 c W95 FAT32 (LBA) Partition 4 has different physical/logical endings: phys=(486, 254, 63) logical=(487, 91, 53) [root@localhost ~]# ls /dev/sd* | grep "sdb" /dev/sdb /dev/sdb4这里U盘是/dev/sdb,只有一个分区/dev/sdb4
[root@localhost ~]# fdisk /dev/sdb Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): d # delete the old partition(s) Selected partition 4 Command (m for help): n # create new partition(s) Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-487, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-487, default 487): Using default value 487 Command (m for help): w # 提交修改并退出 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
[root@localhost ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 # no /dev/sdb
[root@localhost ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 /dev/sdb /dev/sdb1
[root@localhost ~]# mkfs.vfat /dev/sdb1 mkfs.vfat 2.11 (12 Mar 2005) mkfs.vfat: /dev/sdb1 contains a mounted file system.此时分区已经被挂载,要格式化应先卸载分区
[root@localhost ~]# umount /dev/sdb1 [root@localhost ~]# mkfs.vfat /dev/sdb1 mkfs.vfat 2.11 (12 Mar 2005)
[root@localhost ~]# fdisk /dev/sdb Command (m for help): a Partition number (1-4): 1 # /dev/sdb1作为可引导分区 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# df -l 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda7 40631956 3154200 35380472 9% / tmpfs 1036808 0 1036808 0% /dev/shm /dev/sdb1 3904152 4 3904148 1% /media/disk /dev/sda5 52427180 33302524 19124656 64% /mnt [root@localhost ~]# grub-install --root-directory=/media/disk --no-floppy /dev/sdb1 The file /media/disk/boot/grub/stage1 not read correctly.
错误:The file /media/disk/boot/grub/stage1 not read correctly.
出现这个问题的原因是/dev/sdb1的格式为vfat格式,这里不支持将 grub 安装在 vfat 格式的分区中
将U盘分为2个区,第一个区为vfat格式,第二个区为ext2格式,grub安装到第二个区,将第二个区作为可引导区
[root@localhost ~]# fdisk /dev/sdb Command (m for help): d Selected partition 1 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-487, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-487, default 487): +3072M Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (375-487, default 375): Using default value 375 Last cylinder or +size or +sizeM or +sizeK (375-487, default 487): Using default value 487 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
[root@localhost ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 /dev/sdb /dev/sdb1 /dev/sdb2 [root@localhost ~]# umount /dev/sdb1 [root@localhost ~]# umount /dev/sdb2 [root@localhost ~]# mkfs.vfat /dev/sdb1 mkfs.vfat 2.11 (12 Mar 2005) [root@localhost ~]# mkfs.ext2 /dev/sdb2 mke2fs 1.39 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 113568 inodes, 226918 blocks 11345 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=234881024 7 block groups 32768 blocks per group, 32768 fragments per group 16224 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 24 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# fdisk /dev/sdb Command (m for help): a Partition number (1-4): 2 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# fdisk -l ... Disk /dev/sdb: 4008 MB, 4008706048 bytes 255 heads, 63 sectors/track, 487 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 374 3004123+ 83 Linux /dev/sdb2 * 375 487 907672+ 83 Linux # 可引导分区
[root@localhost ~]# df ... /dev/sdb2 893388 904 847104 1% /media/disk /dev/sdb1 2998248 4 2998244 1% /media/disk-1 [root@localhost ~]# grub-install --root-directory=/media/disk --no-floppy /dev/sdb2 Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /media/disk/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (hd0) /dev/sda (hd1) /dev/sdb
[root@localhost ~]# grub GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd1, Possible partitions are: Partition num: 0, Filesystem type unknown, partition type 0x83 Partition num: 1, Filesystem type is ext2fs, partition type 0x83 grub> root (hd1,1) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd1) 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 (hd1)"... 15 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,1)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded Done. grub> quit
注意:上述方案并不一定能启动硬盘中的 Linux, 笔者测试的一个U盘就不行
未知品牌 U 盘(4G) | ||
分区1 | 分区2 | 能否启动硬盘中的 Linux |
vfat(3G) | ext2(grub) | 不能 |
ext2(grub, 512M) | vfat | 能 |
Kingston(4G) | ||
分区1 | 分区2 | 能否启动硬盘中的 Linux |
ext2(grub, 512M) | vfat | 能 |
ext2 | 无 | 能 |
Booting from USB, http://wiki.linuxquestions.org/wiki/Booting_from_USB
安装GRUB到U盘,http://bbs.chinaunix.net/thread-2295595-1-1.html