作者归档:caspian

pve备份实例

备份目录一般在/var/lib/vz/dump,如果在备份时指定了存储节点,则会存放在存储

节点的dump目录下,这里我有另一块硬盘当数据盘,因此存储在/data/dump/下,

备份完成后生成一个带有VM ID的压缩文件vzdump-qemu-101-2020_11_14-19_31_53.vma.zst

恢复时,虚拟机的VM ID有可能和当前已经拥有的虚拟机ID冲突,所以在恢复时,要注意看下空闲的ID号是多少。
这里查看到新PVE的机上没有104这个ID,可以用这个ID号,然后执行以下命令恢复:qmrestore file id

qmrestore vzdump-qemu-101-2020_11_14-19_31_53.vma.zst 100

 

将lvm里的raw镜像转换为qcow2镜像
SHELL登陆宿主机,执行下面命令:
【2020.11补充】重要:先执行 ls /dev/mapper/ 查看一下具体的存储名和硬盘名,以免搞混。

如图,pve和VM–LVM是你WEB界面可以看到的存储名(local存储显示为你的节点名),后面跟上的vm–100–disk–0是ID为100虚拟机的虚拟磁盘。

继续执行如下命令:

qemu-img convert -O qcow2 -c /dev/mapper/pve-vm–110–disk–0 VM110.qcow2

#其中pve-vm–110–disk–0是上图硬盘的名,注意格式对应修改,VM110.qcow2是转换到当前目录的文件名。
#可以再打开一个SHELL窗口,执行下面命令查看转换进度(结果显示在上面命令的下方)

pkill -USR1 -n -x qemu-img

导入QCOW2磁盘镜像文件到新创建的虚拟机
SHELL登陆目标PVE宿主机,执行下面命令:

qm importdisk <vmid> <source> <storage>

#例子:qm importdisk 101 VM110.qcow2 local-lvm
#上面101是新建虚拟机的VM ID,VM110.qcow2是复制过来的QCOW2磁盘镜像文件,local-lvm是你的存储ID。

 

先通过 lvs 命令查看虚拟机所设置的空间大小

然后执行 lvdisplay 来查看具体路径,我这个的路径是 /dev/pve/vm-100-disk-0

执行下边的命令将空间大小减小2G

lvreduce -L -2G /dev/pve/vm-100-disk-0

执行下边的命令将空间大小增加2G

lvresize -L +2G /dev/pve/vm-100-disk-0

 

AX6600 XT8 Hard Factory Reset

My reset process that worked:

1. Turn of node
2. Hold down WPS Button, keeping it pressed
3. Turn on node
4. Node will light white, then turn off light
5. Keep holding WPS Button
6. Node will start to blink green
7. Keep holding WPS button
8. Node will turn off light again
9. Turn off node
10. Turn on node – and it will be reset (at least mine did)

I also wasted hours thinking the first time light was turned off was sufficient.

Also, it seems like I had to reset main node first, if not it seemed like slave node some how connected to main node and re synced old config. I noticed when resetting slave node first, it initially started with default SSID (ASUS_80), then changed to a new very long named one for a brief moment – then it connected to main node again.

Doing main node first, seemed to make a difference.

Centos7系统配置上的变化(二)网络管理基础

一、ip route显示和设定路由

1、显示路由表

[root@centos7 ~]# ip route show
default via 192.168.150.254 dev enp0s3  proto static  metric 1024
192.168.150.0/24 dev enp0s3  proto kernel  scope link  src 192.168.150.110

太难看了,格式化一下(显示的是默认网关和局域网路由,两行的内容没有共通性):

[root@centos7 tmp]# ip route show|column -t
default           via  192.168.150.254  dev    enp0s3  proto  static  metric  1024
192.168.150.0/24  dev  enp0s3           proto  kernel  scope  link    src     192.168.150.110

2、添加静态路由

复制代码
[root@centos7 ~]# ip route add 10.15.150.0/24 via 192.168.150.253 dev enp0s3
[root@centos7 ~]#
[root@centos7 ~]# ip route show|column -t
default           via  192.168.150.254  dev    enp0s3  proto  static  metric  1024
10.15.150.0/24    via  192.168.150.253  dev    enp0s3  proto  static  metric  1
192.168.150.0/24  dev  enp0s3           proto  kernel  scope  link    src     192.168.150.110
[root@centos7 ~]#
[root@centos7 ~]# ping 10.15.150.1
PING 10.15.150.1 (10.15.150.1) 56(84) bytes of data.
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.77 ms
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.08 ms
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.57 ms
^C
复制代码

