玩转系统|OpenWrt扩容磁盘方案及实操

OpenWrt 是什么?

OpenWrt 可以被描述为一个嵌入式的 Linux 发行版。(主流路由器固件有 dd-wrt,tomato,openwrt,padavan四类)对比一个单一的、静态的系统,OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。

对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。

开篇

我们安装 OpenWrt 之后默认的存储空间都很小,如果你是通过下载其他大佬的固件,一般磁盘大小在编译固件的时候大小就固定死了,如果要跑 docker 的话会连个镜像都拉取不下来,若我们想要充分折腾软路由,则需要对 Open­Wrt 进行扩容,然后就可以愉快的玩耍了 。

说明

本教程扩容方案本人仅在 vmware 虚拟机里面做测试通过,理论适用于物理机进行安装,参考文章请自行斟酌。

步骤

  1. 先查看扩容前默认可使用的空间大小,我这里指剩下了129.40MB。

  1. 关闭 OpenWrt,建议给虚拟机拍个快照,防止搞炸了重装浪费时间,然后新增一块磁盘,我这里直接新增一个 5G 大小的硬盘做测试,然后打开 OpenWrt 电源。

  1. 安装必要工具。

opkg update # 更新
opkg install fdisk # 安装工具,有的话就不用执行了
  1. 执行命令fdisk -l ,确认自己的磁盘编号

root@OpenWrt:~# fdisk -l
Disk /dev/loop0: 214.06 MiB, 224460800 bytes, 438400 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
GPT PMBR size mismatch (1065503 != 1065534) will be corrected by write.
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
The backup GPT table is not on the end of the device.


Disk /dev/sda: 520.28 MiB, 545553920 bytes, 1065535 sectors
Disk model: VMware Virtual S
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: gpt
Disk identifier: 8E2DA755-0E50-0BD5-63C5-B1DC8E810D00

Device      Start     End Sectors  Size Type
/dev/sda1     512   41471   40960   20M Linux filesystem
/dev/sda2   41472 1065471 1024000  500M Linux filesystem
/dev/sda128    34     511     478  239K BIOS boot

Partition table entries are not in disk order.


Disk /dev/sdb: 5 GiB, 5368709120 bytes, 10485760 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  1. 使用 fdisk /dev/sdb 给新磁盘分区,全部使用默认值就可以了。最后输入w保存分区表并退出 ,按照提示操作即可。

root@OpenWrt:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.38).
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 0xbd5366e9.

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-10485759, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759): 

Created a new partition 1 of type 'Linux' and of size 5 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
  1. 使用 mkfs.ext4 /dev/sdb 文件系统格式化分区刚才的分区。

root@OpenWrt:~# mkfs.ext4 /dev/sdb
mke2fs 1.46.5 (30-Dec-2021)
Found a dos partition table in /dev/sdb
Proceed anyway? (y,N) y
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: 752b4263-c24e-46cb-8e35-7e991898e6f6
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
  1. 挂载分区后的磁盘,拷贝 /overlay 目录下原来的文件到此目录下。

root@OpenWrt:~# mkdir -p /mnt/sdb  # 创建挂载目录
root@OpenWrt:~# mount /dev/sdb /mnt/sdb  ## 挂载
root@OpenWrt:~# ls /mnt/sdb # 查看是否挂载成功,只要有lost+found文件就对了
lost+found
root@OpenWrt:~# cp -r /overlay/* /mnt/sdb  ## 拷贝文件
root@OpenWrt:/mnt/sdb# ls /mnt/sdb  ## 有如下文件就对了
etc         lost+found  upper       work
  1. 接下来就是进到OpenWrt系统后台,找到挂载点-先点击全局设置里面的生成配置按钮,然后拉到底部挂载点,可以看到我们刚才挂载的磁盘,然后点击修改。

  1. 点击修改之后进入到如下界面,确保启用此挂载点是勾选状态,挂载点选择 作为外部overlay使用,保存&应用,然后重启OpenWrt。

  1. 如果操作没错的话,再次查看空闲空间就是我们设置的空间了。

结束语

文章部分内容参考与网络,如有侵权立即删除。

