出于对新鲜技术的好奇,再加上对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,可执行命令
- dd if=/dev/sda of=/boot/boot.NNNN bs=512 count=1
如果仅备份引导部分,可只备份前446字节
- dd if=/dev/sda of=/boot/boot.NNNN bs=446 count=1
恢复的话执行
- dd if=/boot/boot.NNNN of=/dev/sda bs=512 count=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参数,否则许多文件的权限等重要信息会丢失掉,影响系统的启动与运行。下同
执行命令
将新建的引导分区挂载至/boot
执行命令
- 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
- ### BEGIN /etc/grub.d/00_header ###
-
if [ -s $prefix/grubenv ]; then
-
load_env
-
fi
-
set default="0"
-
if [ "${prev_saved_entry}" ]; then
-
set saved_entry="${prev_saved_entry}"
-
save_env saved_entry
-
set prev_saved_entry=
-
save_env prev_saved_entry
-
set boot_once=true
-
fi
-
-
function savedefault {
-
if [ -z "${boot_once}" ]; then
-
saved_entry="${chosen}"
-
save_env saved_entry
-
fi
-
}
-
-
function load_video {
-
insmod vbe
-
insmod vga
-
insmod video_bochs
-
insmod video_cirrus
-
}
-
-
insmod part_gpt
-
insmod ext2
-
set root='(hd0,gpt3)'
-
#search --no-floppy --fs-uuid --set dcd5fd7b-a784-4155-8e97-78fd568a5ad3
-
if loadfont /usr/share/grub/unicode.pf2 ; then
-
set gfxmode=640x480
-
load_video
-
insmod gfxterm
-
fi
-
terminal_output gfxterm
-
insmod part_gpt
-
insmod ext2
-
set root='(hd0,gpt2)'
-
#search --no-floppy --fs-uuid --set 056d51f0-c22b-4d88-982a-d57dc927926e
-
set locale_dir=($root)/grub/locale
-
set lang=zh
-
insmod gettext
-
set timeout=5
-
### END /etc/grub.d/00_header ###
-
-
### BEGIN /etc/grub.d/05_debian_theme ###
-
insmod part_gpt
-
insmod ext2
-
set root='(hd0,gpt3)'
-
#search --no-floppy --fs-uuid --set dcd5fd7b-a784-4155-8e97-78fd568a5ad3
-
insmod png
-
if background_image /usr/share/pixmaps/splash/debian-edu-splash-grub.png; then
-
set color_normal=white/black
-
set color_highlight=magenta/black
-
else
-
set menu_color_normal=cyan/blue
-
set menu_color_highlight=white/blue
-
fi
-
### END /etc/grub.d/05_debian_theme ###
-
-
### BEGIN /etc/grub.d/50_linux ###
-
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
-
insmod part_gpt
-
insmod ext2
-
set root='(hd0,gpt2)'
-
#search --no-floppy --fs-uuid --set=root 056d51f0-c22b-4d88-982a-d57dc927926e
-
echo 'Loading Linux 2.6.32-5-amd64 ...'
-
linux /vmlinuz-2.6.32-5-amd64 root=/dev/sda2 ro quiet
-
echo 'Loading initial ramdisk ...'
-
initrd /initrd.img-2.6.32-5-amd64
-
}
这样改完以后可能会使grub2的界面变得比较丑陋,不过没关系,将系统成功引导后再刷新一下grub即可,但不要急于现在就做。
第五步:修改/etc/fstab
由于分区表类型的修改,各挂载点所对应的分区也必然会有所变化,在重启之前请一定要记住修改/etc/fstab,其它的就不多说了,直接把参考文件放上去
- #
-
proc /proc proc defaults 0 0
-
# / was on /dev/sdb6 during installation
-
/dev/sda3 / ext4 errors=remount-ro 0 1
-
# /boot was on /dev/sdb2 during installation
-
/dev/sda2 /boot ext2 defaults 0 2
-
# /home was on /dev/sdb9 during installation
-
/dev/sda4 /home ext4 defaults 0 2
-
# swap was on /dev/sdb7 during installation
-
#UUID=0a9a16c7-a03c-4c72-83c4-6ab0d934d0f6 none swap sw 0 0
-
/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)
原创文章,如需转载,需要注明原文地址。
阅读(7669) | 评论(2) | 转发(2) |