分类: Raspi

  • OpenWrt ext4系统下的根分区扩容指南

    以下为本篇文章测试环境,因此仅对部分环境有借鉴意义

    型号Raspberry Pi 4 Model B Rev 1.4
    架构ARMv8 Processor rev 3 (v8l) x 4 (1800Mhz, 48.2°C)
    目标平台bcm27xx/bcm2711
    固件版本ImmortalWrt 24.10.0 r32824-6a73dae98c9c / LuCI openwrt-24.10 branch 25.017.24510~d42ec55
    使用的固件为openwrt-24.10.0-bcm27xx-bcm2711-rpi-4-ext4-factory。非overlay系统

    原理

    首先扩展根分区,然后扩展文件系统
    Expanding root partition(扩展根分区)

    • 这指的是在物理或虚拟存储设备上增加分区的大小
    • 涉及到修改分区表,调整分区的物理边界
    • 使用类似 fdisk、parted 等工具来完成
    • 这是底层的存储空间调整

    Expanding root filesystem(扩展根文件系统)

    • 这指的是调整文件系统本身的大小以使用更大的分区空间
    • 在分区已经扩展后,需要执行此操作才能实际使用新增的空间
    • 使用类似 resize2fs(ext4)、xfs_growfs(XFS)等工具来完成
    • 这是文件系统层面的操作

    简单来说:

    1. 扩展根分区是在存储设备层面增加可用空间
    2. 扩展根文件系统是让文件系统知道并能够使用这些新增的空间

    在 OpenWRT 中,如果要完整地扩展根目录的可用空间,通常需要依次执行这两个步骤。先扩展分区,再扩展文件系统,这样才能真正利用到新增的存储空间。

    准备

    安装对应工具

    首先,需要安装parted resize2fs losetup

    opkg update
    opkg install parted resize2fs lostup

    检查OpenWrt系统固件

    由于我的OpenWrt系统是ext4,因此并没有使用overlay,从命令输出也可以看出来

    root@ImmortalWrt:~# block info
    /dev/mmcblk0p1: UUID="67A3-2229" LABEL="boot" VERSION="FAT16" MOUNT="/boot" TYPE="vfat"
    /dev/mmcblk0p2: UUID="ff313567-e9f1-5a5d-9895-3ba130b4a864" LABEL="rootfs" VERSION="1.0" MOUNT="/" TYPE="ext4"
    
    root@ImmortalWrt:~# mount
    /dev/root on / type ext4 (rw,noatime)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
    /dev/mmcblk0p1 on /boot type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
    tmpfs on /dev type tmpfs (rw,nosuid,noexec,noatime,size=512k,mode=755)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,mode=600,ptmxmode=000)
    debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,noatime)
    bpffs on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,noatime,mode=700)

    这确实不是 overlay 文件系统。从输出可以看到: 当前有两个分区:

    • /dev/mmcblk0p1:FAT16格式,挂载在 /boot
    • /dev/mmcblk0p2:ext4格式,挂载在根目录 /

    目前的系统是直接运行在 ext4 分区上,而不是 overlay 文件系统

    调整分区表

    使用parted进行调整

    得知统是直接运行在 ext4 分区上,因此我们使用parted检查分区并扩容

    parted -l -s # 查看磁盘名和序号
    
    parted /dev/mmcblk0 resizepart 2 100% #

    此时运行命令,发现我们的分区表已成功调整

    root@ImmortalWrt:~# parted /dev/mmcblk0 print
    Model: SD ED2S5 (sd/mmc)
    Disk /dev/mmcblk0: 128GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 
    
    Number  Start   End     Size    Type     File system  Flags
     1      4194kB  71.3MB  67.1MB  primary  fat16        boot, lba
     2      75.5MB  128GB   128GB   primary  ext4

    使用fdisk进行调整

    如果你无法使用parted进行调整,请尝试使用fdisk调整。若上一步调整成功,则无需理会此步骤。

    opkg install parted

    首先查看分区表:

    fdisk -l
    
    Disk /dev/mmcblk0: 119.38 GiB, 128177930240 bytes, 250347520 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3c92ff95
    
    Device         Boot  Start       End   Sectors   Size Id Type
    /dev/mmcblk0p1 *      8192    139263    131072    64M  6 FAT16
    /dev/mmcblk0p2      147456 250347519 250200064 119.3G 83 Linux

    发现我们需要修改的磁盘名为/dev/mmcblk0,因此执行:

    fdisk /dev/mmcblk0

    按照图示内容进行修改即可,建议mmcblk0p2按照原本的start位置开始分区,避免其他错误。

    root@ZhangOpenWrt:~# fdisk /dev/mmcblk0
    
    Welcome to fdisk (util-linux 2.40.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    This disk is currently in use - repartitioning is probably a bad idea.
    
    Command (m for help): p
    
    Disk /dev/mmcblk0: 119.38 GiB, 128177930240 bytes, 250347520 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3c92ff95
    
    Device         Boot  Start    End Sectors  Size Id Type
    /dev/mmcblk0p1 *      8192 139263  131072   64M  6 FAT16
    /dev/mmcblk0p2      147456 761855  614400  300M 83 Linux
    
    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): 
    First sector (2048-250347519, default 2048): 147456
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (147456-250347519, default 250347519): 
    
    Created a new partition 2 of type 'Linux' and of size 119.3 GiB.
    Partition #2 contains a ext4 signature.
    
    Do you want to remove the signature? [Y]es/[N]o: n
    
    Command (m for help): w
    
    The partition table has been altered.
    Syncing disks.

    最后使用fdisk -l可以查看分区表已经成功修改。

    拓展文件系统

    Loop Device 是一个虚拟块设备接口,它可以将文件或块设备映射为一个新的块设备,这种映射提供了一个中间层,允许以更安全的方式操作底层设备

    物理设备(如/dev/mmcblk0p2) -> Loop Device(/dev/loop0) -> resize2fs操作

    方法:

    # 1. 建立映射
    losetup /dev/loop0 /dev/mmcblk0p2
    # 此时创建了一个从 loop0 到实际分区的映射
    
    # 2. 文件系统操作
    resize2fs -f /dev/loop0
    # resize2fs 通过 loop device 接口修改文件系统
    
    # 3. 变更生效
    reboot
    # 重启使所有缓存的更改写入磁盘


    一般来说,在进行第二步之后,可以使用df -h的方法查看硬盘分区大小是否改变,若改变,可重启保存更改。若未改变,请先排查错误原因,避免配置错误后重启导致的系统奔溃。

  • 树莓派4B校园网连接和自动认证配置

    配置

    • Raspi 4B
    • Linux version 6.1.0-rpi7-rpi-v8 (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.1.63-1+rpt1 (2023-11-24)
      • systemd-networkd(这个版本默认安装此软件管理网络)。其他管理软件可以通过systemctl list-unit-files | grep network查询
      • wpa_supplicant
    • 校园网(BUAA-Mobile)
    • SSID:BUAA-Mobile
    • 安全类型:WPA2-企业(PEAP)
    • 频段:5 GHz
    • IPv4 DNS服务器:202.112.128.51, 202.112.128.50
    • 校园网(BUAA-WiFi)
    • SSID:BUAA-WiFi
    • 安全类型:开放
    • 频段:5 GHz
    • IPv4 DNS服务器:202.112.128.51, 202.112.128.50

    wpa supplicant配置

    编辑wpa supplicant配置nano /etc/wpa_supplicant/wpa_supplicant.conf

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=CN
    
    network={
        ssid="BUAA-WiFi"
        key_mgmt=NONE
        priority=11
    }
    network={
        ssid="BUAA-Mobile"
        key_mgmt=WPA-EAP
        eap=PEAP TTLS
        identity="*"
        password="*"
        phase1="PEAP"
        phase2="MSCHAPv2"
        priority=10
        proactive_key_caching=1
    }

    重新启动systemd-networkd服务

    重新启动systemd-networkd服务:

    sudo systemctl restart systemd-networkd

    检查wpa_supplicant服务状态:

    sudo systemctl status wpa_supplicant

    如果wpa_supplicant服务未运行,可以尝试启动它:

    sudo systemctl start wpa_supplicant

    重新加载网络配置:

    sudo systemctl restart networking

    通过以上设置,可以轻松连接到校园网。

    使用BeihangLogin自动认证

    https://github.com/buaahub/BeihangLogin

    git clone https://github.com/buaahub/BeihangLogin.git
    
    mv account.example account 
    
    //编辑登录文件
    nano account
    
    ./login-v2.sh login 

  • 在校园网环境中配置OpenWrt以实现IPv6中继和IPv4转发

    环境

    问题概述

    • 校园网环境无法访问 OpenWrt 平台
    • OpenWrt Raspi 版本默认不开启 IPv6
    • 校园网 IPv6 无 pd,无法再划分子网,因此需要我们中继上一级网络的 IPv6
    • OpenWrt 下使用统一 IPv4 地址,IPv4 不进行中继(增加设备数量)

    前置准备

    步骤

    校园网环境下登录 OpenWrt 并设置基础的 WAN 口及 LAN 口

    连接 OpenWrt – Raspi

    由于 OpenWrt 安装好的系统默认将 WAN 口和 WiFi 设置进行桥接,所以新安装的 OpenWrt 若接入校园网,连接 OpenWrt WiFi 后,是无法通过 192.168.1.1 连接路由器的,因此此时我们不连接任何网络,直接插电进入 OpenWrt 后台进行配置

    连接 WiFi 后浏览器进入后台地址192.168.1.1,默认密码password。进入后修改密码以及 SSH 登录信息。

    基础 LAN 口设置

    • 进入网络 – 接口,修改 LAN 接口,物理设置 – 接口,仅设置为无线网络,提交并保存。LAN 接口设置

    基础 WAN 口设置

    添加新接口,命令为 WAN,此接口用于连接上级网络(校园网)。包括eth0 接口(网线接口)。在后面由于校园网特殊构造,我们需要设置成静态 IP 模式,但是由于此节讲述 OpenWrt 配置,因此按照一般设置,我们使用 DHCP。提交并保存。WAN 设置

    此时,你就可以将网线插入校园网,不影响后台登录了。

    开启流量转发以使用 IPv4

    进入网络 – 防火墙,添加从 LAN 到 WAN 的转发以及 WAN 到 LAN 的转发,打开后应该能正常访问校园网,但仅有 IPv4

    流量转发设置

    校园网环境下的 IPv6 中继

    下载并运行 ipv6-helper.sh 安装 v6 模组

    • 下载好 https://openwrt.cc/scripts/ipv6-helper.sh 并安装 IPv6 模组(由于 OpenWrt 此时无法正常上网,建议使用 SFTP 的方式上传 OpenWrt)
    • 本站下载地址:https://api.zty.ink/api/v2/objects/file/c3siwt84ar895u58zt.sh
    wget -O ipv6-helper.sh https://api.zty.ink/api/v2/objects/file/c3siwt84ar895u58zt.sh
    chmod +x ipv6-helper.sh && bash ipv6-helper install

    配置 WAN6,获取 IPv6 流量

    WAN6 和 WAN4 其实是同一个接口,都使用了 eth0,但是为了方便配置,分成了两个逻辑接口,这样也会更方便我们 IPv4 和 IPv6 的分别配置。

    • 添加一个新的接口 WAN6 将传输协议修改为 DHCPv6,接口添加到 eth0 中,保存并应用,过一段时间可以发现我们已经从上级路由处获得了一个/64 地址(如果你的了比这个跟小的地址,那么后面你就不需要继续看了,直接使用就好),但这个地址其实并不是我们路由器能分配的(非 dp 接口),仅仅只是 OpenWrt 获得的 v6 地址,因此我们在后面选择进行中继。这个 DHCPv6 客户端是为了获取 ipv6 流量。
    WAN6 配置

    配置 WAN 到静态地址

    由于 DHCP 协议中没有 ipv6 设置,所以我们需要将 WAN 修改为静态地址,当然这应该是图形化界面没有优化到的部分,当然这部分内容也可以在/etc/config/dhcp中进行配置,此处我们选择直接将 WAN 修改为静态地址后配置 dhcpv6 设置。

    • IPv4 地址填写你在 DHCP 服务器时获取到的 IP 地址,子网掩码和网关也填写对应内容即可。
    WAN 静态配置

    同时修改 WAN 的 DHCP 服务器 – IPv6 设置,将三个服务设置为中继模式

    LAN 的 IPv6 中继设置

    同上一步,由于 LAN 本身为静态 IP 地址,所以我们只需要修改其其 DHCPv6 即可,同样全部设置为中继模式即可。

    指定主接口

    nano /etc/config/dhcp

    在 WAN 行添加option master '1'

    config dhcp 'WAN'
            option start '100'
            option leasetime '12h'
            option limit '150'
            option interface 'WAN'
            option ra 'relay'
            option dhcpv6 'relay'
            option ndp 'relay'
            option master '1'

    配置option master '1'用于指定主接口的作用是启用 IPv6 中继(relay)功能。IPv6 中继功能允许路由器将上游(WAN)接口获取的 IPv6 前缀信息转发到下游(LAN)接口,从而使局域网中的设备能够获得 IPv6 地址并通过路由器访问互联网

    重启 Network

    /etc/init.d/network restart

    开启 IPv6 DNS 解析

    进入网络 – DHCP/DNS – 高级设置,关闭禁止解析 IPv6 DNS 记录即可。

    添加域名白名单

    于2025年2月18日更新

    进入DHCP and DNSfilter,添加需要修改的域名进入到Domain whitelist即可(通常是认证网址)

    总结

    说白了,就是使用 OpenWrt 的 DHCPv4,使用上游路由器的 DHCPv6。