记录——树莓派4B通过SD卡辅助USB引导系统

记录——树莓派4B通过SD卡辅助USB引导系统

前言

一个多月以前,我入手了一个树莓派4b(4g版)。当时买来主要是打算放在寝室,跑一个linux环境,以及干一些其他的事儿。如果你之前看过我的其他几篇文章一定知道,我还有一个树莓派3B+,但是当时受限于1G的内存,我后来把他转给了一位东南大学的大叔搞安卓开发(偶然认识的)。

废话不多说,切入正题。

我在树莓派3b+的时候,没有用到Micro SD卡,因为当时的树莓派3b+社区有完整的usb引导方案,相比于sd卡的速度,usb3.0的速度他不比class xxx香吗?但是树莓派4b却不能做到真正的USB引导 . 我在爬贴和多重Google Bing后,找到了可以一种还能用的解决办法.

那就是通过Micro SD卡的boot引导USB设备上的rootfs,具体方法如下:

USB启动说明

  1. 准备一张SD卡(最好是Class 10):用最新的Raspberry Buster版本给SD卡烧录镜像,需要注意的一点在于,如果你烧录的不是桌面版,你需要在烧好的SD卡里面添加一个ssh文件(另行百度).

  2. 准备SSD/闪存盘:将你的SSD/U盘也烧录好同样的系统,操作步骤如上一样.

  3. 引导树莓派:插入烧录好的SD卡和U盘,然后上电开机,此时没有必要完成Get Start的配置项,当然,你可以完成.

  4. 更新源:建议更新为TUNA源.

  5. 运行sudo blkid: 通过这个命令,我们可以看到挂载的SD卡和U盘/闪存盘.

  6. 分别找到驱动器:通常情况下,blkid命令下的表单会包含 /dev/mmcblk0p*以及/dev/sda*,这时,我们需要记录下SSD/闪存盘下的rootfs文件系统的PARTUUID.

    如例子:/dev/sda2: LABEL=”rootfs” UUID=”43f2d0bb-83be-464f-94d0-9a751f376c64” TYPE=”ext4” PARTUUID=”3b18e43a-02”

  7. 编辑/boot/cmdline.txt:

    1
    sudo nano /boot/cmdline.txt

    将里面的PARTUUID修改成上面记录的那个(如:3b18e43a-02)

  8. 重启.

  9. 更新fstab:

    1
    2
    3
    4
    5
    6
    7
    首先:
    sudo lsblk -o name,label,partuuid
    找到mmcblk0里面,label为boot对应的partuuid.
    然后新开一个控制台:
    sudo nano /etc/fstab
    找到 /boot 字段前面对应的那个partuuid,并用上一步的SD卡的boot对应的partuuid替换!
    然后Ctrl+X,并回车保存.
  10. 重启.

  11. 调整文件系统的大小:

    首次启动时,无论驱动器的大小多大,根文件系统分区的大小都只会占用一部分.这时候就需要我们进行扩容.

    于是,我们用fdisk进行扩容操作.

    特别注意的是:在fdisk中,你可以在任何地方输入q推出fdisk,并且q以前的所有修改都无效!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [email protected]:~ $ sudo fdisk /dev/sda

    Welcome to fdisk (util-linux 2.33.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    Command (m for help): p

    Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
    Disk model: 2115
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 33553920 bytes
    Disklabel type: dos
    Disk identifier: 0x0634f60c
    Device Boot Start End Sectors Size Id Type
    /dev/sda1 8192 532480 524289 256M c W95 FAT32 (LBA)
    /dev/sda2 540672 4292607 3751936 1.8G 83 Linux

    在如上信息中,我们需要记录下/dev/sda2 的起始地址,如上示例中就是540672.接下来,我们需要删除并重新创建更大的分区.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Command (m for help): d
    Partition number (1,2, default 2): 2
    Partition 2 has been deleted.
    Command (m for help): n
    Partition type
    p primary (1 primary, 0 extended, 3 free)
    e extended (container for logical partitions)
    Select (default p): p
    Partition number (2-4, default 2): 2
    First sector (532481-500118191, default 589815): 540672 (必须输入上面记录的那个起始地址)
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (540672-500118191, default 500118191): #(默认回车选择整块驱动器)
    Created a new partition 2 of type 'Linux' and of size 238.2 GiB.
    Partition #2 contains a ext4 signature.
    Do you want to remove the signature? [Y]es/[N]o: n (选择否)

    如果上述操作,你确定没有问题了以后,你就可以输入”w”,将修改写入磁盘.否则的话,请输入”q”退出.

    1
    2
    3
    4
    5
    6
    7
    最后一步:
    sudo resize2fs /dev/sda2
    稍等一下,有如下信息:
    resize2fs 1.44.5 (15-Dec-2018)
    Filesystem at /dev/sda2 is mounted on /; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 15
    The filesystem on /dev/sda2 is now 62447190 (4k) blocks long.
  12. 重启.重启以后,你可以用以下命令查看磁盘情况:

    1
    df -h
  1. 更新树莓派:

    1
    sudo apt-get update && sudo apt-get dist-upgrade

完成!

您的系统现在将完全通过USB驱动器运行!要验证这一点,请运行命令“ findmnt -n -o SOURCE” /以确保根分区已如下所示切换到/ dev / sda2而不是/ dev / mmcblk0p2。

结语

因为树莓派支持USB3.0(蓝口),所以我宁愿如上操作一番以换取更快的IO,而不用去忍受SD卡的龟速,以及受USB2.0的支配.虽然,这种方法损失了一个Class 10的SD卡,但是,对我而言,这是值得的!

又不是不能用!

思考

我是否可以放弃双系统,转回Windows,在windows下用JetBrain家族或者VSCode的remote插件,搭建编译环境,不用苦恼任何windows下的编程问题.亦或者,试用一下WSL2,Debain的raspberry就暂时放在一边儿.hhhhh~