3、删除静态路由

只需要把 add 替换成 del,或者更简单的只写目标网络

[root@centos7 ~]# ip route del 10.15.150.0/24

 

二、设置永久的静态路由

1、添加永久静态路由

ip route 指令对路由的修改不能保存,重启就没了。把 ip route 指令写到 /etc/rc.local 也是徒劳的。

RHEL7官网文档没有提到 /etc/sysconfig/static-routes,经测试此文件已经无效;

/etc/sysconfig/network 配置文件仅仅可以提供全局默认网关,语法同 Centos6 一样: GATEWAY=<ip address> ;

永久静态路由需要写到 /etc/sysconfig/network-scripts/route-interface 文件中,比如添加两条静态路由:

[root@centos7 ~]# vi /etc/sysconfig/network-scripts/route-enp0s3
10.15.150.0/24 via 192.168.150.253 dev enp0s3
10.25.250.0/24 via 192.168.150.253 dev enp0s3

 

重启计算机,或者重新启用设备enp0s3才能生效。

[root@centos7 ~]# nmcli dev connect enp0s3

 

一般直接连接一次设备即可,如果不成功就先断开设备再连接设备,注意必须两个指令一起运行,否则,,,,,,你晓得。

[root@centos7 ~]# nmcli dev disconnect enp0s3 && nmcli dev connect enp0s3

 

 

2、清除永久静态路由

可以删除 ifcfg-enp0s3文件或者注释掉文件里的相应静态路由条目,重启计算机。

想要让修改后的静态路由立即生效,只能用 ip route del 手工删除静态路由条目。

 

实验的过程中出现两个奇怪的现象:

1)有时候路由生效了但是在 ip route show 却没有显示,重启计算机后是肯定显示的,原因暂时不明。

2)存在多个网卡时,默认路由似乎是随机经由某个网卡设备。检查了所有连接配置文件后发现,第一网卡的默认连接配置文件 ifcfg-eth0 设置了GATEWAY0(此设置会覆盖/etc/sysconfig/network 定义的全局默认网关),第二网卡的连接配置文件 ifcfg-eth1 使用的是dhcp,会在启动时也分配默认网关,两个默认网关让计算机糊涂了。这是在测试系统里经常发生的现象,生产系统一般不会让网卡用dhcp,或者即使是用了也会仔细分配默认网关防止冲突。

 

其他需要注意的:

1)连接配置文件 ifcfg-* 里可以设置多个GATEWAY,一般第一个是 GATEWAY0,然后GATEWAY1, GATEWAY2… ,尾号最大的有效;

2)如果必须在/etc/sysconfig/network 文件定义全局网关,连接配置文件 ifcfg-* 就不要设置GATEWAY了,dhcp的连接要注意dhcp服务器不要定义默认网关。

3)ifcfg-enp0s3 文件改名为 ifcfg-eth0 后,route-enp0s3 文件也要改名为 route-eth0。

分享openwrt另一种ipv6的配置

https://www.right.com.cn/forum/thread-4090898-1-1.html

插个图修正一下
============================================================================================================

假设 IPV6-PD 为 /60 的前缀 240e:3c1:5665:ddXY::/60 。就是意味着:

X 这个 60 位是 ISP 分配给你的,也是固定的,Y 这个位才是子网的位数,而 IPV6 都是 16 进制,各位大佬都知道就是 0-F 这样,也就是说后 64 位 SLAAC 方式能分出 16 个子网 /64 的。

240e:3c1:5665:dd70::/60 这个前缀可以分成

2 个 /61 子网:

240e:3c1:5665:dd70::/61
240e:3c1:5665:dd78::/61

4 个 /62 子网

240e:3c1:5665:dd70::/62
240e:3c1:5665:dd74::/62
240e:3c1:5665:dd78::/62
240e:3c1:5665:dd7c::/62

8 个 /63 子网

240e:3c1:5665:dd70::/63
240e:3c1:5665:dd72::/63
240e:3c1:5665:dd74::/63
240e:3c1:5665:dd76::/63
240e:3c1:5665:dd78::/63
240e:3c1:5665:dd7a::/63
240e:3c1:5665:dd7c::/63
240e:3c1:5665:dd7e::/63

