Kevin's Blog - 2020年10月
type: channel
link: https://jamasoft.cn/2020/10/
description: Talk is cheap. Show me the code.
items: 树莓派安装双系统

树莓派安装双系统
type: item
date: 2020-10-29T08:24:00+08:00
description: 玩树莓派的小伙伴可能遇到这样的烦恼，手里只有一张卡或者一块ssd，但是又想体验不同的系统，无奈只能重复的刷系统，可以说相当麻烦了，今天就说一说树莓派如何安装双系统。数据无价，本教程的操作有一定的风险，开始前请备份重要数据！！！前言树莓派官方提供的NOOBS是可以实现多系统安装的，但是也存在一定的弊端，NOOBS本省会占用一定的空间造成空间浪费，系统都是从国外服务器在线下载，速度可想而知，而且需要显示器(从2015年开始玩pi的我到现在也没有显示器，穷啊)，最主要的还是不符合玩家折腾的精神，所以我们不使用NOOBS，我们自己实现一个不需要显示器的双系统。材料准备树莓派4bSD卡一张(16G或以上)，或硬盘一块母-母杜邦线一条Linux操作系统(推荐Ubuntu)，或者直接使用树莓派本身SD卡或者USB都可以做双系统，我这里使用一张64G卡，操作系统我直接使用树莓派，如果你只有一张卡，那只能使用电脑或者虚拟机了。安装我选择的两个系统是官方系统和基地2.0，可以根据自己的需求更换。0x00.准备工作打开终端#切换到root sudo -i #更新系统软件 apt update apt upgrade apt install dosfstools kpartx rsync #创建工作目录 mkdir dualboot cd dualboot #创建挂载目录 mkdir boot root osimg #上传两个要安装的系统镜像到这个目录 #2020-08-20-raspios-buster-armhf.img #2020-06-22-OPENFANS-Debian-Buster-Desktop-Aarch64-ext4-v2020-2.0-U4-Release.img0x01.分区插卡，对介质进行分区和格式化查看设备lsblk我这里设备名称是sda，根据自己情况替换#分区 cfdisk /dev/sda删除原有所有分区创建三个分区，一个boot分区(fat32)512M，两个系统分区(ext4)创建boot分区创建第一个系统分区，我这里设置30G，大家根据自己需求设置第二个系统分区创建同上将改变写入磁盘按q退出cfdisk，检查磁盘分区lsblk格式化，注意替换自己的设备名称：#格式化boot分区 mkfs.fat -F 32 -n "boot" /dev/sda1 #格式化第一个系统分区，设置label mkfs.ext4 -L rootfs1 /dev/sda2 #格式化第二个系统分区，设置label mkfs.ext4 -L rootfs2 /dev/sda3挂载boot分区mount /dev/sda1 boot/ #创建两个系统的boot目录 mkdir boot/{os1,os2}0x02.安装OS1OS1安装官方系统#挂载OS1的分区 mount /dev/sda2 root/ #挂载系统镜像 losetup -f --show 2020-08-20-raspios-buster-armhf.img我这里是/dev/loop0，你的结果可能跟我不一样，在下面的命令中请将这个值替换为自己的结果。#挂载镜像文件两个分区设备 kpartx -va /dev/loop0 mount /dev/mapper/loop0p2 osimg/ mount /dev/mapper/loop0p1 osimg/boot/ #拷贝OS1的boot目录 cp -a osimg/boot/* boot/os1/ umount osimg/boot/ #同步rootfs rsync -axv osimg/ root/ mkdir root/bootpar sed -i "s/\(PARTUUID=\)[[:xdigit:]-]\+\([[:blank:]]*\)\/boot/\1$(blkid -o value -s PARTUUID /dev/sda1)\2\/bootpar/" root/etc/fstab sed -i "s/\(PARTUUID=\)[[:xdigit:]-]\+\([[:blank:]]*\/[[:blank:]]\+\)/\1$(blkid -o value -s PARTUUID /dev/sda2)\2/" root/etc/fstab echo -e "/bootpar/os1 /boot none bind 0 0\n" >> root/etc/fstab sed -i "s/\(PARTUUID=\)[[:xdigit:]-]\+/\1$(blkid -o value -s PARTUUID /dev/sda2)/" boot/os1/cmdline.txt #禁止自动扩容 sed -i 's/init=\/u…