Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78848
  • 博文数量: 11
  • 博客积分: 289
  • 博客等级: 二等列兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 14:51
个人简介

linux的爱好者,GNU的支持者。 小白中的牛人,高手中的菜鸟。 个人开源项目:https://sourceforge.net/projects/schultetable

文章分类

全部博文(11)

文章存档

2021年(2)

2017年(3)

2013年(2)

2012年(2)

2011年(2)

分类: LINUX

2012-02-12 16:15:58

出于对新鲜技术的好奇,再加上对mbr硬盘4个主分区这一局限的不满,本人近日将一块160G的硬盘转为了GPT硬盘,并将已安装的debian迁移过 去,并从GPT硬盘启动,系统的运行基本正常,多数软件均可以正常运行,现将其过程与经验分享给大家,希望对大家能有所帮助
环境:
操作系统:debian squeeze单系统
内核:2.6.32-5-amd64
bootloader:grub2
主板:磐正P35+(bios主板)
CPU:Intel Core2 Duo
硬盘:西部数据、希捷

我的debian原来是安装在希捷的那块硬盘上,本人将西部数据的那块硬盘转为GPT,并将debian完全迁移到西部数据的那块硬盘上,具体步骤如下:
第一步:准备工作
1.备份mbr
在你进行下一步之前,建议你先备份mbr,给自己留一个后路,要备份mbr,可执行命令
  1. dd if=/dev/sda of=/boot/boot.NNNN bs=512 count=1
如果仅备份引导部分,可只备份前446字节
  1. dd if=/dev/sda of=/boot/boot.NNNN bs=446 count=1
恢复的话执行
  1. dd if=/boot/boot.NNNN of=/dev/sda bs=512 count=1

  1. dd if=/boot/boot.NNNN of=/dev/sda bs=446 count=1
2.确认内核已启用对GPT的支持
对于新内核,可能已经默认开启了对GPT的支持,那样你就不必操心了,但对于较老的内核,可能并没有开启这种支持,你需要确认一下你的内核是否已经开启了 这种支持,如果没有开启,需要重新编译内核,否则你可能将为无法启动而困扰。我的内核是2.6.32-5-amd64已有对GPT的支持,不需要重新编 译。
3.grub
传统的grub本身并不支持GPT,但有对GPT支持的补丁,如果你仍在使用传统的grub,可尝试安装这个补丁。对于grub2,包含对GPT的支持,无需安装补丁。
4.分区工具
老的分区工具不支持GPT,你需要使用支持GPT的分区工具进行分区操作,gnu parted(使用parted命令运行)及其前端gparted等都支持GPT,同时还要注意你所用的分区工具是否可以无损地由mbr转换到gpt
5.备份文件
如果你不能确认你所用的分区工具是否可以无损地由mbr转换到gpt,那么我建议你最好先将重要的文件备份一下。

第二步:转换硬盘
本人是先将硬盘清空(即先删掉所有的分区,以免建立一个MBR/GPT混合的硬盘),将其再转为GPT硬盘,不过我没有尝试无损转换。
注意:当你将硬盘分区表转换为GPT后,不要重新启动计算机,除非你有较新版本linux的livecd,否则你将为无法启动而困扰。

在gparted下,点击一块未分配的空间(注:此时,本人的整块硬盘都是未分配的空间),再点设备->新建分区表,在弹出的对话框中点那个“高级”,在复选框里选“gpt”(如下图)

对于bios主板,需要建立一个保护分区,保护分区需要建在硬盘前2TB的位置,一般为磁盘的开头,大小在1~2M之间即可,文件系统选“未格式化”,也就是说只建立一个空分区,不进行格式化
应用更改,成功后右键点击新建的那个分区,选择“管理标志”,在弹出的对话框中勾选“bios_gpt”,将此分区设置“bios_gpt”标记(如下图)

注意:分区建立好之后不要将其格式化,更不要建立为某种文件系统。

第三步:安装grub
使用dd命令将/boot/grub/core.img写入到刚才建立的保护分区中,具体如下:
    1.先执行ls -l /boot/grub/core.img命令,查该文件的大小(精确到字节)
    2.执行dd if=/boot/grub/core.img of=/dev/sda1 bs=25436 count=1 (用你的/boot/grub/core.img文件的大小替换25436)命令,将该文件写入到保护分区中。

创建一个boot分区,将/boot下的文件复制到此分区中,建议将此分区设置“boot”标记,也可以直接进行分区复制。
注意:如果用cp命令复制文件时,建议使用-a参数,而不要仅用-R参数,否则许多文件的权限等重要信息会丢失掉,影响系统的启动与运行。下同
执行命令
  1. mount /dev/sda2 /boot
将新建的引导分区挂载至/boot

执行命令
  1. grub-install --root-directory=/boot/grub /dev/sda
将grub2安装至GPT硬盘上
注:可能有的人会认为应该是--root-directory=/boot,但网上有的资料说应该设置为/boot/grub目录,反正我就是这样做的。

第四步:复制文件
由于我是先将磁盘清空,所以我需要复制文件,这一步根据你自己的情况而定,也可以直接复制整个分区,用cp命令复制文件时注意不要仅用-R参数。