16 个 /64 子网

240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64

这个理解了的话。

============================================================================================================

下面开始说路由了:

先说非级联(只有一级路由),非级联就是多口 LAN ( VLAN )分子网

一级路由

WAN 获取 IPV6-PD 240e:3c1:5665:dd70::/60
LAN1,LAN1 可以 以 240e:3c1:5665:dd70::/60 下发,只有一个大子网。

和上面划分子网方式一样,可以分 LAN1-LAN16 。每个不同的 LAN 口分配 240e:3c1:5665:dd70::/64~240e:3c1:5665:dd7F::/64 的不同子网。来区分不同的使用情况,比如 LAN1 对应于家里的物联设备。LAN2 是普通上网设备云云。

但大多数路由,默认情况下,不会直接使用 /60 这么大的一个子网,为了方便使用和节省运力,还有所谓的兼容性,反正只有一级,所以默认下是从 /60 里随意抽了一个 /64 的子网,一般是抽 0,也就是 240e:3c1:5665:dd70::/64 开始分配 LAN1 下的设备。

LAN1 设备获取的 ip 地址均为 240e:3c1:5665:dd70:开头,也是大多家用的路由的默认下对IPV6-PD的配置。

============================================================================================================

级联,IPV6-PD 就要算算子网问题了

一级路由

WAN 获取 240e:3c1:5665:dd70::/60 前缀。

LAN 以 240e:3c1:5665:dd70::/60 下发
LAN 的 IPV6 地址 240e:3c1:5665:dd70::1 (假设设定为::1)

二级路由

WAN 获取的 IPv6 地址永远都是 /64 的,240e:3c1:5665:dd70:1111:2222:3333:4444/64
WAN 获得了一个  IPV6-PD 前缀:240e:3c1:5665:dd78::/61

LAN 以 240e:3c1:5665:dd78::/61 下发
LAN 的 IPV6 地址为 240e:3c1:5665:dd78::1

这样二级路由下发PD就只有剩下的一半子网了。
因为 240e:3c1:5665:dd70::/61 这段,一级路由的 LAN 段抽了 240e:3c1:5665:dd70::/64 用了啊。
虽然 240e:3c1:5665:dd71::/64~240e:3c1:5665:dd77::/64 这段并没有使用。

当然一级路由也可以 分子网一样,用了 LAN2~LAN8 (均以 /64 分配)

三级路由( WAN 接二级 LAN )

WAN 获取的 IPv6/64,240e:3c1:5665:dd78:aaaa:bbbb:cccc:dddd/64
WAN 获得前缀:240e:3c1:5665:dd7c::/62

LAN 下发 240e:3c1:5665:dd7c::/62
LAN 的 IPV6 地址为 240e:3c1:5665:dd7c::1

四级路由( WAN 接二级 LAN )同理

WAN 获取的 IPv6/64,240e:3c1:5665:dd7c:aaaa:1111:cccc:2222/64
WAN 获得前缀:240e:3c1:5665:dd7e::/63

LAN 下发 240e:3c1:5665:dd7e::/63
LAN 的 IPV6 地址为 240e:3c1:5665:dd7e::1

五级路由( WAN 接二级 LAN )同理

WAN 获取的 IPv6/64,240e:3c1:5665:dd7e:aaaa:3333:cccc:4444/64
WAN 获得前缀:240e:3c1:5665:dd7f::/64

LAN 下发 240e:3c1:5665:dd7f::/64
LAN 的 IPV6 地址为 240e:3c1:5665:dd7f::1

好了,到了这里就是 /64 了,如果还接一个路由,如果还是以 SLAAC 方式
就只能用 NAT6,一类本地地址了。当然这里用 WAN 接 LAN,去掉 ipv4 协议的穿透方式让六级路由获取五级同级的 ipv6 子网段也是可以的。

当然,可以继续用statful模式,占用主机位继续下发。能一直到 /128位。(注:目前全球公网地址前缀,在op中不能申请小于/64的前缀)

另外:特殊情况是,从一个/60的大子网中抽取了一个/64的 0,假如没有其他子网使用后面的/64段位,实际上可以 级联16个子网。(跨子网段并没有测试,有兴趣可以自己尝试,图在最后。)

简单说,看下面图示了。