参考文档

OpenWrt 扩容磁盘方案及实操

OpenWrt 存储空间扩容的两种方案

OpenWrt扩展根目录

虚拟机下的OpenWrt磁盘Overlay扩容

软路由探索之旅 篇三:给openwrt扩容overlay 3月30日更新

OpenWrt 安装后扩容(非overlay)

附赠:

女神节当然来点女神节的画面

先看一下效果图:

当你的女神点开comebaby小心心的时候,一颗爱心树缓缓的盛开,树上开满了爱心,一颗小心心朝向你的女神飘落是多么的唯美呀。

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>jQuery+Html5实现唯美表白动画代码</title>
        <link type="text/css" rel="stylesheet" href="./js/default.css">
        <script type="text/javascript" src="./js/jquery.min.js"></script>
        <script type="text/javascript" src="./js/jscex.min.js"></script>
        <script type="text/javascript" src="./js/jscex-parser.js"></script>
        <script type="text/javascript" src="./js/jscex-jit.js"></script>
        <script type="text/javascript" src="./js/jscex-builderbase.min.js"></script>
        <script type="text/javascript" src="./js/jscex-async.min.js"></script>
        <script type="text/javascript" src="./js/jscex-async-powerpack.min.js"></script>
        <script type="text/javascript" src="./js/functions.js" charset="utf-8"></script>
        <script type="text/javascript" src="./js/love.js" charset="utf-8"></script>
        <style type="text/css">
