使用Qemu跑Openwrt当旁路由并扩容
Openwrt先跑起来
本人选择的Openwrt是官方原版的ext4带EFI版本的 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
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了
映射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吧。