我有 2 个(很快就会有更多)独立的操作系统。目前只有 CentOS 6.6 和 7,但会添加更多版本。
我可以干净地启动 CentOS 7,但 6.6 无法启动。错误是:
error: no such device (long UUID here)
error: unknown filesystem
仅供参考,磁盘是 GPT,使用 gdisk/parted 进行分区。有一个/boot
适用于 7 的版本/dev/sda2
,另一个适用于 6.6 的版本/dev/sda9
。两者都有完整的/boot/grub2/
目录(但这并不重要)和相同的grub2.cfg
.
工作 7 one( sda2
) 已格式化xfs
。不成功的 6.6 one ( sda9
) 失败并显示ext2
,ext4
或xfs
。
进入 grub 命令行,我尝试列出分区。它可以看到所有分区,但无法看到除以下内容之外的任何文件系统sda2
:
grub> ls (hd0,2)
Partition hd0,2: Filesystem type xfs, UUID 97df.... - Partition start at 2048 KiB - Total size 512000 KiB
grub> ls (hd0,9)
Partition hd0,9: No known filesystem detected - Partition start at 279393720 KiB - Total size 495616 KiB
启动到7,我可以sda9
直接挂载,一切看起来都很好。
来自parted的分区表:
(parted) p
Model: DELL PERC H730 Mini (scsi)
Disk /dev/sda: 8397GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 526MB 524MB xfs
3 526MB 537GB 537GB lvm
4 537GB 1074GB 537GB lvm
5 1074GB 1504GB 430GB lvm
6 1504GB 1933GB 430GB lvm
7 1933GB 2324GB 391GB lvm
8 2324GB 2861GB 537GB Linux LVM lvm
9 2861GB 2861GB 508MB xfs centos_66_boot
10 2861GB 2961GB 99.5GB centos_66_root lvm
11 2961GB 2971GB 9999MB smart_data1
12 2971GB 3071GB 100GB smart_data2
(* 分区上没有任何内容smart_
,用于备用应用程序内容)。
如果您喜欢从 gdisk:
Disk /dev/sda: 16401301504 sectors, 7.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 5B41D43E-6D17-4E34-9068-E66BD3753D70
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16401301470
Partitions will be aligned on 2048-sector boundaries
Total free space is 10403256253 sectors (4.8 TiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02
2 4096 1028095 500.0 MiB 0700
3 1028096 1049612287 500.0 GiB 8E00
4 1049612288 2098196479 500.0 GiB 8E00
5 2098196480 2937065471 400.0 GiB 8E00
6 2937065472 3775934463 400.0 GiB 8E00
7 3775934464 4539299839 364.0 GiB 8E00
8 4539299840 5587875839 500.0 GiB 8E00 Linux LVM
9 5587875840 5588867071 484.0 MiB 0700 centos_66_boot
10 5588867072 5783203839 92.7 GiB 8E00 centos_66_root
11 5783203840 5802733567 9.3 GiB 0700 smart_boot
12 5802733568 5998047231 93.1 GiB BF00 smart_data
相关部分/boot/grub2/grub.cfg
:
menuentry 'CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64' --class rhel fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-229.14.1.el7.x86_64-advanced-d171cb6d-c39b-45d5-b09a-33f641c3f397' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod xfs
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 --hint='hd0,gpt2' 97dfd142-3423-459a-a39e-9a6099b3e5fc
else
search --no-floppy --fs-uuid --set=root 97dfd142-3423-459a-a39e-9a6099b3e5fc
fi
linux16 /vmlinuz-3.10.0-229.14.1.el7.x86_64 root=/dev/mapper/root-lv_root ro rd.lvm.lv=root/lv_root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet
initrd16 /initramfs-3.10.0-229.14.1.el7.x86_64.img
}
menuentry 'CentOS release 6.6 (Final) (on /dev/mapper/vg_centos6-lv_centos6_root)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-b5002a5f-a521-423c-bae5-82e0aefe5e17' {
insmod part_gpt
insmod xfs
set root='hd0,gpt9'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt9 --hint-efi=hd0,gpt9 --hint-baremetal=ahci0,gpt9 --hint='hd0,gpt9' 5715cdc8-9d49-49c3-814f-eb887d69b7d4
else
search --no-floppy --fs-uuid --set=root 5715cdc8-9d49-49c3-814f-eb887d69b7d4
fi
linux /vmlinuz-2.6.32-504.el6.x86_64 root=/dev/dm-5
initrd /initramfs-2.6.32-504.el6.x86_64.img
}
我还尝试了 的备用分区代码sda9
,但没有任何效果。我缺少什么?
就其价值而言,grub2 版本:
# rpm -qi grub2
Name : grub2
Epoch : 1
Version : 2.02
Release : 0.17.0.1.el7.centos.4
Architecture: x86_64
Install Date: Mon 26 Oct 2015 05:48:42 PM IST
Group : System Environment/Base
Size : 7394739
License : GPLv3+
Signature : RSA/SHA256, Wed 23 Sep 2015 07:13:19 PM IDT, Key ID 24c6a8a7f4a80eb5
Source RPM : grub2-2.02-0.17.0.1.el7.centos.4.src.rpm
Build Date : Wed 23 Sep 2015 05:51:07 PM IDT
Build Host : kbuilder.dev.centos.org
Relocations : (not relocatable)
URL : http://www.gnu.org/software/grub/
Summary : Bootloader with support for Linux, Multiboot and more
应评论者的要求,输出:
# file -s /dev/sda9
/dev/sda9: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
# file -s /dev/sda2
/dev/sda2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
似乎grub2-probe
对两者都满意:
# grub2-probe --device /dev/sda2
xfs
# grub2-probe --device /dev/sda9
xfs
grub2-fstest
这些分区似乎也干净地返回:
# grub2-fstest -vvv -r /dev/sda2 /dev/sda ls -- -l
Device proc: Filesystem type procfs - Sector size 512B - Total size 0KiB
Device loop0: No known filesystem detected - Sector size 512B - Total size 8200650752KiB
Partition loop0,gpt12: No known filesystem detected - Partition start at 2901366784KiB - Total size 97656832KiB
Partition loop0,gpt11: No known filesystem detected - Partition start at 2891601920KiB - Total size 9764864KiB
Partition loop0,gpt10: No known filesystem detected - Partition start at 2794433536KiB - Total size 97168384KiB
Partition loop0,gpt9: Filesystem type xfs, UUID b5c911d7-4f55-46da-80fd-d956bad72234 - Partition start at 2793937920KiB - Total size 495616KiB
Partition loop0,gpt8: No known filesystem detected - Partition start at 2269649920KiB - Total size 524288000KiB
Partition loop0,gpt7: No known filesystem detected - Partition start at 1887967232KiB - Total size 381682688KiB
Partition loop0,gpt6: No known filesystem detected - Partition start at 1468532736KiB - Total size 419434496KiB
Partition loop0,gpt5: No known filesystem detected - Partition start at 1049098240KiB - Total size 419434496KiB
Partition loop0,gpt4: No known filesystem detected - Partition start at 524806144KiB - Total size 524292096KiB
Partition loop0,gpt3: No known filesystem detected - Partition start at 514048KiB - Total size 524292096KiB
Partition loop0,gpt2: Filesystem type xfs, UUID 97dfd142-3423-459a-a39e-9a6099b3e5fc - Partition start at 2048KiB - Total size 512000KiB
Partition loop0,gpt1: No known filesystem detected - Partition start at 1024KiB - Total size 1024KiB
帮助?
答案1
您使用的系统磁盘远远大于 2 TiB - 并且存在分区bios_grub
但不存在 EFI 系统分区表明您正在使用旧版 BIOS 引导模式,即使您使用的是 GPT 分区。
您的sda9
分区超出了磁盘的前 2 TiB。
grub2-probe
似乎可以很好地识别文件系统,并且使用与实际安装的 GRUB 引导加载程序中的文件系统驱动程序相同的代码库。这强烈表明这不是 GRUB 不理解 CentOS 6.x 的 XFS 的问题。
因此,GRUB 代码库中的 XFS 检测例程在依赖 Linux 内核进行磁盘访问时工作正常,但在启动时在系统固件之上运行时会失败。您的系统固件似乎不支持使用旧版 BIOS 功能访问超过前 2 TiB 的数据。这可能就是 GRUB 无法找到 CentOS 6 的引导分区的原因。
摆脱 2 TiB 的限制正是针对 x86 架构开发 GPT 分区和 UEFI 的主要原因之一。使用旧版 BIOS 和 GPT 分区从大于 2TiB 的磁盘启动是 Windows 不支持的特殊情况(仍然是 x86 平台上的“商业主导”操作系统),因此硬件供应商不会对其进行测试。您可能正在使用您的硬件做一些全新且未经测试的事情。
据我所知,您的选择是:
- 如果您想继续使用 BIOS 式引导,则必须将
/boot
所有操作系统的分区(或等效分区)安排在磁盘的前 2 TiB 内。 - 或者您可以过渡到本机 UEFI 式引导,创建一个大于最小的 EFI 系统分区(简称 ESP),并让所有操作系统在其中安装其 UEFI 引导加载程序。 UEFI 规范明确允许:每个操作系统都应该将其引导加载程序安装到
<ESP root>/EFI/<vendor_or_distribution_name>/
ESP 内的子目录中。
如果您计划安装的所有操作系统都支持 UEFI,我会推荐第二个选项。您需要学习一些新东西并忘记一些旧的“真理”,但是您将可以使用您的系统,而根本不需要考虑那个讨厌的旧 2 TiB 限制。