2019年10月18日星期五

小米miui google photos无法备份的解决办法

把Google Play Store,Google Service Framework从神隐模式里排除,清除google photos数据,重启手机,重新打开就可以了。

esxi6.7安装高恪SX1200

下载底包,SX1200 x86标准版【新】:
http://docs.gocloud.cn/docs/chanpinshouce003/chanpinshouce003-1b7otg6u14k3k

获取到2018_11_16_SX1200.iso,上传到esxi存储。

新建虚拟机,Linux2.6 32位内核,2核,1G内存,8G硬盘,精简置备,IDE接口,添加1个网卡,选择ISO,开机,开始安装。

安装完成后在线升级1次。


2019年10月17日星期四

kvm导入esxi的方法

2种格式的转换命令完全一样:
convert centos7.img -O vmdk /root/centos7.vmdk -o compat6
convert centos7.qcow2 -O vmdk /root/centos7.vmdk -o compat6
compat6是为避免被转换为多个2G的文件

传到esxi的存储后,将其变成thin模式,减少空间占用
vmkfstools -i centos7.vmdk -d thin centos7-thin.vmdk

2019年7月24日星期三

金士顿256G sd卡在usb2.0和usb3.0读卡器下的测速

卡的规范是V30 A1,文件系统NTFS+簇32K,win10下测试。

做个小结,USB3.0的读卡器都能发挥出SD卡的最大读写,但比较有意思的是,USB3.0的4K读写速度反而比USB2.0要慢很多,USB3.0只有5M左右,USB2.0在11M左右,这是为什么?

绿巨能 LJN-CA1001 USB2.0 :

优越者 R002 USB3.0 GL3224芯片:



川宇 C286 USB2.0:


川宇 C396 USB3.0:

艾苏恩 USB3.0 GL3224芯片?:

川宇 C396 USB3.0+USB2.0接口:


川宇 C362 USB3.1(芯片RTS5329)+USB2.0接口:

川宇 C362 USB3.1(芯片RTS5329)+USB3.0接口:


2019年6月28日星期五

Centos7 编译安装miniupnpd

由于centos7的yum不带miniupnpd,所以只能编译安装。

参考:
https://github.com/miniupnp/miniupnp/blob/master/miniupnpd/INSTALL

下载:
wget https://github.com/miniupnp/miniupnp/archive/miniupnpd_2_1.tar.gz

安装依赖包:
yum install gcc uuid-devel iptables-devel -y

编译安装:
make -f Makefile.linux config.h
make -f Makefile.linux
make -f Makefile.linux install

生成的命令在/usr/sbin/miniupnpd
配置文件在/etc/miniupnpd/miniupnpd.conf

完成!

2019年6月26日星期三

Debian9 开启 FullCone NAT

上一篇是Centos 7 开启fullcone nat:
https://techshd.blogspot.com/2019/06/centos7-fullcone-nat.html

这一篇讲下Debian 9的,步骤几乎是一样的,重复的就不写的,这里提3点要attention的。

第一点是debian提供了多个版本的源码包,所以只要指定当前版本号的源码包安装就可以了,比如我的内核版本是4.9.0-9-amd64,那安装下面的包就有内核源码了。

apt install linux-headers-4.9.0-9-amd64 -y

第二点是依赖包,按下面的命令提前装上就行。

apt install build-essential autoconf libtool bison flex libnftnl-dev libmnl-dev -y

第三点切换到iptables v1.6

git checkout 54c262605c54a18a1c30cd41d47decaca5e7182e



Centos7 开启 FullCone NAT

作者和源码:https://github.com/Chion82/netfilter-full-cone-nat

步骤简要:
1.编译fullcone nat内核模块
2.编译iptables,嵌入fullcone nat模块

编译内核模块需要内核的源码,centos7安装kernel-devel即可下载内核源码到本地,但用yum安装的kernel-devel很可能是已经update过的,也就是和目前的系统内核版本不一致,所以为了保持一致,先升级kernel,顺便安装上kernel-devel。
yum install kernel kernel-devel -y

安装完重启使新内核生效。
uname -a

