GRUB中硬盘和分区编号,UUID

本文详细介绍了Linux系统中硬盘编号、分区编号以及UUID的使用方法,包括BIOS检测结果对编号的影响、启动盘顺序优先级、以及如何在fstab文件中指定分区挂载位置。同时解释了UUID的作用与查找方法。
硬盘编号:
首先,如果你是单硬盘的话,不用想了,只会是hd0。那么如果有两块或更多的硬盘呢?你可以这样:在开机检测出现BIOS画面时,等到全部硬盘的数据出现时,立即按下“Pause”键(我的位于“Page Up”键的上方),这时启动过程会暂停,然后仔细看看吧。比如我有四块硬盘————两块IDE的,分别是40G、160G,还有两块SATA的,分别是80G和320G。BIOS检测顺序是这样:IDE40,IDE160,SATA320,SATA80,所以GRUB表示为:IDE40(hd0),IDE160(hd1),SATA320(hd2),SATA80(hd3),就这样啦,赶快记下吧!
注意:这里有一个变数:启动盘顺序。
还是上面的例子,因为我的GRUB安装在SATA320的MBR,并且平时就是用这块硬盘启动电脑,所以这时候SATA320中的GRUB认为我的硬盘应该这样编号:SATA320(hd0),IDE40(hd1),IDE160(hd2),SATA80(hd3)。
呵呵,明白了吧!GRUB编号的原则是这样的:
1.多快硬盘的顺序完全照抄BIOS检测结果;
2.启动盘一定是hd0(不管BIOS如何),其他硬盘依次按BIOS检测结果重排。
3.不管IDE还是SATA,一律认作IDE硬盘!即不使用类似(sd0,0)这样的编号,这个和linux的方式不同!


分区编号:
大家知道同一块硬盘最多只能共存四个主分区,所以对于hd0硬盘,依次是(hd0,0)、(hd0,1)、(hd0,2)、(hd0,3),这是只分出四个主分区的情况,这个编号永远固定不变;
不过这样的话,你就无法使用更多的分区了,所以通常应该牺牲掉一个主分区(通常是最后一个)把它转换为扩展分区(extend),以便在其中再细分出更多的逻辑分区(logic,注意和卖鼠标那个公司没关系啊)。【 Linux公社 www.Linuxidc.com 】
扩展分区可能是(hd0,0~3)其中的任何一个,这个编号永远不会在menu.lst中被使用,原因自己想想喽。
逻辑分区一律从(hd0,4)开始编号(因为0~3被主分区占据了),依次为(hd0,4)、(hd0,5)、(hd0,6)、(hd0,7)……
ok,对于大多数人来说,两个以上的主分区根本没用,所以惯常的做法是————一个主分区、一个扩展分区、若干个逻辑分区。所以,惯常会使用在同一块硬盘上的编号是:(hd0,0)、(hd0,4)、(hd0,5)、(hd0,6)……。以此类推,第二硬盘是(hd1,0)、(hd1,4)、(hd1,5)、(hd1,6)……。


题外话————linux的编号方法。
呵呵,这个简单了,严格按照BIOS检测结果,第一硬盘是sda,第二硬盘是sdb,第三硬盘是sdc……,而不管哪个是启动盘。
具体来说,我用第三硬盘启动的系统,GRUB认为它是(hd0),而linux依然认为它是sdc,明白?
另外,自8.04开始,所有硬盘都编号为“sdxx”,即不管IDE还是SATA,一律认作SCIS硬盘


UUID:(推荐的在fstab中指定挂载位置方式)


每个分区都需要挂载(mount)以后才能使用,包括系统根分区,家目录,swap等等,这些是启动时系统已经帮你搞定的,只是你不知道而已。
那么系统是怎么搞定的呢?通过fstab文件啊!你可以打开/etc/fstab自己看看


# /dev/sdb5
UUID=3E40C99340C95277   /home/winD   ntfs-3g   defaults   0   0


