从grub修复到U盘分区

手贱,折腾多系统时误删了grub,导致ubuntu无法进入,网上搜了大把grub修复文章,都是使用光盘liveCD进行修复。好吧我承认我太懒不想刻光盘找光驱拆机箱装光驱。所以想拿手上的“一键GHOST优盘版”来完成这个神圣的使命,但是正如大家知道的,一键GHOST并没有如愿加载我的Ubuntu镜像,出现“UNABLE to find a medium containing a live file system”就不动了,真的是因为优盘格式是NTFS而非ext4所致吗,果断放弃。使用UltraISO重新制作优盘系统,成功。

一.使用UltraISO制作Ubuntu的Live-USB系统镜像。

1、首先用UltraISO打开你的ubuntu.iso镜像

2、插入你的usb设备,如果你打算制作CD的镜像需要1GB的U盘,如果是DVD的就要更大的了,反正要装的下。然后“启动—写入硬盘镜像...”

3、设置;如图所示,请选择好你的U盘,之前请备份你的文件,“写入方式”选择“USB-ZIP+”

4、如图,“便捷启动”设置“写入新的硬盘主引导记录(MBR)-USB-ZIP+”他会问你是否确定,你点击确定就ok了

二.修复grub

用Live USB启动Ubuntu试用后,打开终端。

sudo fdisk -l 查看Ubuntu安装在哪个分区

sudo mount /dev/sda8 /mnt

grub-install --root-directory=/mnt  /dev/sda

sudo update-grub

三.一个U盘既想使用“一键GHOST”又想使用Live-USB的时候,需要进行U盘分区。读卡器+T卡的不用尝试了,没有主控的量产工具。

简单的说就是先用“芯片精灵”查出主控芯片的厂商,然后寻找该厂商的量产软件即可。