编译前先安装必要的包:
yum install gcc libtool -y

开始编译fullcone nat内核模块:
cd /usr/src
git clone https://github.com/Chion82/netfilter-full-cone-nat.git
cd netfilter-full-cone-nat
make

如果没有报错,内核模块已经生成在当前目录xt_FULLCONENAT.ko

将这个模块放到modules对应位置,建立模块依赖,载入模块。
cp /usr/src/netfilter-full-cone-nat/xt_FULLCONENAT.ko /lib/modules/`uname -r`/kernel/net/netfilter/
depmod -a
modprobe xt_FULLCONENAT

查看模块
lsmod | grep xt_FULLCONENAT


接下来编译iptables,centos7的iptables版本是v1.4.21,为了减少可能出现的兼容性问题,同样以这个版本来编译。

cd /usr/src
git clone git://git.netfilter.org/iptables
cd iptables
git checkout 482c6d3731e2681cb4baae835c294840300197e6
cp /usr/src/netfilter-full-cone-nat/libipt_FULLCONENAT.c /usr/src/iptables/extensions/
./autogen.sh
./configure
make
make install

checkout就是切换至v1.4.21版本,新编译的iptables位置在/usr/local/sbin/iptables,不会和原先的冲突。


编译安装完成,重启下系统使新的iptables生效。

接下来是使用方法。

通过iptables命令来开启fullcone nat,eth0是外网网卡
iptables -t nat -A POSTROUTING -o eth0 -j FULLCONENAT
iptables -t nat -A PREROUTING -i eth0 -j FULLCONENAT

注意这里和以往用法的不同,以往MASQUERADE只需要1条-o命令,FULLCONENAT需要2条命令,需要在-i入口处多添加1条。

测试:



2019年6月25日星期二

NAT类型理解简版

FullCone NAT:主机从A端口发送UDP,经过NAT设备,NAT设备会用一个固定端口B把这个UDP包发送出去,此时这个B端口会接受所有外网来的UDP包,并传发给主机。

Restricted Cone NAT:主机从A端口发送UDP,经过NAT设备,NAT设备会用一个固定端口B把这个UDP包发送给目标IP,此时这个B端口只会接受目标IP用任意源端口发来的包,并转发给主机。

Port Restricted Cone NAT:主机从A端口发送UDP,经过NAT设备,NAT设备会用一个固定端口B把这个UDP包发送给目标IP,此时这个B端口只会接受目标IP用特定源端口发来的包,并转发给主机,这个特定源端口就是目标IP接受UDP包时的目的端口。

Symmetric NAT:主机从A端口发送UDP,经过NAT设备,NAT设备每次都会用不同的端口把这个UDP包发送出去。

2019年6月15日星期六

Debian9 通过KVM安装爱快软路由3.2.1

先安装和配置好KVM和桥接,我这里br0为内网,br1为外网。

下载爱快ISO,这里以当前的最新版3.2.1为例
wget -O iKuai8_x64_3.2.1.iso https://www.ikuai8.com/download.php?n=/3.x/iso/iKuai8_x64_3.2.1_Build201906121726.iso

放置到对应位置,我这里是/opt/kvm/iso/iKuai8_x64_3.2.1.iso

创建KVM虚拟机:

virt-install --name=ikuai --vcpus=2 --ram=4096 \
--os-type linux \
--cdrom=/opt/kvm/iso/iKuai8_x64_3.2.1.iso \
--disk path=/opt/kvm/iKuai.img,format=qcow2,size=10,bus=sata \
--network bridge=br0,model=e1000 \
--noautoconsole \
--graphics vnc,listen=0.0.0.0,port=5901

# 这是最重要一步,做一些说明。
# CPU为2核,内存4G,爱快64位要求的最低内存为4G,如果小于4G,则无法安装。
# 网卡必须选e1000,不要用默认的,默认的会导致网络不通。
# 网络为桥接模式,只有一个网卡,这个会做为内网网卡,在安装完成后再添加外网网卡。

VNC连接上后就可以安装了,安装步骤很简单,这里就不详说了。

添加外网网卡,走之前配置好的br1,网卡Model同样为e1000。
virsh attach-interface ikuai --type bridge --source br1 --model e1000 --live --config

重启一次使网卡生效。
virsh reboot ikuai

重启完成后就可以配置外网拨号了。

另外如果你觉得分配的4G内存太大,在安装完成后可以将内存降低,我这里测试降低到1G也可以正常使用。

优化:上面是基本的安装方法,可以尽量避免遇到错误,在安装完成后,可以继续做进一步的优化,将网卡类型修改为virtio,驱动为vhost,这样做的好处是跳过网卡虚拟层,让虚拟机的网卡直接交给host的内核来处理,可以有效减少CPU的占用,我这里实测CPU从70%降低到了35%。
virsh edit ikuai
修改model那行,然后在下面添加一行
    <interface type='bridge'>
      <mac address='52:54:00:70:70:70'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <driver name='vhost'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
define使配置文件生效:
virsh define /etc/libvirt/qemu/ikuai.xml

重启使用虚拟机生效。
virsh reboot ikuai
完成!

2019年6月12日星期三

Debian9上通过KVM安装群晖

先配置好kvm环境,桥接模式。

下载创建群晖所需要的文件:
http://down.nas2x.com/synology/dsm/6.1/

这里是以6.17为例,只需要下载这2个文件:synoboot.img和DSM_DS3617xs_15284.pat,第一个文件是群晖的启动镜像,相当于boot分区,安装和启动群晖都要靠它,第二个是群晖真正的系统。

img文件上传到debian系统里的合适位置,我这里是放在/opt/kvm/iso/synoboot.img,pat文件就放在PC本地。

创建群晖系统:
virt-install --name=syno --vcpus=2 --ram=1024 \
--os-type linux \
--disk path=/opt/kvm/iso/synoboot.img,bus=sata \
--disk path=/opt/kvm/syno.img,format=qcow2,size=20,bus=sata \
--boot menu=on \
--network bridge=br0,model=e1000 \
--noautoconsole \
--graphics vnc,listen=0.0.0.0,port=5901

上面命令的解释和注意事项:
1.2 core cpu,1G内存,linux系统

2.创建2个img文件,也就是2块硬盘,第一个是启动盘,就是之前下载的,提前把文件放到对应的位置,第二个是群晖系统盘,20G,系统会被安装在这里,2块盘的类型都要选sata模式。

3.网络为桥接模式,另外网卡model指定为e1000,必须用这个model,如果不指定,默认会是rtl8139,导致网络不通。

4.vnc端口指定为5901

创建完成后,kvm会自动启动这个系统,此时就可以用vnc去连接5901端口,查看启动状态,判断是否启动成功,除此之外没有什么别的用处,不需要去操作什么。



然后在浏览器上打开这个网址:http://find.synology.com
会自动搜索局域网内的群晖,搜索到后,就可以开始安装了,安装模式选手动,然后选择之前下载的pat文件,等待1分钟左右,整个群晖的安装就完成了。

2019年6月3日星期一

kvm host os reboot or shutdown with guest shutdown immediately


when you shutdown or reboot kvm host os ,and you hope guset os shutdown immediately without wait,you can do this:

vi /etc/default/libvirt-guests
vi /etc/default/libvirt-guests
add in final
ON_SHUTDOWN=shutdown
SHUTDOWN_TIMEOUT=1
guest os will be destoryed if that can't shutdown within 1 second.

2019年5月26日星期日

软路由选Centos7还是Debian9的比较

先说结论:选Debian9

Centos7可能重心还是在企业市场,所以对这种软路由方面的优化还不是非常完善,这里说几点用Centos7做软路由时遇到的几个问题。

1.pppoe进程占CPU太高,在下载速度达到6MB的时候,pppoe进程占CPU 20%多,这点很奇怪,在debian9上几乎不占用CPU。

2.pppoe拔号的问题,某些情况下,比如运营商出现故障,此时正好又重启Centos7,那pppoe拔号就会无法成功,然后一直卡着,等待80秒超时后才会继续执行后面的服务,比如sshd服务,导致的现象时,ip已经可以ping通,但ssh要等待80多秒才可以连接上,而且后续也不会再进行pppoe拔号尝试。Debian9并没有这个问题。