<!--
.STYLE1 {color: #666666}
-->
        </style>
</head>
    <body>
            <audio autoplay="autopaly">
                    <source src="renxi.mp3" type="audio/mp3" />
            </audio>  
        <div id="main">
            <div id="error">本页面采用HTML5编辑,目前您的浏览器无法显示,请换成谷歌(<a href="http://www.google.cn/chrome/intl/zh-CN/landing_chrome.html?hl=zh-CN&brand=CHMI">Chrome</a>)或者火狐(<a href="http://firefox.com.cn/download/">Firefox</a>)浏览器,或者其他游览器的最新版本。</div>
             <div id="wrap">
                <div id="text">
                    <div id="code">
                  <font color="#FF0000">      <span class="say">我爱你,虽然你看不见我对你的告白</span><br>
                        <span class="say"> </span><br>
<span class="say"> 我知道我不会甜言蜜语,但是我会用行动证明一切</span><br>
                        <span class="say"> </span><br>
                        
                        
                        
                        <span class="say">你说我啰嗦,有些东西因为越在乎所以越失去</span><br>
<span class="say">因为我太爱你了,所以我失去你了</span><br>
<span class="say">因为我太啰嗦了,所以你离开了我</span><br>
 
 <span class="say">虽然你看不见我的告白,但是我还是要把这些心里话说出来</span><br>
                        <span class="say"> </span><br>
                        <span class="say"><span class="space"></span> -- 爱你的老公--</span>
              </font></p>
      </div>
                </div>
                <div id="clock-box">
                    <span class="STYLE1"></span><font color="#33CC00">我喜欢你</font>
<span class="STYLE1">已经是……</span>
                  <div id="clock"></div>
              </div>
                <canvas id="canvas" width="1100" height="680"></canvas>
            </div>
            
        </div>
    
    <script>
    </script>
 
    <script>
    (function(){
        var canvas = $('#canvas');
        
        if (!canvas[0].getContext) {
            $("#error").show();
            return false;        }
 
        var width = canvas.width();
        var height = canvas.height();        
        canvas.attr("width", width);
        canvas.attr("height", height);
        var opts = {
            seed: {
                x: width / 2 - 20,
                color: "rgb(190, 26, 37)",
                scale: 2
            },
            branch: [
                [535, 680, 570, 250, 500, 200, 30, 100, [
                    [540, 500, 455, 417, 340, 400, 13, 100, [
                        [450, 435, 434, 430, 394, 395, 2, 40]
                    ]],
                    [550, 445, 600, 356, 680, 345, 12, 100, [
                        [578, 400, 648, 409, 661, 426, 3, 80]
                    ]],
                    [539, 281, 537, 248, 534, 217, 3, 40],
                    [546, 397, 413, 247, 328, 244, 9, 80, [
                        [427, 286, 383, 253, 371, 205, 2, 40],
                        [498, 345, 435, 315, 395, 330, 4, 60]
                    ]],
                    [546, 357, 608, 252, 678, 221, 6, 100, [
                        [590, 293, 646, 277, 648, 271, 2, 80]
                    ]]
                ]] 
            ],
            bloom: {
                num: 700,
                width: 1080,
                height: 650,
            },
            footer: {
                width: 1200,
                height: 5,
                speed: 10,
            }
        }
 
        var tree = new Tree(canvas[0], width, height, opts);
        var seed = tree.seed;
        var foot = tree.footer;
        var hold = 1;
 
        canvas.click(function(e) {
            var offset = canvas.offset(), x, y;
            x = e.pageX - offset.left;
            y = e.pageY - offset.top;
            if (seed.hover(x, y)) {
                hold = 0; 
                canvas.unbind("click");
                canvas.unbind("mousemove");
                canvas.removeClass('hand');
            }
        }).mousemove(function(e){
            var offset = canvas.offset(), x, y;
            x = e.pageX - offset.left;
            y = e.pageY - offset.top;
            canvas.toggleClass('hand', seed.hover(x, y));
        });
 
        var seedAnimate = eval(Jscex.compile("async", function () {
            seed.draw();
            while (hold) {
                $await(Jscex.Async.sleep(10));
            }
            while (seed.canScale()) {
                seed.scale(0.95);
                $await(Jscex.Async.sleep(10));
            }
            while (seed.canMove()) {
                seed.move(0, 2);
                foot.draw();
                $await(Jscex.Async.sleep(10));
            }
        }));
 
        var growAnimate = eval(Jscex.compile("async", function () {
            do {
                tree.grow();
                $await(Jscex.Async.sleep(10));
            } while (tree.canGrow());
        }));
 
        var flowAnimate = eval(Jscex.compile("async", function () {
            do {
                tree.flower(2);
                $await(Jscex.Async.sleep(10));
            } while (tree.canFlower());
        }));
 
        var moveAnimate = eval(Jscex.compile("async", function () {
            tree.snapshot("p1", 240, 0, 610, 680);
            while (tree.move("p1", 500, 0)) {
                foot.draw();
                $await(Jscex.Async.sleep(10));
            }
            foot.draw();
            tree.snapshot("p2", 500, 0, 610, 680);
 
            // 会有闪烁不得意这样做, (>﹏<)
            canvas.parent().css("background", "url(" + tree.toDataURL('image/png') + ")");
            canvas.css("background", "#ffe");
            $await(Jscex.Async.sleep(300));
            canvas.css("background", "none");
        }));
 
        var jumpAnimate = eval(Jscex.compile("async", function () {
            var ctx = tree.ctx;
            while (true) {
                tree.ctx.clearRect(0, 0, width, height);
                tree.jump();
                foot.draw();
                $await(Jscex.Async.sleep(25));
            }
        }));
 
        var textAnimate = eval(Jscex.compile("async", function () {
            var together = new Date();
            together.setFullYear(2016,3 , 15);             //时间年月日
            together.setHours(16);                        //小时    
            together.setMinutes(53);                    //分钟
            together.setSeconds(0);                    //秒前一位
            together.setMilliseconds(2);                //秒第二位
 
            $("#code").show().typewriter();
            $("#clock-box").fadeIn(500);
            while (true) {
                timeElapse(together);
                $await(Jscex.Async.sleep(1000));
            }
        }));
 
        var runAsync = eval(Jscex.compile("async", function () {
            $await(seedAnimate());
            $await(growAnimate());
            $await(flowAnimate());
            $await(moveAnimate());
 
            textAnimate().start();
 
            $await(jumpAnimate());
        }));
 
        runAsync().start();
    })();
    </script>
<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
 
</div>
</body>
</html>

快点和你的女神去表白去吧。哇咔咔。

猜你喜欢

转载自blog.csdn.net/qq_22903531/article/details/129384630