失败案例
将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
2、给U盘分区
[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.
3、格式化分区
The kernel still uses the old table.
The new table will be used at the next reboot.
所以现卸载U盘:在桌面右键点击“删除文件卷”
[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
插上U盘
[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)
4、激活可引导分区(否则不能引导)
[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安装到第二个区,将第二个区作为可引导区
1、分区
[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.
2、格式化分区
卸载U盘:在桌面右键点击“删除文件卷”
插上U盘
[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.
3、激活/dev/sdb2
[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 # 可引导分区
4、安装grub到U盘
查看U盘各分区的挂载情况
[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
5、安装到U盘的MBR
[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
应用:用 U 盘 grub 启动硬盘中的 Linux
注意:上述方案并不一定能启动硬盘中的 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