虚拟机下的OpenWrt磁盘Overlay扩容 您所在的位置:网站首页 扩展overlay 虚拟机下的OpenWrt磁盘Overlay扩容

虚拟机下的OpenWrt磁盘Overlay扩容

#虚拟机下的OpenWrt磁盘Overlay扩容| 来源: 网络整理| 查看: 265

方式一:使用新磁盘扩容(推荐) 这种方式不仅适用于虚拟机,也适用于裸机安装的OpenWrt系统。

给新磁盘分区并格式化

对于裸机,可使用USB、SATA等接口添加新硬盘;对于虚拟机,可在虚拟机配置项中添加新虚拟磁盘。

以虚拟机为例,我这里添加一个1GB的新虚拟磁盘。

添加完成后进入OpenWrt的Shell。(通过ssh或者直接使用虚拟化平台提供的控制台)

安装分区需要用到的工具:

opkg update opkg install fdisk kmod-fs-ext4

查看系统现有的磁盘和分区信息,我使用的是原版的OpenWrt,默认只有120M大小的磁盘,安装几个插件,空间就已经捉襟见肘了。/dev/sda是原有的系统盘,/dev/sdb是我刚添加的1G虚拟磁盘。

root@OpenWrt:~# df -h Filesystem Size Used Available Use% Mounted on /dev/root 4.0M 4.0M 0 100% /rom tmpfs 54.1M 2.3M 51.8M 4% /tmp /dev/loop0 92.8M 73.7M 12.1M 86% /overlay overlayfs:/overlay 92.8M 73.7M 12.1M 86% / /dev/sda1 15.7M 4.8M 10.6M 31% /boot /dev/sda1 15.7M 4.8M 10.6M 31% /boot tmpfs 512.0K 0 512.0K 0% /dev root@OpenWrt:~# fdisk -l Disk /dev/loop0: 100 MiB, 104857600 bytes, 204800 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 Disk /dev/sda: 120.5 MiB, 126353408 bytes, 246784 sectors Disk model: Virtual disk 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: 0x529e51f2 Device Boot Start End Sectors Size Id Type /dev/sda1 * 512 33279 32768 16M 83 Linux /dev/sda2 33792 246783 212992 104M 83 Linux Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors Disk model: Virtual disk Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes

使用fdisk给新磁盘分区,全部使用默认值就可以了。最后输入w保存分区表并退出。

root@OpenWrt:~# fdisk /dev/sdb Welcome to fdisk (util-linux 2.36.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x31c553f5. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2097151, default 2097151): Created a new partition 1 of type 'Linux' and of size 1023 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

使用ext4文件系统格式化分区。

root@OpenWrt:~# mkfs.ext4 /dev/sdb1 mke2fs 1.45.6 (20-Mar-2020) Creating filesystem with 261888 4k blocks and 65536 inodes Filesystem UUID: 01002f49-6f61-46d4-9ab1-c2d38324bc45 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done

复制原Overlay分区到新分区

首先创建一个临时的挂载点,用于挂载上一步创建的新分区。

mkdir /new_overlay mount /dev/sdb1 /new_overlay

将原/rom/overlay下的文件,全部拷贝到/new_overlay。

cp -a /rom/overlay /new_overlay

重新挂载Overlay分区

安装磁盘挂载使用的工具blkid。因为系统的磁盘名称生成没有规律,所以一般使用磁盘的分区UUID来挂载。

opkg update opkg install blkid

查看新磁盘的UUID并记录下来备用。

root@OpenWrt:~# blkid /dev/loop0: LABEL="rootfs_data" UUID="ce382a4e-ad60-41dc-80da-f6851a25de1e" BLOCK_SIZE="1024" TYPE="ext4" /dev/sdb1: UUID="01002f49-6f61-46d4-9ab1-c2d38324bc45" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="31c553f5-01" /dev/sda1: LABEL="kernel" UUID="84173db5-fa99-e35a-95c6-28613cc79ea9" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="529e51f2-01" /dev/sda2: TYPE="squashfs" PARTUUID="529e51f2-02"

修改系统挂载配置,替换原来的Overlay分区。用新磁盘的UUID替换掉原来/overlay挂载点的UUID。并且enabled改为1。

vim /etc/config/fstab config global option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' config mount option target '/rom/overlay' # 替换掉这里的UUID # option uuid 'ce382a4e-ad60-41dc-80da-f6851a25de1e' option uuid '01002f49-6f61-46d4-9ab1-c2d38324bc45' option enabled '1'

最后重启系统,重新进入Shell查看分区信息。已经使用新的分区作为Overlay了。