============================================================================================================

然后变种一下。假如一级路由。分了 4 个 VLAN,一开始就分了 /62 4 个子网。按上面的说法,就是最多挂 3 级路由就 over 了。

当然对于家用,已经 100%够用了。

============================================================================================================

所以说白了,不是说给的 ip 地址不够多,是多,说人话就是说,你一个 /64 的子网能接入 NNNN 多个设备,毕竟 SLAAC 都好,后面 64 位的主机位能让你的 IP 地址数量数不完,只是子网这个货色,一般是用来区分网络分区作用多些。

就好比非子网,不同网段 192.168.1.0~192.168.254.0,你都能设置 1~254 这样的区域,如 192.168.1.0 和 192.168.2.0 这样的不同网段LAN。

而 IPV6 中除了一开始从一级路由平层分开或者级联 /60 前缀为 /64 的 16 个子网外,用 ip6tabel 禁止每个子网相互通信外,或者 vlan 隔离,级联中就得考虑只有这 16 个子网的 1 、2 、4 、8 、16 的分配法而已。

============================================================================================================

然后关于PD下发的LAN设置和PD的获取。

WAN口要获得PD前缀

一级路由PPPoE是try

二级路由在WAN6口,为DHCPv6中设置请求指定长度的ipv6前缀,也可以写上想要请求的位数(上文能理解的话),获得ipv6地址可以disable。

一级路由的LAN的配置中,如果不需要继续下发PD,DHCP中ipv6设置,只需要第一项,路由通告服务:服务器模式,即可。LAN下所有设备都会获得WAN的PD的IPV6地址。

如果需要把PD下发到二级路由,第二项才需要设置,DHCPv6:服务器模式。这个才是把IPV6-PD下发到二级路由。

第三个配置。NDP这个是网络邻居发现,关闭也不影响。

============================================================================================================

举例就是

假如你有一个一级路由,给你240e:3c1:5665:dd70::/60 前缀,你有三个LAN,其中一个LAN口接了个二级路由。


那 LAN1 【常规】配置页面,指定长度的ipv6前缀:/61,ipv6分配提示:0;在LAN1的【DHCP服务器-IPV6设置】中配置:路由通告服务:服务器模式,DHCPv6:服务器模式,DHCPv6 模式:无状态。LAN1可以继续接二级路由。

LAN1 的 /61 用去了 0-7,但LAN1这个LAN段本身要用去一个子网,所以二级路由的PD前缀,最多也只能是240e:3c1:5665:dd74::/62了(240e:3c1:5665:dd70::/62段用去了LAN1下设备了。),当然默认情况,路由还是从240e:3c1:5665:dd74::/62中选 240e:3c1:5665:dd74::/64子网段的。如果不去设置它,那也就无法继续接三级路由了。
LAN2 【常规】配置页面,指定长度的ipv6前缀:/64,ipv6分配提示:8;在LAN1的【DHCP服务器-IPV6设置】中配置:路由通告服务:服务器模式,DHCPv6:已禁用,DHCPv6 模式:无状态。LAN2不接二级路由。

LAN3 【常规】配置页面,指定长度的ipv6前缀:/64,ipv6分配提示:e;在LAN1的【DHCP服务器-IPV6设置】中配置:路由通告服务:服务器模式,DHCPv6:已禁用,DHCPv6 模式:无状态。LAN2不接二级路由。

当然ipv6分配提示不填也行,如果自己想有些主动权,想用不同的0-f标识不同的LAN,就可以根据子网的计算来自行设定。另外,LAN1+LAN2+LAN3子网数 不超过 /60 就行。就是LAN1 /61 +  LAN2 /62+ LAN3 /62

============================================================================================================

实际要是有 /56 。个人的可选择的空间就多了。/60 只有区区16个子网数,IP地址数是上亿,子网只有16个而已。

毕竟如果 一开始分了 /62 四个子网 LAN ,继续接二级路由,可用子网数就少了。

说这么多,看得懂得话,就知道,次一级得路由得子网因为WAN-LAN这样得模式PD,实际上二级路由的子网就是被包含在一级的子网内的。 /61 0-7或者 8-F 。那么 /62 0-3 和 /62 4-7 就在 /61 0-7子网内的(/64这个除外的)。

============================================================================================================


以下是具体的案例:

Proxmox 6.x 升级到7.0步骤