3.ipv6的问题1,如果设置了net.ipv6.conf.all.forwarding=1,那系统启动时,日志里会报内核已经开启ipv6转发,但配置文件里并没有启用,并重启一次网络,导致网络启动变慢。解决方法是在ifcfg-里手动添加ipv6forwarding=yes,就连lo接口都要去添加,这点实在不够体贴,Debian9并没有此问题。

4.ipv6的问题2,ipv6转发需要安装wide-dhcpv6包,配置完成后,在启动时会报dhcp6cctlkey这个文件不存在,让人比较困惑是不是需要某个key,其实解决方法只要touch一个这样的空文件就可以了,为什么这个包里不带一个呢?Debian9没有这个问题,会带一个这样的文件,而且里面也有密钥,这个密钥是干吗不清楚,但至少不会遇到这样的报错。

综上所述,个人认为Debian9更适合拿来做软路由。

2019年5月24日星期五

Centos7开启TRIM的方法

安装hdparm:
yum install hdparm -y

检测硬盘是否支持TRIM:
hdparm -I /dev/sda | grep TRIM
   * Data Set Management TRIM supported (limit 8 blocks)

可以先手动TRIM一次:
fstrim --verbose --all
/boot: 752.3 MiB (788824064 bytes) trimmed
/: 89.1 GiB (95708200960 bytes) trimmed

开启TRIM服务,每周会TRIM一次,不需要手动TRIM:
systemctl status fstrim.timer
systemctl start fstrim.timer
systemctl enable fstrim.timer

另外,还可以将/tmp设置为tmpfs,这会将/tmp挂载在内存中,进一步优化SSD寿命。
systemctl start tmp.mount
systemctl enable tmp.mount

qBittortent-4.15已编译版本,适合cenots7和debian 9


centos7和debian 9上yum安装的qbit还是3.3.7版本,虽然可用,但的确有点老了,于是自己编译了一份,可以正常使用,100M宽带下载速度达到15MB极限。

centos 7下载链接:
https://yadi.sk/d/-LNkkSUzaV65aQ

debian 9 download:
https://yadi.sk/d/7ajLr7vWg3dxdw



Centos7 pppoe自动重连的方法

上篇blog讲了尽量不要让ifcfg-ppp0开机自启,用rc.local来启动的原因:
https://techshd.blogspot.com/2019/05/centos7-pppoesshd.html

然后启动脚本是:
pppoe-start >/dev/null 2>&1 &
sleep 1
killall pppoe-start
这篇讲下原因,因为某些情况下,比如运营商故障,导致pppoe-start一直无法拔号成功,那在超时80秒后,会被自身kill掉,并且不会再重试,除非手动再次执行。

这里先了解下pppoe-start的拔号过程,pppoe-start在执行后会调用pppoe-connect,这个才是真正去拔号的进程,然后pppoe-start会去监测是否拔号成功,如果成功,自身退出,如果超过80秒未成功,就会去kill掉connect再退出。

为了让它能一直重试,避免被kill掉,所以在后面加killall,pppoe-start进程没有了,但pppoe-start会一直不断的去尝试拔号,直到成功。


2019年5月23日星期四

Centos7 pppoe导致sshd启动慢的解决方法

pppoe-setup配置完成后会写入一个ifcfg-ppp0网卡的配置,正常情况下是不会影响sshd服务的。

但有一个特殊的情况,就是在系统启动时,pppoe由于某些原因没有拔号成功,此时这个网卡就会一直等待,在等待80秒超时退出后,才会继续启动后面的服务,比如sshd服务,导致的现象就是ip已经ping通了,但ssh要等待80多秒才可以连上。

解决方法:
将ifcfg-ppp0的ONBOOT修改为no,然后在rc.local里添加拔号:
pppoe-start >/dev/null 2>&1 &
sleep 1
killall pppoe-start
至于为什么要kill,下篇写。


代码插入存档备用
<pre class="code prettyprint">
代码放在此处
</pre>

更换阿里云源

CentOS 7: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http:/...