Linux修复引导
# 1.查看系统下的所有硬盘及分区情况
sudo fdisk -l
# /dev/sdc 是我们的新硬盘,并且没有做分区和格式化
# 2.新盘分区 创建3个分区(2个也可以,boot可以在根目录下)
sudo fdisk /dev/sdc
# 1.n p 1 2048 1026048 设置500M的boot分区
# 2.n p 2 1028096 69158912 设置32G 的swap
# 3.n p 3 剩余的是根目录 /
# 4.w 保存并退出
# 如果磁盘为4T,用fdisk只能分2T的空间,我们需要用
parted /dev/sdb
# 2.1 将磁盘格式变成gpt的格式(因为parted只能针对gpt格式的磁盘进行操作)
转换:(parted) mklabel gpt
分区:(parted) mkpart primary 1 500 (分第一个主分区500MB)
分区:(parted) mkpart primary 501 1000 (分第二个主分区500MB)
分区:(parted) mkpart logical 1001 2000 (分第三个逻辑分区1000MB)
(parted的逻辑分区不用先分扩展分区,直接一步到位)
查看:(parted) p
退出:(parted)quit ( parted分区自动保存,不用手动保存 )
# 3.格式化3个分区 第二个为swap
mkfs -t ext4 /dev/sdc1
sudo mkswap /dev/sdc2
mkfs -t ext4 /dev/sdc3
# /dev/sdc3挂载到 mnt/
sudo mount /dev/sdc3 mnt/
# 4.复制整个系统到新分区(可以排除一些不需要的文件)
# /proc 运行内核和环境的虚拟化视图 kcore很大
# /mnt临时挂载目录 /tmp临时文件
cd /mnt/
sudo rsync -av --exclude='/mnt' --exclude='/tmp' --exclude='/sys' \
--exclude='/lost+found' --exclude='/proc' / /mnt
# 或者用tar 备份系统 -
# https://blog.csdn.net/whatnamecaniuse/article/details/60754546
tar zcvpf /backups/fullbackup.tar.gz / --exclude=proc --exclude=/lost+found \
--exclude=sys --exclude=dev/pts --exclude=tmp --exclude=backups
#tar xvpfz backup.tgz -C /
# 5. /mnt/etc/fstab 修改UUID
sudo gedit /mnt/etc/fstab
sudo gedit /mnt/boot/grub/grub.cfg
# 查看 sdc 的UUID
sudo blkid
/dev/sdc1: UUID="7612775b-4899-470d-a57b-9fb6ce75481f" TYPE="ext4"
/dev/sdc2: UUID="8b3a8fb7-439f-45cf-9bdc-192e45964b8b" TYPE="swap"
/dev/sdc3: UUID="733414aa-4b61-424c-8aa8-850cec0dc0f3" TYPE="ext4"
# 注意 /mnt/etc/fstab中swap 和跟目录的都需要跟换,其它自动挂载的根据情况删除
# 替换grub.cfg中的 UUID为新盘的UUID
# 6.修复引导
sudo grub-install --boot-directory=/mnt/new/boot/ /dev/sdc
sudo grub-install --recheck --root-directory=(新硬盘/分区挂的boot目录,或者直接是boot) /dev/sdx(新硬盘的设备文件名)
--recheck选项是重新检查系统以覆盖新分区/boot/grub下的device.map文件
#卸载新硬盘,用新盘重启
sudo umount /dev/sdc
查找grub所在的分区,ubuntu没有另外建分区是在/boot/grub
文件夹
# 第一步:输入ls出现(hd0,msods1),(hd0,msdos5),(hd0,msods7)
# 不同的电脑不一样,这是我电脑中的磁盘分区,和系统中的表示方法不一样,
# linux中一般是/dev/sda123 表示,grub一般是 (hd0,msods1)表示
ls
# 第二步:输入set,查看现在电脑的root 和prefix所在的位置
set
# 第三步:查找你的grub目录(当然如果你知道你grub目录在哪里更好)
ls/(hd0,msdos1)
# 再按enter看看有没有boot文件夹,如果没有,就输入ls/(hd0,msdos5)等等,依次类推。
# 第四步:找到boot文件夹在哪里之后,假设在(hd0,msdos7)中,
set root=(hd0,msdos7)
set prefix=(hd0,msdos7)/boot/grub
insmod normal
normal
# 第五步:之后回车之后应该出现启动界面
# 修复grub
sudo update-grub
sudo grub-install /dev/sda
reboot #重启
grub rescue>ls
grub rescue>set root=(hd0,2)
grub rescue>set prefix=(hd0,2)/grub
grub rescue>insmod normal
grub rescue>normal
参考: