From 89717d26220826221dd2fe183b75be31fed3ff43 Mon Sep 17 00:00:00 2001 From: lianglianglee Date: Thu, 30 Nov 2023 14:52:02 +0800 Subject: [PATCH] image-to-r2 --- _config.keep.yml | 6 +-- _config.landscape.yml | 0 source/_posts/debian-raid5.md | 2 +- source/_posts/git-file-view.md | 18 +++---- source/_posts/hexo-cloudflare.md | 6 +-- source/_posts/mysql-engines.md | 4 +- source/_posts/mysql-lite.md | 16 +++---- source/_posts/omv-data-to-truenas.md | 10 ++-- source/_posts/pve-copy-centos-network-fail.md | 47 +++++++++++++++++++ source/_posts/self-website-upgrade.md | 10 ++-- .../_posts/tampermonkey-save-51cto-to-html.md | 2 +- source/_posts/use_js_save_time_geek.md | 4 +- 12 files changed, 86 insertions(+), 39 deletions(-) delete mode 100644 _config.landscape.yml create mode 100644 source/_posts/pve-copy-centos-network-fail.md diff --git a/_config.keep.yml b/_config.keep.yml index 24ad456..4da2086 100644 --- a/_config.keep.yml +++ b/_config.keep.yml @@ -27,13 +27,13 @@ style: # Your blog website logo image # You can use local image, image external link or don't fill - logo: /files/images/favicon.png + logo: https://blog-image.lianglianglee.com/images/favicon.png # Favicon (You can use local image or image external link) - favicon: /files/images/favicon.png + favicon: https://blog-image.lianglianglee.com/images/favicon.png # Avatar (You can use local image or image external link) - avatar: /files/images/favicon.png + avatar: https://blog-image.lianglianglee.com/images/favicon.png # Font size, customize font size. (you don't usually have to fill) # e.g. font_size: 18px diff --git a/_config.landscape.yml b/_config.landscape.yml deleted file mode 100644 index e69de29..0000000 diff --git a/source/_posts/debian-raid5.md b/source/_posts/debian-raid5.md index 6e9b53d..0eb20c5 100644 --- a/source/_posts/debian-raid5.md +++ b/source/_posts/debian-raid5.md @@ -11,7 +11,7 @@ date: 2023-06-29 01:12:23 查看阵列情况,发现一个U盘已经挂了。 -![](/files/assets/20230629_112301.png) +![](https://blog-image.lianglianglee.com/assets/20230629_112301.png) 才3个月已经挂了,有点尴尬。哪怕更换了启动U盘,也不敢存放了。想着换系统。搞来搞去没有满意的系统。所以干脆裸装算了。就使用debian作为系统组软RAID,应用就万物皆docker。 diff --git a/source/_posts/git-file-view.md b/source/_posts/git-file-view.md index 5f1df0e..5216734 100644 --- a/source/_posts/git-file-view.md +++ b/source/_posts/git-file-view.md @@ -42,7 +42,7 @@ tree .git 使用git status查看当前仓库的状态 -![image](/files/assets/image-20231023162908-77wvd7b.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023162908-77wvd7b.png)​ 可以看到一个新增文件,这个时候.git目录没什么变化 @@ -50,7 +50,7 @@ tree .git 接下来,我们需要使用 git add 命令将文件加入到暂存区,再看git状态 -![image](/files/assets/image-20231023163048-1qbqrle.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023163048-1qbqrle.png)​ 使用tree命令看一下目录 @@ -68,15 +68,15 @@ tree .git 多出来一个文件夹,去看看这个文件夹是什么东西 -![image](/files/assets/image-20231023163209-iri6tvb.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023163209-iri6tvb.png)​ 一个无后缀的文件,打开后,是一个乱码 -![image](/files/assets/image-20231023163309-3bjxq3y.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023163309-3bjxq3y.png)​ 这类文件可以使用 git cat-file 打开,打开这个文件,需要将两个字符的文件夹也给加上,这里就是`e1cfd5c071a3098ba096bc37300a003f0f3f036e`​ -![image](/files/assets/image-20231023163527-bo6ez6n.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023163527-bo6ez6n.png)​ 可以看到这里是就是文本的内容 @@ -113,11 +113,11 @@ git commit -m"第一次提交" 第一个文件,类似一个目录介绍,里面是我们add时的那个文件和文件名 -![image](/files/assets/image-20231023164251-hjinoiu.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023164251-hjinoiu.png)​ 另一个文件,是commit的一些信息,提交人,邮箱,时间等,其中 tree这一行,就是刚刚的文件。 -![image](/files/assets/image-20231023164404-thcflji.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023164404-thcflji.png)​ 这里就可以把整个提交流程串起来了 @@ -129,7 +129,7 @@ git commit 为什么会生成两个文件,还不知道为什么,我们等会 这时通过这一串ID,可以把整个仓库串起来 -![image](/files/assets/image-20231023170406-ghlsodf.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023170406-ghlsodf.png)​ 我们再加一个文件,test_bak.txt,这里同样的add和commit @@ -183,7 +183,7 @@ committer 李亮亮 1698050920 +0800 这个时候,关系链变成了这样: -![image](/files/assets/image-20231023170924-eeck5wr.png)​ +![image](https://blog-image.lianglianglee.com/assets/image-20231023170924-eeck5wr.png)​ 到这里基本确定了objects的存储方式。既然是一个树,那怎么知道根节点是哪个呢? diff --git a/source/_posts/hexo-cloudflare.md b/source/_posts/hexo-cloudflare.md index d89b6e0..3bb33bd 100644 --- a/source/_posts/hexo-cloudflare.md +++ b/source/_posts/hexo-cloudflare.md @@ -109,12 +109,12 @@ NODE_VERSION 14.3 确定后,即开始构建,构建完成后,可以在右上角看到临时域名 -![](/files/assets/depoly_detail.png) +![](https://blog-image.lianglianglee.com/assets/depoly_detail.png) 返回你的项目 -![](/files/assets/cloudflare_page.png) +![](https://blog-image.lianglianglee.com/assets/cloudflare_page.png) 可以看到项目的永久域名,后续都可以使用这个域名访问 @@ -124,7 +124,7 @@ NODE_VERSION 14.3 添加CNAME -![](/files/assets/dns_config.png) +![](https://blog-image.lianglianglee.com/assets/dns_config.png) 等待10-30分钟,即可访问 diff --git a/source/_posts/mysql-engines.md b/source/_posts/mysql-engines.md index a7a8d95..0a30937 100644 --- a/source/_posts/mysql-engines.md +++ b/source/_posts/mysql-engines.md @@ -13,13 +13,13 @@ MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这 show engines; ``` -![](/files/assets/tih4p92cmigv3qr02q3avl3src.png) +![](https://blog-image.lianglianglee.com/assets/tih4p92cmigv3qr02q3avl3src.png) ## 查看已有表信息 :show table status like 'user' \G -![](/files/assets/0aa6rm8psaif1pjt86nud1ealp.png) +![](https://blog-image.lianglianglee.com/assets/0aa6rm8psaif1pjt86nud1ealp.png) **Name**:表名 diff --git a/source/_posts/mysql-lite.md b/source/_posts/mysql-lite.md index 00b89a5..5e2c068 100644 --- a/source/_posts/mysql-lite.md +++ b/source/_posts/mysql-lite.md @@ -6,7 +6,7 @@ date: '2023-04-04T13:00:07.258Z' --- # 1. 简介 -MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程![image.png](/files/assets/image-20221008195359-0baltm2.png)​ +MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程![image.png](https://blog-image.lianglianglee.com/assets/image-20221008195359-0baltm2.png)​ 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 1. Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 @@ -24,7 +24,7 @@ MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 My MyISAM 引擎是 MySQL5.5 版本(不含)之前的数据库所默认的数据表引擎。每一个采用 MyISAM 引擎的数据表在实际存储中都是由三个文件组成,分别是 frm 文件,MYD 文件和 MYI 文件,文件后缀为上述三个,文件名与数据表名相同。一个典型的 MyISAM 类型的数据表如下图(红框部分)所示: -​![image](/files/assets/image-20221013142251-odk822t.png)​ +​![image](https://blog-image.lianglianglee.com/assets/image-20221013142251-odk822t.png)​ frm 文件保存表的结构 @@ -78,7 +78,7 @@ MEMORY 存储引擎拥有极高的插入,更新和查询效率 聚簇索引是索引的叶子节点上存储的数据。一张表只能有一个。因为 Innodb 引擎必须有主键,因为数据在聚簇索引上,及时不设置主键,Innodb 也会生成一个主键【DB_ROW_ID】。Innodb 中的除主键外的索引都是非聚簇索引(二级索引)。非聚簇索引上存放的是主键的数据,从而根据主键查找实际的数据(回表)。 -​![image.png](/files/assets/image-20221008195619-a1o1jlv.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008195619-a1o1jlv.png)​ ## 2.2 非聚簇索引 @@ -468,7 +468,7 @@ MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所 顾名思义,行锁就是针对数据表中行记录的锁。这很好理解,比如事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。 -​![image.png](/files/assets/image-20221008194341-ol5iakt.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008194341-ol5iakt.png)​ **在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。** @@ -484,7 +484,7 @@ innodb_lock_wait_timeout:死锁等待的超时时间,默认为 50s,意味 当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。这里我用数据库中的行锁举个例子 -​![image.png](/files/assets/image-20221008194533-hogldh7.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008194533-hogldh7.png)​ 这时候,事务 A 在等待事务 B 释放 id=2 的行锁,而事务 B 在等待事务 A 释放 id=1 的行锁。 事务 A 和事务 B 在互相等待对方的资源释放,就是进入了死锁状态。当出现死锁以后,有两种策略: @@ -502,7 +502,7 @@ innodb_lock_wait_timeout:死锁等待的超时时间,默认为 50s,意味 * **共享锁(S 锁):**共享锁允许一个事务读数据,不允许修改数据,如果其他事务要再对该行加锁,只能加共享锁; * **排它锁(X 锁):**排他锁是修改数据时加的锁,可以读取和修改数据,一旦一个事务对该行数据加锁,其他事务将不能再对该数据加任务锁。 -​![image.png](/files/assets/image-20221008201113-yjyu78x.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008201113-yjyu78x.png)​ ### 8.1.6 相关文档 @@ -524,9 +524,9 @@ alter table sbtest1 add column h int(11) default null,algorithm=inplace; * inplace:无需拷贝全表数据到新表,但可能还是需要 IN-PLACE 方式(原地,无需生成新的临时表)重建整表。这种情况下,在 DDL 的初始准备和最后结束两个阶段时通常需要加排他 MDL 锁(metadata lock,元数据锁),除此外,DDL 期间不会阻塞 DML * instant:只需修改数据字典中的元数据,无需拷贝数据也无需重建整表,同样,也无需加排他 MDL 锁,原表数据也不受影响。整个 DDL 过程几乎是瞬间完成的,也不会阻塞 DML。这个新特性是 8.0.12 引入的(腾讯提交的补丁)。 -​![image.png](/files/assets/image-20221008192941-c13f3bz.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008192941-c13f3bz.png)​ -​![image.png](/files/assets/image-20221008192924-dkgljj2.png)​ +​![image.png](https://blog-image.lianglianglee.com/assets/image-20221008192924-dkgljj2.png)​ > MySQL 会自己决策使用哪种方式,一般不需要指定 diff --git a/source/_posts/omv-data-to-truenas.md b/source/_posts/omv-data-to-truenas.md index f3aee60..f2f6e21 100644 --- a/source/_posts/omv-data-to-truenas.md +++ b/source/_posts/omv-data-to-truenas.md @@ -46,13 +46,13 @@ docker run -d -v /srv/dev-disk-by-uuid-XXXXXX-XXX-XXX-XX/disk1:/var/webdav -e US 4. 开始手动同步 速度: -![](/files/assets/20230406_155750.png) +![](https://blog-image.lianglianglee.com/assets/20230406_155750.png) 基本能跑到850Mbps以上 老NAS的CPU占用: -![](/files/assets/old_nas_cpu_use.png) +![](https://blog-image.lianglianglee.com/assets/old_nas_cpu_use.png) ## 应用迁移 @@ -64,11 +64,11 @@ docker run -d -v /srv/dev-disk-by-uuid-XXXXXX-XXX-XXX-XX/disk1:/var/webdav -e US 需要注意,在portainer中的CMD 对应TrueNAS的Container Args,而且有空格就要隔开,比如`-mode prod -workspace /siyuanworkspace -accessAuthCode password`,就要按照空格一个一个拆开 -![](/files/assets/20230406_162245.png) +![](https://blog-image.lianglianglee.com/assets/20230406_162245.png) 因为我需要独立的IP,所以在网络使用了独立的静态IP -![](/files/assets/20230406_161755.png) +![](https://blog-image.lianglianglee.com/assets/20230406_161755.png) 映射一下文件夹 @@ -78,7 +78,7 @@ docker run -d -v /srv/dev-disk-by-uuid-XXXXXX-XXX-XXX-XX/disk1:/var/webdav -e US **关于文件夹权限** 我习惯将Dock挂载的目录也SMB共享出来,方便修改配置之类的,TrueNAS默认不允许这样干,则需要进入`应用`-> `设置`-> `高级设置` 关闭`Enable Host Path Safety Checks` -![](/files/assets/20230406_162603.png) +![](https://blog-image.lianglianglee.com/assets/20230406_162603.png) 同意将docker挂载的目录分到一个docker文件夹下,大概目录是这样 diff --git a/source/_posts/pve-copy-centos-network-fail.md b/source/_posts/pve-copy-centos-network-fail.md new file mode 100644 index 0000000..c764b51 --- /dev/null +++ b/source/_posts/pve-copy-centos-network-fail.md @@ -0,0 +1,47 @@ +title: PVE复制CentOS导致网卡启动失败的问题 +tags: [] +categories: [] +date: 2023-11-30 14:42:03 +--- + + +# 背景 + +因为最近在折腾一些linux相关的软件,所以需要频繁创建Centos虚拟机,故使用了PVE的模板功能,配置好必须的软件,作为一个模板,这样虚拟机创建更快。 + +缺点: + +- hostname一样,每个虚拟机需要改一下 +- 网络因为使用的静态IP,复制完成后,需要改一下IP + +修改完IP后,发现网络无法启动了 + +# 排查 + +查看日志:`journalctl -xe`​ + +![image](https://blog-image.lianglianglee.com/assets/image-20231129104735-a92h5s7.png)​ + +核心报错: + +```sql +connection activation failed no suitable device found for this connection +``` + +连接激活失败,未找到适合此连接的设备。 + +也就是说网卡找不到。 + +查看配置 + +![image](https://blog-image.lianglianglee.com/assets/image-20231129105007-obzvhzr.png)​ + +发现网卡物理地址有配置,而且复制虚拟机基于虚拟磁盘复制,此文件肯定不会变。故这个网卡地址是一样的。PVE复制的时候又会生成新的网卡地址。 + +# 修复 + +变更网卡地址即可,寻找PVE生成的网卡地址 + +![image](https://blog-image.lianglianglee.com/assets/image-20231129105152-ina6aoi.png)​ + +然后更新到centos配置文件中,重启网络,即可解决。 \ No newline at end of file diff --git a/source/_posts/self-website-upgrade.md b/source/_posts/self-website-upgrade.md index 5174529..e24fda6 100644 --- a/source/_posts/self-website-upgrade.md +++ b/source/_posts/self-website-upgrade.md @@ -12,28 +12,28 @@ date: 2023-04-13 13:58:25 服务以Java jar的形式在服务器上直接运行,外层套一个nginx作端口及域名中转发 域名直接解析到云服务器,用户可以通过DNS轻而易举拿到云服务器IP,然后攻击。 当时碰到了SSH暴力破解,网站被爬虫刷流量 -![](/files/assets/20230413_140305.png) +![](https://blog-image.lianglianglee.com/assets/20230413_140305.png) ## CDN模式 -![](/files/assets/20230413_140212.png) +![](https://blog-image.lianglianglee.com/assets/20230413_140212.png) 目前常用的隐藏源站IP的方式就是在外层套一个CDN。比如阿里云的DCDN加速。其原理就是在外层再套一个nginx类服务。因为云服务厂商有更充足的带宽和计算资源,还有更充足的异常请求检查算法,比自己建设要好不少。 引入cloudflare主要原因是其有免费的基础服务,基本够我使用。引入DCDN还有一个好处就是可以查看请求量的简要信息。 接入及其简单,只需要在购买域名的平台将域名服务器切换到cloudflare提供的即可。 -![](/files/assets/20230413_140508.png) +![](https://blog-image.lianglianglee.com/assets/20230413_140508.png) ## 引入分析 网站部署起来后,就要想办法分析服务相关信息,比如PV,UV等等。第一反应引入第三方网站。比如google analytics。该服务国内可用。引入也很简单,只需要引入一个JS文件即可。 引入后发现其数据比较离谱,后来发现是因为浏览器自带的防跟踪功能,会屏蔽掉这些数据分析的服务商 -![](/files/assets/20230413_140810.png) +![](https://blog-image.lianglianglee.com/assets/20230413_140810.png) 如果真的要分析PVUV,则需要自建服务。经过一番调研,采用了umami自建服务。 使用docker-compose部署一个umami + postgreSQL。然后域名定义成 analyze.***.com,同样交给cloudflare作CDN。 使用同样简单,在网站中引入一个JS文件即可。 采集后的分析 -![](/files/assets/20230413_140617.png) +![](https://blog-image.lianglianglee.com/assets/20230413_140617.png) ## 自恢复 算算服务器上部署了几个程序: diff --git a/source/_posts/tampermonkey-save-51cto-to-html.md b/source/_posts/tampermonkey-save-51cto-to-html.md index 090de83..a5fb2b3 100644 --- a/source/_posts/tampermonkey-save-51cto-to-html.md +++ b/source/_posts/tampermonkey-save-51cto-to-html.md @@ -48,7 +48,7 @@ console.log(JSON.stringify(value)) 可以看到抓取到了url及标题。 -![image](/file/assets/20231112_143701.png) +![image](https://blog-image.lianglianglee.com/assets/20231130144903.png) 怎么解决存储的问题呢?因为每次刷新页面都会丢失这些数据。最简单的方案,直接用localStorage,所以需要提供一个获取和存储的方法 diff --git a/source/_posts/use_js_save_time_geek.md b/source/_posts/use_js_save_time_geek.md index 31e57e7..1d7544e 100644 --- a/source/_posts/use_js_save_time_geek.md +++ b/source/_posts/use_js_save_time_geek.md @@ -383,11 +383,11 @@ markdown转换使用CopyDown 查看执行效果: 目录: -![](/files/assets/20230803_183347.png) +![](https://blog-image.lianglianglee.com/assets/20230803_183347.png) 图片: -![](/files/assets/20230803_183713.png) +![](https://blog-image.lianglianglee.com/assets/20230803_183713.png)