ubuntu下如何在从盘创建启动分区并重启从该从盘引导(UEFI启动)?


Step1:


使用 tar 备份根目录和EFI 分区(仅需做一次,假定当前linux根目录在sda2, EFI 分区在sda1, 无其他分区)

tar --exclude /boot/efi  -cvpf ~/boot.tar /boot


Step2:

 在当前unbutu环境下,对从盘建立分区表; 假定目标从盘为/dev/nvme1n1

Sudo parted /dev/nvme1n1 mklabel gpt


Step3:

 在当前unbutu环境下,对从盘建立一个分区,并设置为ESP分区; 假定目标从盘为/dev/nvme1n1

Sudo parted /dev/nvme1n1 mkpart primary 1M 100%

Sudo parted /dev/nvme1n1 set 1 esp on



Step4:

 在当前unbutu环境下,将启动img写入从盘的ESP分区; 假定目标从盘ESP分区为/dev/nvme1n1p1; (注意:dd命令会把文件系统的UUID也拷贝了,可能会造成困扰)

Sudo dd if=~/sda1.img of=/dev/nvme1n1p1


使用sudo blkid查看uuid, 进一步的,可以修改重复uuid

uuidgen | xargs tune2fs /dev/nvme1n1p1 -U


Sudo tar -xvf  ~/boot.tar -C /mnt/disk_new2


Step5:

 在当前ubuntu环境下,使用efibootmgr查看和添加启动项

5.1查看: efibootmgr -v

可以看出当前启动项的编号,以及各启动项所在的分区,分区UUID,和启动文件. ubuntu系统启动文件为\EFI\UBUNTU\SHIMX64.EFI


5.2 创建启动项

efibootmgr -c -d /dev/nvme1n1 -p 1 -L "new" -l '\efi\ubuntu\shimx64.efi'


Step6:

更新grub

# 挂载新分区的efi /

mount /dev/sdc3 /mnt

mount /dev/sdc1 /mnt/boot/efi

# 挂在虚拟文件系统

mount --o bind /dev  /mnt/dev

mount --o bind /proc  /mnt/proc

mount --o bind /sys  /mnt/sys

# 切换根目录为新分区的/

chroot /mnt

# 修改对应uuid

nano /etc/fstab

nano /boot/grub/grub.cfg

在grub.cfg中只会出现根分区的uuid,所以直接用“ctrl+\”找出所有表中原根目录uuid的地方替换为新根目录uuid。

替换全部A,ctrl+x,回车

# grub安装到efi分区

grub-install /dev/sdc1

Installing for x86_64-efi platform.

Installation finished. No error reported.

#更新grub

update-grub

Sourcing file `/etc/default/grub'

Generating grub configuration file ...

Found linux image: /boot/vmlinuz-5.4.0-49-generic

Found initrd image: /boot/initrd.img-5.4.0-49-generic

Found linux image: /boot/vmlinuz-5.4.0-48-generic

Found initrd image: /boot/initrd.img-5.4.0-48-generic

Found Ubuntu 18.04.5 LTS (18.04) on /dev/sda7

Adding boot menu entry for EFI firmware configuration

done

# 同步

sync

# 退出根目录

exit

# 取消挂载

umount /mnt/dev

umount /mnt/sys

umount /mnt/proc

umount /media/ubuntu/*

umount /mnt/boot/efi

# 退出root

exit

# 重启,屏幕无信号后拔出U盘

reboot

来自 <https://pabebezz.github.io/article/2f7fc36c/>

-------------------------------------------------------------------------------------------------------------------------------------------

$ sudo mount --bind /dev /mnt/dev

$ sudo mount --bind /run /mnt/run

 $ sudo chroot /mnt/

 $ sudo mount --types=proc proc /proc

 $ sudo mount --types=sysfs sys /sys

来自 <https://blog.shell909090.org/blog/archives/2881/>

-------------------------------------------------------------------------------------------------------------------------------------------

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done

来自 <https://help.ubuntu.com/community/Grub2/Installing>

-------------------------------------------------------------------------------------------------------------------------------------------

复制MBR

dd if=/dev/sdc of=/tmp/mbr.bin bs=446 count=1



watch -n 1 pkill -USR1 -x dd


sudo update-initramfs -u 


来自 <https://jiajunhuang.com/articles/2020_05_22-linux_clone_sys.md.html>

-------------------------------------------------------------------------------------------------------------------------------------------

Step6:

 使用命令重启, 重启后应该就是从指定的盘引导了

shutdown -r now

-------------------------------------------------------------------------------------------------------------------------------------------


linux不需要全盘拷贝,tar, cpio, rsync可以搞定一切。最后更新grub, lilo, syslinux就可以了。


来自 <https://groups.google.com/g/shlug/c/lQL3dKtWszo>

-------------------------------------------------------------------------------------------------------------------------------------------

 哪些 Linux 数据具有备份的意义:


• /etc/ 整个目录      -->“帐号与系统配置文件

• /home/ 整个目录    -->使用者主文件夹

• /var/spool/mail/    -->邮件

• /var/spoll/{at|cron}/    -->定时任务

• /boot/                    -->linux核心

• /root/                -->管理员主目录

² 如果你自行安装过其他的软件,那么 /usr/local/ 或 /opt 也最好备份一下!

• /usr/local/              -->用于自我,内部,编译和维护的软件

• /opt                   -->用于非自我,外部,预打包的二进制/应用程序捆绑包安装区域

-------------------------------------------------------------------------------------------------------------------------------------------


备份

tar cvp --exclude=/boot/efi/* --exclude=/proc/* --exclude=/lost+found/* --exclude=/mnt/* --exclude=/sys/* --exclude=/home/*  -f ~/system_backup.tar /

恢复

tar xvpf ~/system_backup.tar -C /


mkdir proc

mkdir lost+found

mkdir mnt

mkdir sys


修改/etc/fstab


来自 <https://zhuanlan.zhihu.com/p/335035901>

-------------------------------------------------------------------------------------------------------------------------------------------

Grub2 命令行操作:



• Grub>ls                         列出磁盘和分区,输出示例:(proc) (memd **isk) (hd0) (hd0,gpt2) (hd0,gpt1) (hd1,gpt2) (hd2,gpt1)

• Grub>ls (hd2,2) 或者ls(hd2,gpt2)      显示hd2第二分区信息,输出示例:partition hd2,2: Filesystem type ext* -Last moficication time ****, UUID **** -Partition start at ***KiB -Total Size ***KiB

• Grub>ls(hd2,2)/ 或者ls(hd2,gpt2)      列出hd2第二分区的目录,输出示例: lost+found/ boot/

• Grub>root=(hd2,2)                设置根目录为 hd2第二分区

• Grub>ls -l /boot/                   显示根目录下的boot文件夹详细信息

• Grub> linux /boot/vmlinuz-2.6.31-9-386 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3

• Grub> initrd /boot/initrd.img-2.6.31-9-386

• Grub> boot

-------------------------------------------------------------------------------------------------------------------------------------------


rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found", "/backup"} --delete / /backup

 mount -o remount,ro /tmp

-------------------------------------------------------------------------------------------------------------------------------------------

 Failed to start Process error reports when automatic reporting is enabled

sudo nano /etc/default/apport

Then change 1 to 0

来自 <https://vitux.com/how-to-disable-enable-automatic-error-reporting-in-ubuntu/>

-------------------------------------------------------------------------------------------------------------------------------------------

登陆窗口不可见:

• You can get to a text terminal using alt-ctrl-F1.

• Check the LightDM logs in /var/log/lightdm.

来自 <https://wiki.ubuntu.com/LightDM>


edit the /etc/X11/default-display-manager file and set the new display manager.

来自 <https://tecadmin.net/switching-display-manager-in-ubuntu-gdm-lightdm-sddm/>

-------------------------------------------------------------------------------------------------------------------------------------------

无法找到/home/用户名的处理方法: 复制~/.pam_environment