第一行是注释,特征是开头一定有一个字符“#”, 这是linux的语法格式,在其他配置文件里也可以见到。
第二行是真正的重点,注意其中每一个空格或者Tab符号都代表一个指令串的结束,一个或连续的多个空格或者Tab符号都将被视为一个。 5个Tab把这一句分为了六个部分:
1.目标分区,常用三种方式指定
●UUID(通用唯一识别码 Universally Unique Identifier), ls -al /dev/disk/by-uuid 可查看所有分区的UUID
●设备名称(如“/dev/sdb1”)
●分区卷标(如“LABEL=winD”,当然。必须要存在。可以在windows资源管理器里改)。
2. 挂载目录,必须事先创建好。
3. 这个分区用的是什么文件系统, 如果是FAT和FAT32,就写成“vfat”;如果是NTFS,就写成“ntfs-3g”;或者ext3,ext4.
4.第四栏是很复杂的参数,但必不可少。好在一般应用,输入“defaults”即默认设置即可。如果你想进行更严格的存取控制的话就自己研究。
5.最后两栏也是必不可少的参数,对于win分区,就写成“0 0”即可,


改完fstab以后 sudo mount -a即可
本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-07/38290.htm
<think>我们正在解决Linux系统硬盘启动时UUID不匹配的问题。UUID是唯一标识符,当系统启动时,如果UUID不匹配,可能会导致无法正确挂载硬盘分区,从而引起启动问题。以下步骤将帮助我们解决这个问题。 ### 1. **确认UUID不匹配的问题** - 在启动时,如果出现UUID不匹配的错误,通常会在启动日志中看到类似以下的信息: ``` UUID=xxxx-xxxx does not exist ``` 或者 ``` Unable to find device with UUID xxxx-xxxx ``` - 我们可以通过以下命令查看当前系统中硬盘分区UUID: ```bash sudo blkid ``` 或者 ```bash ls -l /dev/disk/by-uuid ``` ### 2. **检查引导配置文件** - 如果系统能够进入恢复模式或者使用Live USB启动,我们需要检查引导配置文件(通常是`/etc/fstab`)中记录的UUID是否与当前硬盘分区UUID匹配。 - 使用以下命令查看`/etc/fstab`文件: ```bash cat /etc/fstab ``` - 对比`/etc/fstab`中的UUID`blkid`命令输出的UUID。如果发现有UUID不一致的情况,则说明问题出在这里。 ### 3. **修复/etc/fstab中的UUID** - 如果发现`/etc/fstab`中的UUID错误,我们需要将其修改为正确的UUID。 - 使用文本编辑器(如`nano`或`vi`)打开`/etc/fstab`文件: ```bash sudo nano /etc/fstab ``` - 将错误的UUID替换为正确的UUID(可以通过`blkid`命令获取)。 - 保存文件并退出。 ### 4. **更新initramfs(初始化内存文件系统)** - 有时,即使修改了`/etc/fstab`,系统启动时仍然可能因为initramfs中缓存了旧的UUID信息而失败。因此,我们需要更新initramfs: ```bash sudo update-initramfs -u ``` - 这个命令会重新生成initramfs,确保其中包含最新的分区UUID信息。 ### 5. **检查GRUB配置** - 如果系统使用GRUB引导,还需要检查GRUB配置文件中的UUID是否正确。 - 查看GRUB配置文件`/boot/grub/grub.cfg`,但注意不要直接编辑这个文件,因为它是由脚本生成的。 - 我们需要编辑`/etc/default/grub`文件,并确保其中没有指定错误的根分区(如果有设置`GRUB_DEVICE_UUID`等参数)。 - 然后更新GRUB配置: ```bash sudo update-grub ``` ### 6. **重新安装GRUB(可选)** - 如果上述步骤无效,特别是在磁盘顺序改变或磁盘更换的情况下,可能需要重新安装GRUB: ```bash sudo grub-install /dev/sdX # 将X替换为你的启动硬盘,如sda sudo update-grub ``` ### 7. **检查磁盘分区变化** - 如果硬盘分区结构发生变化(例如分区被删除或重新分区),可能会导致UUID引用失效。确保分区存在并且UUID正确。 - 如果硬盘被替换,新硬盘UUID会不同,此时需要更新所有引用旧UUID的地方。 ### 8. **使用设备名代替UUID(临时解决方案)** - 如果问题紧急且暂时无法确定正确UUID,可以在`/etc/fstab`中使用设备名(如`/dev/sda1`)代替UUID。但这种方法不推荐,因为设备名可能在系统重启后改变(如添加新硬盘时)。 ### 9. **重新生成UUID(不推荐)** - 如果分区UUID确实需要修改(例如分区被克隆导致重复),可以使用`tune2fs`(用于ext文件系统)或`xfs_admin`(用于XFS)等工具重新生成UUID。但请注意,修改UUID后,所有引用该UUID的地方都需要更新,否则系统将无法启动。 ```bash # 对于ext2/3/4文件系统 sudo tune2fs /dev/sdXY -U random ``` ```bash # 对于XFS文件系统 sudo xfs_admin -U generate /dev/sdXY ``` - **注意:修改UUID是一个高风险操作,务必先备份重要数据。** ### 10. **恢复备份** - 如果之前有备份`/etc/fstab`文件或其他配置文件,可以恢复备份。 ### 总结流程 1. 使用Live USB启动(如果无法进入系统)。 2. 挂载原系统的根分区其他必要分区。 3. 检查并修正`/etc/fstab`中的UUID。 4. 更新initramfs(在chroot环境下)。 5. 更新GRUB配置(在chroot环境下)。 6. 重启系统。 §§相关问题§§ 1. 如何在Linux中查看修改硬盘UUID? 2. 使用设备名UUID在`/etc/fstab`中挂载分区有何区别? 3. 如何在系统无法启动时修复`/etc/fstab`错误? 4. 如何备份恢复Linux系统的分区表? </think>### 解决Linux系统硬盘启动时UUID不匹配问题 当Linux系统启动时出现UUID不匹配错误,通常是由于硬件变更、克隆虚拟机或分区表修改导致。以下是系统性的解决方法: --- #### 1. **确认UUID冲突** ```bash sudo blkid # 显示所有磁盘的UUID sudo lsblk -o NAME,UUID,MOUNTPOINT # 查看挂载点对应关系 ``` - 对比`/etc/fstab`中的UUID与当前实际UUID: ```bash cat /etc/fstab | grep UUID ``` - **典型错误**:`mount: /dev/sda1: can't find UUID=xxxx-xxxx` --- #### 2. **临时跳过挂载** - 在GRUB启动界面按`e`编辑内核参数: ``` rd.break # 或 init=/bin/bash ``` - 挂载根分区并编辑配置: ```bash mount -o remount,rw /sysroot chroot /sysroot ``` --- #### 3. **永久修复方案** **方案A:更新/etc/fstab** ```bash nano /etc/fstab # 将错误UUID替换为blkid显示的正确值 ``` **示例修正**: ```ini # 修改前 UUID=5e7e-48c3 /boot ext4 defaults 0 2 # 修改后(使用实际UUIDUUID=3b7d-41a2 /boot ext4 defaults 0 2 ``` **方案B:更新initramfs** ```bash sudo update-initramfs -u # 重建初始内存盘 ``` **方案C:修复GRUB(UEFI系统)** ```bash sudo grub-install /dev/sda sudo update-grub ``` --- #### 4. **虚拟机克隆修复** - 对于VMware克隆机(参考引用[^1]): ```vim # 在.vmx配置文件中添加 uuid.action = "keep" disk.EnableUUID = "TRUE" ``` - 重新生成UUID: ```bash sudo tune2fs /dev/sda1 -U random # ext2/3/4文件系统 sudo xfs_admin -U generate /dev/sdb1 # XFS文件系统 ``` --- #### 5. **预防措施** ```bash # 使用LABEL替代UUID(避免硬件变更影响) sudo e2label /dev/sda1 ROOTFS # 设置ext4标签 ``` `/etc/fstab`示例: ```ini LABEL=ROOTFS / ext4 defaults 0 1 ``` --- > **重要提示**:操作前备份关键文件: > ```bash > cp /etc/fstab /etc/fstab.bak > cp -r /boot /boot_backup > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值