Proxmox 6.x 升级到7.0步骤
首先需要升级到6.4的最新版本
删除企业源

rm -rf /etc/apt/sources.list.d/pve-enterprise.list

下载秘钥

wget http://mirrors.ustc.edu.cn/proxmox/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg

添加国内源

echo “deb http://mirrors.ustc.edu.cn/proxmox/debian/pve buster pve-no-subscription” >/etc/apt/sources.list.d/pve-install-repo.list

配置国内debian源

echo “deb http://mirrors.ustc.edu.cn/debian buster main contrib
deb http://mirrors.ustc.edu.cn/debian buster-updates main contrib
deb http://mirrors.ustc.edu.cn/debian-security buster/updates main contrib” > /etc/apt/sources.list

 

pve_ceph设置国内源

echo deb http://mirrors.ustc.edu.cn/proxmox/debian/ceph-nautilus buster main > /etc/apt/sources.list.d/ceph.list

 

然后执行:

apt update && apt dist-upgrade

 

重启后就是6.4的最新版本,接下来再进行7.0的升级

在升级到6.4新版后可以通过脚本进行升级检查,因为有些自定义的应用可能升级后无法使用因此需要检查并报告内容,但这个脚本不会修复问题。

运行检查:

pve6to7 –full

 

我的结果是这样,三个警告不用管直接升级就行了

= SUMMARY =

TOTAL: 25
PASSED: 20
SKIPPED: 2
WARNINGS: 3
FAILURES: 0

检查完后开始改源

将Debian的源升级下

sed -i 's/buster\/updates/bullseye-security/g;s/buster/bullseye/g' /etc/apt/sources.list

 

软件源修改

sed -i -e 's/buster/bullseye/g' /etc/apt/sources.list.d/pve-install-repo.list

 

企业源(如果是按照我前面步骤删除过企业源这步可以不做):

echo "deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list

 

ceph源修改

echo deb http://mirrors.ustc.edu.cn/proxmox/debian/ceph-octopus bullseye main > /etc/apt/sources.list.d/ceph.list

 

然后进行更新

apt update && apt dist-upgrade

 

中途会有一些交互需要确认,都默认回车即可。

原文链接:https://blog.csdn.net/qq_37581557/article/details/118603151

使用Python发送企业微信消息

准备工作:

到企业微信官网,注册一个企业;登录企业微信后台,创建一个“自建”应用, 获取企业ID、agentid、secret这3个必要的参数;在企业微信的通讯录中,创建多个测试账号;在手机端安装“企业微信”APP,使用测试账号登录到企业微信,准备接收消息。

程序代码:

企业微信提供API开发接口,通过HTTPS的GET、POST方法与企业微信后台进行交互,完成获取令牌、发送数据、获取数据的操作。

Python代码主要使用requests库,将企业微信API进行简单封装,模拟https的GET、POST操作,向指定的用户发送企业微信消息。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import time
import requests
import json
 
 
class WeChat:
    def __init__(self):
        self.CORPID = 'ww2e1234567895498f5498f'  #企业ID,在管理后台获取
        self.CORPSECRET = 'xy11234567898hk_ecJ123456789DhKy4_1y12345OI'#自建应用的Secret,每个自建应用里都有单独的secret
        self.AGENTID = '1000002'  #应用ID,在后台应用中获取
        self.TOUSER = "maomao|dingding"  # 接收者用户名,多个用户用|分割
 
    def _get_access_token(self):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
        values = {'corpid': self.CORPID,
                  'corpsecret': self.CORPSECRET,
                  }
        req = requests.post(url, params=values)
        data = json.loads(req.text)
        return data["access_token"]
 
    def get_access_token(self):
        try:
            with open('./tmp/access_token.conf', 'r') as f:
                t, access_token = f.read().split()
        except:
            with open('./tmp/access_token.conf', 'w') as f:
                access_token = self._get_access_token()
                cur_time = time.time()
                f.write('\t'.join([str(cur_time), access_token]))
                return access_token
        else:
            cur_time = time.time()
            if 0 < cur_time - float(t) < 7260:
                return access_token
            else:
                with open('./tmp/access_token.conf', 'w') as f:
                    access_token = self._get_access_token()
                    f.write('\t'.join([str(cur_time), access_token]))
                    return access_token
 
    def send_data(self, message):
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token()
        send_values = {
            "touser": self.TOUSER,
            "msgtype": "text",
            "agentid": self.AGENTID,
            "text": {
                "content": message
                },
            "safe": "0"
            }
        send_msges=(bytes(json.dumps(send_values), 'utf-8'))
        respone = requests.post(send_url, send_msges)
        respone = respone.json()   #当返回的数据是json串的时候直接用.json即可将respone转换成字典
        return respone["errmsg"]
 
 