第四步:修改/boot/grub/grub.cfg
debian下grub的启动菜单的配置文件为/boot/grub/grub.cfg,如果你的发行版不是,请按照你的发行版来。
grub2以(hd0,msdos1)这种形式来表示分区,其实这里的msdos对应的就是mbr分区表,当你改为GPT硬盘后,需要将msdos对应改 为gpt,同时还要在前面加上insmod part_gpt,另外,由于分区表和分区结构的改变,你需要将一些形如“dcd5fddcd5fd7b- a784-4155-8e97-78fd568a5ad37b-a784-4155-8e97-78fd568a5ad3”的部分换为对应的分区设备,如 /dev/sda2,有些需要在整条语句前加#注释掉
列出一部分供参考
参考分区结构为:
/dev/sda1:2M保护分区
/dev/sda2:引导分区
/dev/sda3:grub
/dev/sda4:/home
  1. ### BEGIN /etc/grub.d/00_header ###
  2. if [ -s $prefix/grubenv ]; then
  3. load_env
  4. fi
  5. set default="0"
  6. if [ "${prev_saved_entry}" ]; then
  7. set saved_entry="${prev_saved_entry}"
  8. save_env saved_entry
  9. set prev_saved_entry=
  10. save_env prev_saved_entry
  11. set boot_once=true
  12. fi

  13. function savedefault {
  14. if [ -z "${boot_once}" ]; then
  15. saved_entry="${chosen}"
  16. save_env saved_entry
  17. fi
  18. }

  19. function load_video {
  20. insmod vbe
  21. insmod vga
  22. insmod video_bochs
  23. insmod video_cirrus
  24. }

  25. insmod part_gpt
  26. insmod ext2
  27. set root='(hd0,gpt3)'
  28. #search --no-floppy --fs-uuid --set dcd5fd7b-a784-4155-8e97-78fd568a5ad3
  29. if loadfont /usr/share/grub/unicode.pf2 ; then
  30. set gfxmode=640x480
  31. load_video
  32. insmod gfxterm
  33. fi
  34. terminal_output gfxterm
  35. insmod part_gpt
  36. insmod ext2
  37. set root='(hd0,gpt2)'
  38. #search --no-floppy --fs-uuid --set 056d51f0-c22b-4d88-982a-d57dc927926e
  39. set locale_dir=($root)/grub/locale
  40. set lang=zh
  41. insmod gettext
  42. set timeout=5
  43. ### END /etc/grub.d/00_header ###

  44. ### BEGIN /etc/grub.d/05_debian_theme ###
  45. insmod part_gpt
  46. insmod ext2
  47. set root='(hd0,gpt3)'
  48. #search --no-floppy --fs-uuid --set dcd5fd7b-a784-4155-8e97-78fd568a5ad3
  49. insmod png
  50. if background_image /usr/share/pixmaps/splash/debian-edu-splash-grub.png; then
  51. set color_normal=white/black
  52. set color_highlight=magenta/black
  53. else
  54. set menu_color_normal=cyan/blue
  55. set menu_color_highlight=white/blue
  56. fi
  57. ### END /etc/grub.d/05_debian_theme ###

  58. ### BEGIN /etc/grub.d/50_linux ###
  59. menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
  60. insmod part_gpt
  61. insmod ext2
  62. set root='(hd0,gpt2)'
  63. #search --no-floppy --fs-uuid --set=root 056d51f0-c22b-4d88-982a-d57dc927926e
  64. echo 'Loading Linux 2.6.32-5-amd64 ...'
  65. linux /vmlinuz-2.6.32-5-amd64 root=/dev/sda2 ro quiet
  66. echo 'Loading initial ramdisk ...'
  67. initrd /initrd.img-2.6.32-5-amd64
  68. }
这样改完以后可能会使grub2的界面变得比较丑陋,不过没关系,将系统成功引导后再刷新一下grub即可,但不要急于现在就做。

第五步:修改/etc/fstab
由于分区表类型的修改,各挂载点所对应的分区也必然会有所变化,在重启之前请一定要记住修改/etc/fstab,其它的就不多说了,直接把参考文件放上去
  1. #
  2. proc /proc proc defaults 0 0
  3. # / was on /dev/sdb6 during installation
  4. /dev/sda3 / ext4 errors=remount-ro 0 1
  5. # /boot was on /dev/sdb2 during installation
  6. /dev/sda2 /boot ext2 defaults 0 2
  7. # /home was on /dev/sdb9 during installation
  8. /dev/sda4 /home ext4 defaults 0 2
  9. # swap was on /dev/sdb7 during installation
  10. #UUID=0a9a16c7-a03c-4c72-83c4-6ab0d934d0f6 none swap sw 0 0
  11. /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
第六步:重启
现在你已经可以重新引导你的系统了,来看看效果吧,如果出现问题,就找一个livecd来修复。

其它注意事项:
1.windows对GPT的支很糟糕,如果你想要在GPT硬盘下引导windows,需要先将主板换为罕见的EFI主板,还要将系统换为64位windows,至于windows对GPT的支持,请参考网上的资料,在下面wikipedia的资料上就有。
2.ntfs文件系统和ext3/ext4文件系统的GUID是完全一样的(不知道为什么),所以有些分区工具无法将这两种文件系统区分开来,尤其是在windows下。对于windows分区和ext4分区共存的硬盘下,一定要注意这一点。

参考资料:
GPT初步应用心得:http://blog.163.com/prevBlogPerma.do?host=wood_elf@126&srl=6515979120114783815940&mode=prev
通过 GPT 和 Linux 充分利用大型驱动器:http://www.ibm.com/developerworks/cn/linux/l-gpt/
GRUB2(arch wiki):
GUID Partition Table(arch wiki):
全局唯一标识分区表(wikipedia):

版权声明:本文乃pl014(panuins@gmail.com)原创文章,如需转载,需要注明原文地址。
阅读(7593) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

pl0142012-08-27 15:59:31

重返人生: ( ⊙o⊙ )哇,不错啊,一直用个叫电脑店的软件来修改U盘和硬盘的引导,也不错的!.....
这个软件没听说过,我只关心linux/unix下的工具。