Featured image of post 使用Qemu跑Openwrt当旁路由并扩容

使用Qemu跑Openwrt当旁路由并扩容

准备在Qemu里面在跑一个Openwrt来做旁路由,然后呢为了后续使用起来更安逸,就把原来只有20m的剩余空间扩充一下

使用Qemu跑Openwrt当旁路由并扩容

Openwrt先跑起来

本人选择的Openwrt是官方原版的ext4EFI版本的 generic-ext4-combined-efi.img.gz,虽然带了EFI,但是我好像还是没有直接启动成功,加了一个bios引导才成功,不知道为什么。反正先不求甚解,能跑起来再说。

我是准备拿openwrt跑个旁路由的,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
qemu-system-aarch64 \
-M virt \
-accel hvf \
-cpu host \
-smp 1 \
-m 512 \
-drive if=virtio,file=./openwrt.img,format=raw,if=virtio \
-bios ./QEMU_EFI.fd \
-nographic \
-nic vmnet-bridged,ifname=en0,model=virtio-net-pci#搞了一个桥接,默认接到openwrt里面的eth0,然后到br-lan网桥上,也就是lan侧

QEMU_EFI.fd下载地址,前面那个qemu跑Ubuntu的post里面有。

网络配置再修改一下

然后就配置一下系统,因为默认的网络配置是192.168.1.1和我本地的网关冲突了,需要修改一下

1
vi /etc/config/network
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth0'
        option macaddr '02:11:22:33:44:56' #这里必须要修改Mac地址,因为默认是读取你设备的真实网卡地址,而且又是和宿主机一个网口出去,会导致网络丢包,不但影响虚拟机的网络,也会导致宿主机网络质量直线下降,丢包,延迟甚至直接断网也是有可能的。

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.1.50'#改一下地址
        option netmask '255.255.255.0'
        option gateway '192.168.1.1'#这里需要加个网关,因为是旁路由,直通局域网,Openwrt没有wan出口,只能直接配置网关
        option dns '114.114.114.114'#没有网关了,dns肯定也是没有的,需要手动指定一个
        option ip6assign '60'

配置好了之后就可以service network restart重启网络了

基本上openwrt上需要做的也就这么多,其他设备上网关指向192.168.1.50就可以了。

Openwrt扩容

默认的img镜像跑起来后,可使用的空间已经所剩无几,大概只有20m左右,安装一些软件什么的都不够塞牙缝的。

先关机!

首先需要先停止运行openwrt,先poweroff关机,最好不要qemu直接kill掉进程,我就遇到了img文件损坏的问题了

数据第一!先备份!

1
cp openwrt.img openwrt.img.bk

img扩容

1
qemu-img resize openwrt.img 512M #你想要多大就改多大

扩容完成就可以直接拷贝镜像至其他Linux系统,我就直接用scp拷贝到qemu里面跑的Ubuntu了

1
scp openwrt.img [email protected]:~/

映射img至本地设备

登录其他Linux系统,先映射img到本地设备

1
sudo losetup -P -f ./openwrt.img

这个时候sudo fdisk -l或者lsblk应该就可以看到/dev/loop的设备了

1
2
3
4
5
6
7
8
9
lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0   512M  0 loop
├─loop0p1   259:3    0   128M  0 part
├─loop0p2   259:4    0 383.7M  0 part
└─loop0p128 259:5    0   239K  0 part
vda         253:0    0    30G  0 disk
├─vda1      253:1    0     1G  0 part /boot/efi
└─vda2      253:2    0  28.9G  0 part /

然后就是重写分区表了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sudo parted /dev/loop0 #一般么有挂其他设备就是loop0 ,根据lsblk看到的来调整
GNU Parted 3.6
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print #查看一下信息
Warning: Not all of the space available to /dev/loop0 appears to be used, you can fix the
GPT to use all of the space (an extra 15532032 blocks) or continue with the current setting?

Fix/Ignore? fix #这里需要修复一下
Model: Loopback device (loopback)
Disk /dev/loop0: 8489MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name                  Flags
128     17.4kB  262kB  245kB                                     bios_grub
 1      262kB   134MB  134MB  fat16        EFI System Partition  boot, legacy_boot, esp
 2      134MB   537MB  402MB  ext4
(parted) resizepart 2 100% #调整 2 占用100%的空间
(parted) print #查看是否修改成功
Model: Loopback device (loopback)
Disk /dev/loop0: 8489MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name                  Flags
128     17.4kB  262kB   245kB                                      bios_grub
 1      262kB   134MB   134MB   fat16        EFI System Partition  boot, legacy_boot, esp
 2      134MB   8489MB  8355MB  ext4

(parted) quit
Information: You may need to update /etc/fstab.

然后再检查一下是否有问题,当然刚调整完100%有问题,fix一下就好了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo e2fsck -f /dev/loop0p2
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Inode 7, i_size is 29405184, should be 33607680.  Fix<y>? y #修复下
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

rootfs: ***** FILE SYSTEM WAS MODIFIED *****
rootfs: 1718/19968 files (0.0% non-contiguous), 8603/98235 blocks

扩展文件系统

1
2
sudo resize2fs /dev/loop0p2 
sudo losetup -d /dev/loop0

扩展完成之后就可以把img文件拷贝回原处启动一下openwrt看看你不能起得来。一般情况下是可以的,二般情况下我就不知道了,你去问GPT Claude吧。

Licensed under CC BY-NC-SA 4.0