首页 > 其他分享 >虚拟机下的OpenWrt磁盘Overlay扩容

虚拟机下的OpenWrt磁盘Overlay扩容

时间:2023-04-26 18:13:11浏览次数:39  
标签:Overlay 虚拟机 bytes dev 磁盘 512 分区 OpenWrt

方式一:使用新磁盘扩容(推荐)
这种方式不仅适用于虚拟机,也适用于裸机安装的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

标签:Overlay,虚拟机,bytes,dev,磁盘,512,分区,OpenWrt
From: https://www.cnblogs.com/yangtao416/p/17355914.html

相关文章

  • Linux扩大虚拟机系统磁盘空间
    Linux扩大虚拟机系统磁盘空间一、基本步骤1.虚拟机保持关闭状态,设置->磁盘->拓展->最大磁盘大小 设成30G2.创建新分区3.格式化分区4.挂载分区(创建新分区后,需要挂载才能使用)5.解挂分区(解挂后,数据会保留,重新挂载,数据依旧存在)6.删除分区(删除后,数据不存在) 二、创建......
  • 虚拟机|--Hyper-V|--Start PXE over IPv4.报错解决方案
    前言在Hyper-V管理器中>>操作>>"快速创建"了一个WIndowsXP系统的虚拟机,结果启动的时候报错了解决方案在创建虚拟机的时候不要快速创建,而使用新建,在指定代数步骤选择第一代(1),开始创建的步骤改一下就可以了.其他配置推荐在分配内存步骤我写的是8000M左右,(根......
  • 【❀Java虚拟机】对象终止机制
    什么是对象终止机制?Java语言提供了对象终止( finalization)机制来允许开发人员提供对象被销毁之前的自定义处理逻辑处理。当垃圾回收器发现没有任何引用指向某个对象时,那么就会在垃圾回收中清除这个对象,在垃圾回收器回收此对象之前,会先调用这个对象的 finalize()方法。我们......
  • OpenWrt 系统日志之logread
    OpenWrt系统日志之logread在busybox中实现了syslogd和logread.syslogd用来记录log,logged则用来读取log. logread的代码很简洁,主要实现过程是:连接共享内存->信号量加锁->读取共享内存中的信息并输出->信号量解锁。  【转】(147条消息)OpenWrt系统日志之logread_钱国......
  • 虚拟机热迁移一直处于迁移中的状态-v4-20210308_124243
    虚拟机热迁移一直处于迁移中的状态企业云平台产品中心共享知识库Exportedon03/08/2021TableofContents问题现象:对虚拟机进行热迁移操作,Dashboard和云服务自助平台上一直处于迁移中的状态问题原因:虚拟机存在频繁的数据读写操作,导致虚拟机迁移的速度追不上数据读写的速度,每次迁......
  • 虚拟机文件系统损坏
    问题描述linuxwindows问题原因问题影响问题解决问题确认修复虚拟机磁盘linux操作系统修复准备修复镜像通过下载的镜像/磁盘镜像启动新的kvm虚拟机,将故障虚拟机磁盘挂载到系统进行修复启动虚拟机,进行修复验证使用ISO修复需注意windows操作系统修复下载windowsiso镜像从镜像启......
  • 虚拟机-windows 修改密码
    1、关机2、备份卷3、手动操作把系统卷挂载到别的vm上4、复制cmd.exe覆盖放大镜的exe文件5、手动卸载6、进入登录页面后点击放大镜的按钮,输入命令重置密码当前密码Tstack@1231.关机[root@openstack‐con01~(keystone_admin)]#novalist‐‐all|grep172.16.0.48|5d356c31‐......
  • 虚拟机更换 IP 地址
    旧虚拟机自助云解绑弹性IP查看虚拟机的项目openstackservershow[severid]|grepproject记录projectidproject_id:2b45a5be69804478bc1fc73e2aec1197记录projectname,如果是admin则不需要进行45操作openstackprojectlist|grep[projectid]记录projectnamep......
  • Ubuntu Vmware虚拟机 没有共享文件夹/mnt/hgfs 解决
    问题现象在Vmware虚拟机设置共享文件夹后,在Ubuntu系统侧应该在/mnt/hgfs目录下可见。然而,有时在重启虚拟机后不存在该文件夹。解决方法在终端中执行以下代码,需要root权限。sudoapt-getinstallopen-vm-toolssudomkdir/mnt/hgfssudo/usr/bin/vmhgfs-fuse.host://mnt/h......