优化私有镜像(Linux) 修改grub文件磁盘标识方式为UUID 操作场景 在优化Linux私有镜像过程中,需要在云主机上修改grub文件磁盘标识方式为UUID。 修改menu.lst或者grub.cfg配置(“/boot/grub/menu.lst”或“/boot/grub/grub.cfg”或“/boot/grub2/grub.cfg”或“/boot/grub/grub.conf”或“ /boot/efi/EFI/euleros/grub.cfg”,具体路径根据OS不同会有所区别),启动分区使用UUID方式配置。 说明: 根据OS不同,配置文件里标记的root分区会有所不同,可能是“root/dev/xvda”或“root/dev/disk”,都需要将grub文件磁盘标识方式修改为UUID的形式。 操作步骤 以Ubuntu 14.04为例,执行blkid命令获取root分区对应的UUID并记录下来,编辑“/boot/grub/grub.cfg”文件,使用root分区的UUID来配置boot项。如果root分区已经使用UUID形式则不需要修改。具体操作方法如下: a. 使用root用户登录云主机。 b. 执行以下命令,列出当前系统中所有已挂载文件系统的类型以及对应设备的UUID 。 blkid 回显信息如下所示: /dev/xvda1: UUID"ec51d86034bf4374ad46a0c3e337fd34" TYPE"ext3" /dev/xvda5: UUID"7a44a9ce92814740b95fc8de33ae5c11" TYPE"swap" c. 执行以下命令,查看“grub.cfg”文件: cat /boot/grub/grub.cfg 回显信息如下所示: ……menuentry 'Ubuntu Linux, with Linux 3.13.024generic' class ubuntu class gnulinux class gnu class os unrestricted $menuentryidoption 'gnulinux3.13.024genericadvancedec51d86034bf4374ad46a0c3e337fd34' { recordfail loadvideo gfxmode $linuxgfxmode insmod gzio insmod partmsdos insmod ext2 if [ x$featureplatformsearchhint xy ]; then search nofloppy fsuuid setroot ec51d86034bf4374ad46a0c3e337fd34 else search nofloppy fsuuid setroot ec51d86034bf4374ad46a0c3e337fd34 fi echo 'Loading Linux 3.13.024generic ...' linux /boot/vmlinuz3.13.024generic root/dev/xvda1 ro echo 'Loading initial ramdisk ...' initrd /boot/initrd.img3.13.024generic } d. 根据“/boot/grub/grub.cfg”配置文件里标记的root分区,查找是否包括“root/dev/xvda1”或者“rootUUIDec51d86034bf4374ad46a0c3e337fd34”信息。 存在“rootUUIDec51d86034bf4374ad46a0c3e337fd34”,即root分区以UUID的表示形式,无需修改。 存在“root/dev/xvda1”,即root分区以设备名称表示的形式,请执行步骤5。 e. 根据“root/dev/xvda1”,即root分区对应的设备名称,以及blkid命令获取的分区信息,找到root分区设备名称对应的UUID。 f. 执行以下命令,打开“grub.cfg”文件。 vi /boot/grub/grub.cfg g. 按“i”进入编辑模式,将root分区改成UUID形式,本例中将“root/dev/xvda1”修改为“rootUUIDec51d86034bf4374ad46a0c3e337fd34”。 h. 按“Esc”后,输入:wq,按“Enter”。 保存设置并退出vi编辑器。 i. 执行以下命令,确认修改结果。 cat /boot/grub/grub.cfg 回显信息如下所示表示修改成功,即root分区以UUID的形式表示。 ……menuentry 'Ubuntu Linux, with Linux 3.13.024generic' class ubuntu class gnulinux class gnu class os unrestricted $menuentryidoption 'gnulinux3.13.024genericadvancedec51d86034bf4374ad46a0c3e337fd34' { recordfail loadvideo gfxmode $linuxgfxmode insmod gzio insmod partmsdos insmod ext2 if [ x$featureplatformsearchhint xy ]; then search nofloppy fsuuid setroot ec51d86034bf4374ad46a0c3e337fd34 else search nofloppy fsuuid setroot ec51d86034bf4374ad46a0c3e337fd34 fi echo 'Loading Linux 3.13.024generic ...' linux /boot/vmlinuz3.13.024generic rootUUIDec51d86034bf4374ad46a0c3e337fd34 ro echo 'Loading initial ramdisk ...' initrd /boot/initrd.img3.13.024generic } 以CentOS 6.5为例,执行blkid命令获取root分区对应的UUID并记录下来,编辑“/boot/grub/grub.conf”文件,使用root分区的UUID来配置boot项。如果root分区已经使用UUID形式则不需要修改。具体操作步骤如下: a. 使用root用户登录云主机。 b. 执行以下命令,列出当前系统中所有已挂载文件系统的类型以及对应设备的UUID 。 blkid 回显信息如下所示 /dev/xvda1: UUID"749d6c0c990a4661bed146769388365a" TYPE"swap" /dev/xvda2: UUID"f382872beda643df95165a687fecdce6" TYPE"ext4" c. 执行以下命令查看“grub.conf”文件: cat/boot/grub/grub.conf 回显信息如下所示。 default0 timeout5 splashimage(hd0,1)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32573.8.1.el6.x8664) root (hd0,1) kernel /boot/vmlinuz2.6.32573.8.1.el6.x8664 ro root/dev/xvda2 rdNOLUKS rdNOLVM LANGenUS.UTF8 rdNOMD SYSFONTlatarcyrhebsun16 crashkernelautoKEYBOARDTYPEpc KEYTABLEus rdNODM rhgb quiet initrd /boot/initramfs2.6.32573.8.1.el6.x8664.img d. 根据“/boot/grub/grub.conf”配置文件里标记的root分区,查找是否包括“root/dev/xvda2”或者“rootUUIDf382872beda643df95165a687fecdce6”信息。 若存在“rootUUIDf382872beda643df95165a687fecdce6”,即root分区以UUID的表示形式,则无需修改。 若存在“root/dev/xvda2”,即root分区以设备名称表示的形式,请执行步骤5。 e. 根据“root/dev/xvda2”,即root分区对应的设备名称,以及blkid命令获取的分区信息,找到root分区设备名称对应的UUID。 f. 执行以下命令,打开“grub.conf”文件。 vi /boot/grub/grub.conf g. 按“i”进入编辑模式,将root分区改成UUID形式,本例中将“root/dev/xvda2”修改为“rootUUIDf382872beda643df95165a687fecdce6”。 h. 按“Esc”后,输入:wq,按“Enter”。 保存设置并退出vi编辑器。 i. 修改后,执行以下命令确认修改结果。 cat /boot/grub/grub.cfg 回显信息如下所示表示修改成功,即root分区以UUID的形式表示。 default0 timeout5 splashimage(hd0,1)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32573.8.1.el6.x8664) root (hd0,1) kernel /boot/vmlinuz2.6.32573.8.1.el6.x8664 ro rootUUIDf382872beda643df95165a687fecdce6 rdNOLUKS rdNOLVM LANGenUS.UTF8 rdNOMD SYSFONTlatarcyrhebsun16 crashkernelautoKEYBOARDTYPEpc KEYTABLEus rdNODM rhgb quiet initrd /boot/initramfs2.6.32573.8.1.el6.x8664.img 以CentOS 7.0为例,执行blkid命令获取root分区对应的UUID并记录下来,编辑“/boot/grub2/grub.cfg”文件,使用root分区的UUID来配置boot项。如果root分区已经使用UUID形式则不需要修改。 a. 使用root用户登录云主机。 b. 执行以下命令,列出当前系统中所有已挂载文件系统的类型以及对应设备的UUID 。 blkid 回显信息如下所示。 /dev/xvda2: UUID"4eb402944c6f4384bbb6b8795bbb1130" TYPE"xfs" /dev/xvda1: UUID"2de37c6b264843b4a4f540162154e135" TYPE"swap" c. 执行以下命令查看“grub.cfg”文件: cat /boot/grub2/grub.cfg 回显信息如下所示。 …… menuentry 'CentOS Linux (3.10.0229.el7.x8664) 7 (Core)' class fedora class gnulinux class gnu class os unrestricted $menuentryidoption 'gnulinux3.10.0229.el7.x8664advanced4eb402944c6f4384bbb6b8795bbb1130' { loadvideo set gfxpayloadkeep insmod gzio insmod partmsdos insmod xfs set root'hd0,msdos2' if [ x$featureplatformsearchhint xy ]; then search nofloppy fsuuid setroot hint'hd0,msdos2'4eb402944c6f4384bbb6b8795bbb1130 else search nofloppy fsuuid setroot 4eb402944c6f4384bbb6b8795bbb1130 fi linux16 /boot/vmlinuz3.10.0229.el7.x8664 root/dev/xvda2 ro crashkernelauto rhgb quiet LANGenUS.UTF8 initrd16 /boot/initramfs3.10.0229.el7.x8664.img } d. 根据“/boot/grub/grub.cfg”配置文件里标记的root分区,查找是否包括root/dev/xvda2或者包括rootUUID4eb402944c6f4384bbb6b8795bbb1130信息。 存在“rootUUID4eb402944c6f4384bbb6b8795bbb1130”,即root分区以UUID的表示形式,则无需修改。 存在“root/dev/xvda2”,即root分区以设备名称表示的形式,请执行步骤5。 e. 根据“root/dev/xvda2”,即root分区对应的设备名称,以及blkid命令获取的分区信息,找到root分区设备名称对应的UUID。 f. 执行以下命令,打开“grub.cfg”文件。 vi /boot/grub2/grub.cfg g. 按“i”进入编辑模式,将root分区改成UUID形式,本例中将“root/dev/xvda2”修改为“rootUUID4eb402944c6f4384bbb6b8795bbb1130”。 h. 按“Esc”后,输入:wq,按“Enter”。 保存设置并退出vi编辑器。 i. 执行以下命令确认修改结果。 cat /boot/grub2/grub.cfg 回显信息如下所示表示修改成功,即root分区以UUID的形式表示。 …… menuentry 'CentOS Linux (3.10.0229.el7.x8664) 7 (Core)' class fedora class gnulinux class gnu class os unrestricted $menuentryidoption 'gnulinux3.10.0229.el7.x8664advanced4eb402944c6f4384bbb6b8795bbb1130' { loadvideo set gfxpayloadkeep insmod gzio insmod partmsdos insmod xfs set root'hd0,msdos2' if [ x$featureplatformsearchhint xy ]; then search nofloppy fsuuid setroot hint'hd0,msdos2'4eb402944c6f4384bbb6b8795bbb1130 else search nofloppy fsuuid setroot 4eb402944c6f4384bbb6b8795bbb1130 fi linux16 /boot/vmlinuz3.10.0229.el7.x8664 rootUUID4eb402944c6f4384bbb6b8795bbb1130 ro crashkernelauto rhgb quiet LANGenUS.UTF8 initrd16 /boot/initramfs3.10.0229.el7.x8664.img }