<think>我们有两个目标:1. 备份当前系统的GRUB到U;2. 配置U能够启动GRUB并引导系统。 根据引用内容,我们可以利用GRUB4DOS或直接使用GRUB来制作启动U。但是用户的需求是备份GRUB到U并实现从U启动,所以我们需要: 步骤1:备份当前GRUB配置和必要的文件到U。 步骤2:在U上安装GRUB引导程序,并配置其能够引导原系统。 注意:引用[1]提到了一键ghost中集成了grub4dos,但用户希望备份自己的GRUB,所以这里我们使用原系统的GRUB来安装到U。 具体步骤: 1. 准备U - 插入U,确定设备标识(如/dev/sdb),使用`lsblk`或`sudo fdisk -l`查看。 - 注意:操作U会清除数据,请先备份U重要数据。 2. 分区并格式化U(如果U已有分区且为FAT32,可跳过格式化,但需确保有可引导标志) - 建议使用一个FAT32分区,因为兼容性好。 3. 在U上安装GRUB - 挂载U,假设挂载到/mnt/usb - 安装GRUB到U的MBR和分区引导记录(PBR) 4. 复制当前GRUB配置和内核镜像等必要文件到U - 包括grub.cfg、内核vmlinuz和initrd.img等 5. 配置Ugrub.cfg,使其能够引导原系统 详细步骤: ### 步骤1:识别U设备 假设U为/dev/sdb,分区为/dev/sdb1(通常情况) ### 步骤2:格式化并设置分区(可选) 如果U已经有一个FAT32分区并设置了可引导标志,可以跳过此步。 否则: ```bash sudo umount /dev/sdb* # 卸载U所有分区 sudo fdisk /dev/sdb # 进行分区操作 # 在fdisk中:删除原有分区(d),新建分区(n),类型设为W95 FAT32 (LBA)(t,选择c),设置可引导标志(a),然后写入(w) sudo mkfs.vfat -F32 /dev/sdb1 # 格式化为FAT32 ``` ### 步骤3:挂载U ```bash sudo mkdir -p /mnt/usb sudo mount /dev/sdb1 /mnt/usb ``` ### 步骤4:在U上安装GRUB 有两种方式:安装到MBR和安装到分区(PBR)。这里我们安装到整个磁的MBR和分区的PBR。 先安装必要的GRUB文件到U: ```bash sudo grub-install --target=i386-pc --recheck --boot-directory=/mnt/usb/boot /dev/sdb ``` 说明: - `--target=i386-pc`:针对传统BIOS模式 - `--boot-directory=/mnt/usb/boot`:指定UGRUB文件的存放目录 - `/dev/sdb`:安装到整个U的MBR 如果是UEFI系统,还需要安装UEFI版本的GRUB(这里我们同时考虑,因为有些U需要在两种模式下启动): ```bash sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usb --removable --boot-directory=/mnt/usb/boot ``` 注意:UEFI安装要求U是FAT32格式,并且挂载点为`/mnt/usb`。 ### 步骤5:备份当前GRUB配置和内核文件到U 创建必要的目录: ```bash sudo mkdir -p /mnt/usb/boot/grub sudo mkdir -p /mnt/usb/boot/kernel ``` 备份GRUB配置文件: ```bash sudo cp -v /boot/grub/grub.cfg /mnt/usb/boot/grub/ ``` 备份当前内核和initrd镜像(注意:这些文件可能在每次内核更新后改变,所以备份时最好用当前使用的版本): 首先,确定当前使用的内核版本: ```bash uname -r ``` 然后,复制对应的文件: ```bash sudo cp -v /boot/vmlinuz-$(uname -r) /mnt/usb/boot/kernel/ sudo cp -v /boot/initrd.img-$(uname -r) /mnt/usb/boot/kernel/ ``` 同时,我们也可以备份整个/boot/grub目录和/etc/default/grub文件,以便恢复: ```bash sudo cp -r /boot/grub /mnt/usb/backup_grub sudo cp /etc/default/grub /mnt/usb/backup_grub/ ``` ### 步骤6:配置Ugrub.cfg 编辑U上的grub.cfg,使其能够引导原系统: ```bash sudo nano /mnt/usb/boot/grub/grub.cfg ``` 内容示例(假设原系统根分区在/dev/sda2,根据实际情况修改): ``` menuentry "Boot from HDD (Kylin)" { insmod ext2 set root=(hd0,2) # 注意:这里的hd0是指U启动后识别的第一块硬,不一定是原系统硬 # 但是,在启动过程中,原系统硬可能被识别为hd1,所以需要尝试 # 我们可以通过搜索文件来确定 search --file --set=root /boot/grub/grub.cfg configfile /boot/grub/grub.cfg } menuentry "Boot from USB (Kylin Backup)" { insmod ext2 set root=(hd0,msdos1) # 假设U分区是第一个分区,格式为FAT32,这里用msdos1表示MBR分区表下的第一个分区 linux /boot/kernel/vmlinuz-$(uname -r) root=/dev/sda2 ro # 根分区设为/dev/sda2,根据实际情况修改 initrd /boot/kernel/initrd.img-$(uname -r) } ``` 注意:上面的第一个菜单项尝试从硬启动,第二个菜单项直接从U加载内核启动原系统。 但是,由于硬件识别顺序问题,硬可能不是hd0,所以我们可以使用`search`命令来查找原系统的根分区(假设原系统根分区有一个文件`/etc/os-release`): ``` menuentry "Boot Kylin from HDD" { search --set=root --file /etc/os-release configfile /boot/grub/grub.cfg } ``` 或者,如果我们希望直接引导原系统的grub.cfg,可以这样写: ``` menuentry "Boot Kylin from HDD" { # 假设原系统根分区是/dev/sda2,挂载到/mnt set root=(hd0,msdos2) # 这里hd0是第一块硬,msdos2表示第二个分区(MBR分区表) configfile /boot/grub/grub.cfg } ``` 但是,由于U启动后,原系统硬可能会变成hd0(如果U被识别为hd0,则原系统硬为hd1),所以需要根据实际情况调整。 更通用的方法:使用UUID来指定分区(推荐): 首先获取原系统根分区的UUID: ```bash sudo blkid /dev/sda2 ``` 然后,在grub.cfg中使用: ``` menuentry "Boot Kylin from HDD" { search --no-floppy --fs-uuid --set=root <原系统根分区UUID> configfile /boot/grub/grub.cfg } ``` ### 步骤7:卸载U ```bash sudo umount /mnt/usb ``` ### 步骤8:测试 重启电脑,从U启动,检查是否出现GRUB菜单,并测试能否引导原系统。 注意事项: - 如果原系统是UEFI模式安装的,那么U也需要以UEFI模式启动,并且安装GRUB时也要安装UEFI版本。 - 备份的内核和initrd镜像可能在新硬件上启动有问题,所以最好定期更新备份。 相关问题: 1. 如何从U启动修复原系统的GRUB? 2. 如何使U同时支持BIOS和UEFI启动? 3. 如何更新U上的GRUB配置和内核镜像? 4. 当原系统内核更新后,如何同步到U备份? 根据引用[4]提到的,对于不支持的操作系统(如Windows)可以使用chainload,所以如果用户需要引导Windows,可以在Ugrub.cfg中添加: ``` menuentry "Windows" { insmod ntfs insmod chain set root=(hd0,1) # 假设Windows安装在第一块硬的第一个分区 chainloader +1 } ``` 以上步骤完成了GRUB的备份和U启动配置。</think>### 备份GRUB到U并配置U启动的完整指南 #### 一、准备工作 1. **识别U设备** ```bash sudo fdisk -l # 查看U设备标识(如/dev/sdb) lsblk -f # 确认分区格式(推荐FAT32) ``` 2. **格式化U**(可选) ```bash sudo umount /dev/sdb1 sudo mkfs.vfat -F32 /dev/sdb1 # 格式化为FAT32 ``` #### 二、备份GRUB核心文件 ```bash sudo mkdir /mnt/usb sudo mount /dev/sdb1 /mnt/usb # 备份GRUB配置文件 sudo cp -r /boot/grub /mnt/usb/grub_backup sudo cp /etc/default/grub /mnt/usb/grub_default.bak # 备份内核和初始化镜像 sudo mkdir /mnt/usb/kernels sudo cp /boot/vmlinuz-$(uname -r) /mnt/usb/kernels/ sudo cp /boot/initrd.img-$(uname -r) /mnt/usb/kernels/ ``` #### 三、安装GRUB到U 1. **安装引导程序** ```bash sudo grub-install --target=i386-pc --boot-directory=/mnt/usb/boot /dev/sdb ``` - `--target=i386-pc`:传统BIOS模式 - `--boot-directory`:指定U引导目录[^2] 2. **创建UEFI支持**(双保险) ```bash sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usb --removable ``` #### 四、配置U启动菜单 创建 `/mnt/usb/boot/grub/grub.cfg`: ```bash menuentry "启动主硬系统" { insmod ext2 search --set=root --file /boot/grub/grub.cfg configfile /boot/grub/grub.cfg } menuentry "从U启动应急系统" { linux /kernels/vmlinuz-$(uname -r) root=/dev/sda2 ro initrd /kernels/initrd.img-$(uname -r) } menuentry "启动Windows系统" { insmod ntfs set root=(hd0,1) # 修改为Windows分区 chainloader +1 # 链式加载Windows引导[^4] } ``` #### 五、添加实用工具 1. **备份分区表** ```bash sudo sfdisk -d /dev/sda > /mnt/usb/partition_table.bak ``` 2. **创建恢复脚本** ```bash echo '#!/bin/bash sudo grub-install /dev/sda sudo update-grub' > /mnt/usb/restore_grub.sh chmod +x /mnt/usb/restore_grub.sh ``` #### 六、验证与卸载 ```bash # 检查文件结构 tree /mnt/usb -L 3 # 安全卸载 sudo umount /mnt/usb sudo eject /dev/sdb ``` ### 启动测试说明 1. **BIOS设置**: - 开机按F12/Del进入启动菜单 - 选择U启动项(USB-HDD或UEFI:USB) 2. **故障排除**: - 若卡在`grub>`提示符,手动加载: ```grub configfile (hd1,msdos1)/boot/grub/grub.cfg ``` - 使用`ls`命令查看分区结构[^1] ### 关键技术点 1. **双重引导支持**: - 传统BIOS使用`grub-install --target=i386-pc` - UEFI使用`grub-install --target=x86_64-efi`[^2] 2. **链式加载原理**: ```grub chainloader +1 # 加载分区的第一个扇区 ``` 用于引导Windows等非Linux系统[^4] 3. **动态根分区定位**: ```grub search --set=root --file /boot/grub/grub.cfg ``` 自动定位系统分区,避免硬件变动导致失效 ### 常见问题解决 **Q:U启动后找不到系统分区?** A:在GRUB命令行中重新扫描设备: ```grub grub> ls # 列出所有设备 grub> ls (hd1,gpt2)/boot # 测试分区内容 grub> set root=(hd1,gpt2) grub> configfile /boot/grub/grub.cfg ``` **Q:如何更新UGRUB配置?** ```bash sudo mount /dev/sdb1 /mnt/usb sudo cp /boot/grub/grub.cfg /mnt/usb/boot/grub/ sudo umount /mnt/usb ``` ### 相关问题 1. 如何修复因Windows安装导致的GRUB丢失? 2. UEFI和BIOS双模式下GRUB配置有何差异? 3. 如何从GRUB命令行手动引导Linux系统? 4. GRUB链式加载原理及其在双系统中的应用? > **重要提示**:定期更新U内的内核文件(特别是系统内核升级后),可通过`sudo cp /boot/vmlinuz-* /mnt/usb/kernels/`同步[^3]。 [^1]: U启动进入GRUB命令行时的故障排除 [^2]: GRUB在不同启动模式下的安装方法 [^3]: 内核文件与GRUB引导的关系 [^4]: 使用chainload引导非Linux系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值