if __name__ == '__main__':
    wx = WeChat()
    wx.send_data("这是程序发送的第1条消息!\n Python程序调用企业微信API,从自建应用“告警测试应用”发送给管理员的消息!")
    wx.send_data("这是程序发送的第2条消息!")

 

https://blog.csdn.net/CSDN_duomaomao/article/details/90193422

 

 

#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
import requests
import json,os


class WeChat_SMS:
    def __init__(self):
        self.CORPID = 'XXXX'#企业ID, 登陆企业微信,在我的企业-->企业信息里查看
        self.CORPSECRET = 'XXXXX'#自建应用,每个自建应用里都有单独的secret
        self.AGENTID = 'XXXX' #应用代码
        self.TOUSER = "XXX"# 接收者用户名,@all 全体成员
        self.TOPARY = "2"    #部门ID


    def _get_access_token(self):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
        values = {'corpid': self.CORPID,'corpsecret': self.CORPSECRET,}
        req = requests.post(url, params=values)
        data = json.loads(req.text)
        #print (data)
        return data["access_token"]

    def get_access_token(self):
        try:
            with open('access_token.conf', 'r') as f:
                t, access_token = f.read().split()
        except:
            with open('access_token.conf', 'w') as f:
                access_token = self._get_access_token()
                cur_time = time.time()
                f.write('\t'.join([str(cur_time), access_token]))
                return access_token
        else:
            cur_time = time.time()
            if 0 < cur_time - float(t) < 7200:#token的有效时间7200s
                return access_token
            else:
                with open('access_token.conf', 'w') as f:
                    access_token = self._get_access_token()
                    f.write('\t'.join([str(cur_time), access_token]))
                    return access_token

    def send_data(self, msg):
        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token()
        send_values = {
            "touser": self.TOUSER,
            #"toparty": self.TOPARY, 	#设置给部门发送
            "msgtype": "text",
            "agentid": self.AGENTID,
            "text": {
            "content": msg
            },
            "safe": "0"
        }
        send_msges=(bytes(json.dumps(send_values), 'utf-8'))
        respone = requests.post(send_url, send_msges)
        respone = respone.json()#当返回的数据是json串的时候直接用.json即可将respone转换成字典
        #print (respone["errmsg"])
        return respone["errmsg"]


if __name__ == '__main__':
    wx = WeChat_SMS()
    wx.send_data(msg="服务崩了,你还在这里吟诗作对?")
    #以下是添加对日志的监控
    # srcfile = u"G:/123.txt"
    # file = open(srcfile)
    # file.seek(0, os.SEEK_END)
    # while 1:
    #     where = file.tell()
    #     line = file.readline()
    #     if not line:
    #         time.sleep(1)
    #         file.seek(where)
    #     else:
    #         print(line)
    #         wx.send_data(msg=line)

https://blog.csdn.net/liyyzz33/article/details/86080936

linux格式化硬盘,挂载卸载硬盘

mkfs.ext4快速格式化大容量硬盘

安装ext4:

yum -y install e4fsprogs

使用如下命令可以快速格式化大容量硬盘:

mkfs.ext4 -T largefile /dev/xxx

$ mount /dev/hda2 /home
第一个叁数是与包括文件系统的磁盘或分区相关的设备文件。
第二个叁数是要mount到的目录。

$ umount /dev/hda2
$ umount /usr
参数可以是设备文件或安装点。

openvpn客户端配置注意

保持连接,在ovpn中添加

auth-user-pass password.txt
keepalive 10 60

在tun0中禁止IPv6,在/etc/sysctl.conf中

vi /etc/sysctl.conf
net.ipv6.conf.tun0.disable_ipv6 = 1

#save

sysctl -p

运行ovpn

screen -S openvpn
openvpn ***.ovpn > /dev/null &

停止openvpn

sudo pkill openvpn
sudo killall -9 openvpn
sudo service openvpn stop