LuCI界面也提供挂载点的配置,原版OpenWrt需要安装block-mount包,并且重启系统后方能在System菜单里看到。 使用LuCI界面配置会更加直观友好。 此外官方提示non-MTD设备启动时不读取/etc/config/fstab (https://openwrt.org/docs/guide-user/additional-software/extroot_configuration)[https://openwrt.org/docs/guide-user/additional-software/extroot_configuration),需要打补丁才能解决。 一些第三方的固件是有这个补丁的,可以直接使用。但是原版没有,如果你不会打补丁,那么就用下面的这种方式吧。

方式二:在原有磁盘上扩容 这种方式适用于虚拟机,可以直接修改虚拟磁盘大小达到扩容的目的。

更改虚拟磁盘大小

关闭虚拟机,修改磁盘大小。

扩容磁盘大小

修改磁盘大小需要在另一个系统上进行操作,已经挂载的磁盘无法进行分区大小调整。

使用fdisk进行分区操作,然后重新创建新的分区,新的分区起始扇区和原来的分区保持一致,但是结束扇区比原来的大,以此达到扩容的目的。(操作有风险,做好备份)

最简单的方式,关闭需要调整分区的虚拟机,创建一个新的虚拟机,然后将需要调整分区的磁盘挂载给新的虚拟机。这样在调整分区完成后,删除新的虚拟机,打开原来的虚拟机即可。

在新的虚拟机上安装需要用到的工具。

opkg update opkg install lsblk blkid resize2fs losetup

查看分区信息,/dev/sdb就是我们需要操作的硬盘。

root@OpenWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1003.5M 0 loop /overlay sda 8:0 0 1G 0 disk ├─sda1 8:1 0 16M 0 part /boot └─sda2 8:2 0 1007.5M 0 part /rom sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 16M 0 part └─sdb2 8:18 0 104M 0 part sr0 11:0 1 1024M 0 rom

载入/dev/sdb到loop设备。

root@OpenWrt:~# losetup -f /dev/sdb root@OpenWrt:~# losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop1 0 0 0 0 /dev/sdb 0 512 /dev/loop0 0 4194304 1 0 /sda2 0 512

读取loop设备的分区信息,加载到系统。

root@OpenWrt:~# partx -a /dev/loop1 root@OpenWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1003.5M 0 loop /overlay loop1 7:1 0 1G 0 loop ├─loop1p1 259:0 0 16M 0 part └─loop1p2 259:1 0 104M 0 part sda 8:0 0 1G 0 disk ├─sda1 8:1 0 16M 0 part /boot └─sda2 8:2 0 1007.5M 0 part /rom sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 16M 0 part └─sdb2 8:18 0 104M 0 part sr0 11:0 1 1024M 0 rom

从上面的结果可以看到,loop1p2就是我们需要扩容的分区,虽然已经扩展到1G,但是识别到的仍然是原来的大小。我们使用fdisk调整此分区的大小。

root@OpenWrt:~# fdisk /dev/loop1 Welcome to fdisk (util-linux 2.36.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/loop1: 1 GiB, 1073741824 bytes, 2097152 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: 0x529e51f2 Device Boot Start End Sectors Size Id Type /dev/loop1p1 * 512 33279 32768 16M 83 Linux /dev/loop1p2 33792 246783 212992 104M 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): Using default response p. Partition number (2-4, default 2): First sector (33280-2097151, default 34816): 33792 Last sector, +/-sectors or +/-size{K,M,G,T,P} (33792-2097151, default 2097151): Created a new partition 2 of type 'Linux' and of size 1007.5 MiB. Partition #2 contains a squashfs signature. Do you want to remove the signature? [Y]es/[N]o: n Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Invalid argument The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).

根据提示说明,分区表修改之后,内核仍然会使用旧的分区表,所以需要更新分区信息。再次查看,loop1p2分区已经是扩容后的大小了。

root@OpenWrt:~# partx -u /dev/loop1 root@OpenWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1003.5M 0 loop /overlay loop1 7:1 0 1G 0 loop ├─loop1p1 259:2 0 16M 0 part └─loop1p2 259:3 0 1007.5M 0 part sda 8:0 0 1G 0 disk ├─sda1 8:1 0 16M 0 part /boot └─sda2 8:2 0 1007.5M 0 part /rom sdb 8:16 0 1G 0 disk ├─sdb1 8:17 0 16M 0 part └─sdb2 8:18 0 104M 0 part sr0 11:0 1 1024M 0 rom

最后卸载磁盘,关闭这个用于扩容的虚拟机,开启原来的虚拟机。

root@OpenWrt:~# partx -d /dev/loop1 root@OpenWrt:~# losetup -d /dev/loop1

在原来的虚拟机上执行:

resize2fs /dev/loop0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有