法国人……emmmm。其他家的系统模板都没问题,就你家有问题
在 configure 之前,加上 CLFAGS=-liconv LDFLAGS=-liconv LIBS=-liconv LIBM=-liconv 的环境变量再去编译
法国人……emmmm。其他家的系统模板都没问题,就你家有问题
在 configure 之前,加上 CLFAGS=-liconv LDFLAGS=-liconv LIBS=-liconv LIBM=-liconv 的环境变量再去编译
辣鸡韩国人。辣鸡韩国人。辣鸡韩国人。(XShell 的开发商 NetSarang 是韩国公司)
Xshell 5 的家庭/学校授权的免费版还不错,是全功能的,但是 6 以后只能同时开 4 个标签页,这个对我这种习惯多标签操作的人来说十分不合适。所以我们得想办法折腾一下。目前有这几个办法:
127.0.0.1 transact.netsarang.com 127.0.0.1 update.netsarang.com 127.0.0.1 www.netsarang.com 127.0.0.1 www.netsarang.co.kr 127.0.0.1 sales.netsarang.com
就可以正常使用
考虑到这些序列号已经被官方屏蔽,这里放出下载
Hz cloud 什么都好,就是盘太小,最基础的实例只有 20G 盘,相比 Scaleway 的 50G 还是差了点。不过考虑到它 CPU 也好,盘也快,所以想把建在 Scaleway 上面的本博客搬到 Hz cloud。正好最近 Hz cloud 出了 Volume 的功能可以自己加硬盘,在星菊的帮助下,使用 LVM 完成了 Volume 和自带分区合并的功能。
要做到这点,需要分两步,一个是在 Rescue 模式下将系统安装在 LVM 分区上,第二步是在系统中扩展 LVM 分区。
安装系统时,需要在后台进入 Rescue 模式,Hz 家的 Rescue 都一样,在选定 image 以后会弹出配置文件让你编辑,在分区那里需要这么写:
PART /boot ext4 512M PART lvm vg0 all LV vg0 root / ext4 all
之后双击 Esc 退出,正常安装就行,之后 LVM 分区就挂载在 / 这里了。
然后重启进入系统,在 Volume 页面创建之后 attach 到之前的实例。通常来说,系统会安装在 /dev/sda,新的 Volume 在 /dev/sdb。执行以下命令将分区合并:
pvcreate -ff /dev/sdb vgextend vg0 /dev/sdb lvresize -l +100%FREE vg0/root resize2fs /dev/vg0/root
做了如下几件事:
我们可以通过 pvdisplay vgdisplay 和 lsblk 看到效果:
root@sb1 ~ # pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name vg0 PV Size <37.65 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 9637 Free PE 0 Allocated PE 9637 PV UUID ZbfxjP-RNf5-ScPU-eclg-dMjj-0WKg-T3FA2p --- Physical volume --- PV Name /dev/sdb VG Name vg0 PV Size 750.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 191999 Free PE 191999 Allocated PE 0 PV UUID ZphGg0-2XcJ-Kjzy-gfBX-7pSp-Wo4L-fbVkD5 root@sb1 ~ # vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 787.64 GiB PE Size 4.00 MiB Total PE 201636 Alloc PE / Size 9637 / 37.64 GiB Free PE / Size 191999 / <750.00 GiB VG UUID 7It9l8-70zz-03Uk-8md3-mPBZ-o7fe-clN3QX root@sb1 ~ # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 38.2G 0 disk ├─sda1 8:1 0 512M 0 part /boot └─sda2 8:2 0 37.7G 0 part └─vg0-root 253:0 0 787.7G 0 lvm / sdb 8:16 0 750G 0 disk └─vg0-root 253:0 0 787.7G 0 lvm / sr0 11:0 1 1024M 0 rom
在完成了所有命令之后,可以在 lsblk 中看到 / 已经扩充到了 787.7G
出现的问题是,在 Linux qb 挂了 400+ 公网种子的情况下,使用 libtorrent 1.1 作为后端,在运行三至四天以后就会内存使用量不断增加,直到占用了几乎所有的可用内存,系统崩溃为止。
在 qb 的这个 Issue 中(https://github.com/qbittorrent/qBittorrent/issues/8630),有人在 Windows 上观察到了一样的现象,报告在 Enable OS cache 的情况下最终会导致内存泄漏。
在 https://github.com/qbittorrent/qBittorrent/issues/8295 和 https://github.com/arvidn/libtorrent/issues/1997 这两个 Issue 中,有人提到是 libtorrent 本身的 IO 和缓存实现存在问题,导致磁盘 IO 效率过低。但是这两个问题也都是在 Windows 上观察得出的,目前提供的方法是关闭 OS Cache,打开 libtorrent 的 coalesce reads & writes 选项,以在 Windows 上达到较好的 IO 性能表现(这个选项在 Linux 上是不必要的,因为 Linux 有 pwritev() 的实现,不需要通过 pwrite() 进行模拟——arvidn)。
但是在 Linux 上,这个问题仍然没有任何解决的迹象。在我看来,假定 libtorrent 自身的内存管理不存在问题,没有内存泄漏的情况,那么内存占用应该存在于两个方面:一是在 libtorrent 1.1 解决了 IO 性能问题以后引入的新 bug,即 lt 可以同时打开大量的 File Descriptor 且不陷入死锁,那么由于使用 buffered IO 的问题,在系统内核层面上消耗了大量的内存;另一个可能性是 TCP Socket buffer,libtorrent 1.1 相比 1.0 修正了大量 TCP Socket 连接卡死的问题(甚至出现了 too many open files 的情况,参见之前的文章,这个现象在 lt 1.0 从未出现过),大量 peer 和 tracker 连接使用的 TCP Socket 在内核层面占用了大量的内存,进而出现内存占用高的问题。
目前先禁用 OS Cache 进行下一步测试,观察是否还会出现内存占用过高。如果有,那么应该是 TCP 造成的问题了。(在看了 IBM 关于 Linux Direct IO 的这篇文章后,我对 IO Buffer 这个方向不报太大希望,因为无论怎么看 Buffered IO 的实现也不像会把自己噎死的样子)
老年人的第一次刷机。
最近把红米备机拿出来用了,升到了 ADUI 10,感觉还不错,但是广告实在太多。想起来当年被卡 15 天解 BL 锁的限制早过了很久了,就想着把这破系统刷了吧。
查了一圈发现 MIUI EU 版是相对干净的系统,可以在这里取得。
解锁 Bootloader
MIUI EU 版刷机包
Android Debug Bridge
第三方 Recovery TWRP
Root 包 Magisk
fastboot flash recovery <twrp_image>
刷入 TWRPfastboot reboot
重启设备,注意此时需要立即按下音量上 + 电源以进入 Recovery 模式,否则 MIUI 会覆盖刷入的自定义 RevoceryTWRP Unable to mount '/data'
,如果出现该错误,在 Fastboot 模式下运行 fastboot format userdata
清理 /data 分区之后再进行操作adb kill-server
然后大功告成
https://www.zhihu.com/question/50231539/answer/530627637
https://www.reddit.com/r/Nexus6P/comments/3qnzz0/twrp_unable_to_mount_data/
有时候总有一些不得不在 Linux 下跑一些 Windows 程序的需求,所以我们会用到 wine,但是 wine 默认并不是给中文用户设计的,因此我们需要一些办法来解决中文显示乱码和效果差的问题。
中文乱码,主要表现是非 ASCII 字符全部都显示为方框,这个是没有字体造成的,需要在 ~/.wine/drive_c/windows/Fonts 下面安装中文字体,一般来说,装好宋体、黑体和微软雅黑这些常用的就能用了,如果想装点别的,自然也可以。这里提供了一些打包好的基础字体下载:
cd ~/.wine/drive_c/windows/Fonts wget https://down.gloriousdays.pw/Fonts/wine_fonts.tar.xz tar xJvf wine_fonts.tar.xz rm wine_fonts.tar.xz
搞定了字体以后,很快就会发现这些字体的显示效果十分差,完全没有做 AA 的意思,我们用 winetricks 解决这个问题:
apt install winetricks winetricks settings fontsmooth=rgb
重新打开 exe 程序即可
对于像 KS-3 这样只有 4GB 内存的小内存服务器,如果想在上面跑一些比较复杂的服务,经常会遇到内存不足的问题。一般说到内存不足,第一反应都是加 swap 空间,但是对于机械硬盘的场景,添加盲目添加 swap 空间并不是一个好的选择,因为这样会显著增加系统整体的 latency。这个时候 zram 就可以派上用场了。
zram 是在 Linux Kernel 3.2 加入的一个模块,其功能是在内存中开辟一块空间,用来存储压缩后的内存数据,这样可以在牺牲一定的 CPU Cycle 的情况下,在内存中存储尽量多的数据而不需要写入到磁盘。
对于 Ubuntu 系统,开启 zram 的方法很简单,只需要安装 zram-config 这个包之后重启即可。zram 默认会将系统内存的一半作为 zram,然后根据 CPU 核心数平均分配到每个 zram 设备。比如在我的 KS-3 上,通过 zramctl 查看 zram 的情况,是这样的:
# zramctl NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram3 lz4 491M 4K 63B 4K 4 [SWAP] /dev/zram2 lz4 491M 4K 63B 4K 4 [SWAP] /dev/zram1 lz4 491M 4K 63B 4K 4 [SWAP] /dev/zram0 lz4 491M 4K 63B 4K 4 [SWAP]
注意到这里的压缩算法,有两种算法 lzo 和 lz4 可选,默认是 lzo。根据 Benchmark,lz4 的压缩和解压性能在压缩率和 lzo 持平的情况下显著高于后者,因此我们应该采用 lz4 而非 lzo 以获得更高的系统效率。
虽然 zramctl 可以帮助调整 zram 的情况,但是我们还是应该在系统启动时就将这些东西配置好。zram-config 安装好后会默认添加 zram-config.service,这个 service 是运行 /usr/bin/init-zram-swapping 这个脚本以配置对应的 zram 设备,默认情况下,其配置设备的内容应该是这样:
#!/bin/sh # load dependency modules NRDEVICES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/') if modinfo zram | grep -q ' zram_num_devices:' 2>/dev/null; then MODPROBE_ARGS="zram_num_devices=${NRDEVICES}" elif modinfo zram | grep -q ' num_devices:' 2>/dev/null; then MODPROBE_ARGS="num_devices=${NRDEVICES}" else exit 1 fi modprobe zram $MODPROBE_ARGS # Calculate memory to use for zram (1/2 of ram) totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/ *.*//'` mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024)) # initialize the devices for i in $(seq ${NRDEVICES}); do DEVNUMBER=$((i - 1)) echo $mem > /sys/block/zram${DEVNUMBER}/disksize mkswap /dev/zram${DEVNUMBER} swapon -p 5 /dev/zram${DEVNUMBER} done
如果我们要默认使用 lz4 算法,那么应该将最后一段改成这样:
# initialize the devices for i in $(seq ${NRDEVICES}); do DEVNUMBER=$((i - 1)) echo lz4 > /sys/block/zram${DEVNUMBER}/comp_algorithm echo $mem > /sys/block/zram${DEVNUMBER}/disksize mkswap /dev/zram${DEVNUMBER} swapon -p 5 /dev/zram${DEVNUMBER} done
注意算法设置一定要在配置空间大小之前,否则不能正确修改。
修改过后,运行 systemctl restart zram-config 就可以载入新的配置。
参考资料:
https://askubuntu.com/questions/1044976/make-zram-use-lz4-compression-algorithm
https://github.com/lz4/lz4
https://sites.google.com/site/easylinuxtipsproject/speed#TOC-Only-768-MB-RAM-or-less:-enable-zRam
http://tuxdiary.com/2015/07/28/zram/
https://wiki.archlinux.org/index.php/improving_performance#Zram_or_zswap
RHEL 系我不知道怎么弄,我也没有机器是这个
在 /etc/default/grub
中,找到 GRUB_CMDLINE_LINUX_DEFAULT=""
这行,可能原来后面双引号中间有参数,这个各个机器不同,如果要修改默认的 CFQ Scheduler,那么在这里加上 elevator=noop 这样的内容,且和之前的旧内容有一空格。之后 update-grub2 重启即可。
之后 cat /sys/block/sda/queue/scheduler
就可以看到当前使用的调度器
IO Scheduler 有三个选择 cfq noop 和 deadline
参考资料:
https://www.ibm.com/developerworks/cn/linux/l-lo-io-scheduler-optimize-performance/index.html
https://askubuntu.com/questions/78682/how-do-i-change-to-the-noop-scheduler
Red_Hat_Enterprise_Linux-6-Performance_Tuning_Guide-en-US
Red_Hat_Enterprise_Linux-7-Performance_Tuning_Guide-en-US
之前听人整天听人吹 iKoula 网络好,但是因为性价比太低一直没买,这次黑五总算有性价比还行的型号,就买了台,真香
我这台是 109 段的 G 管,首先要配置一下 IPv6,运行这样一个脚本:
serveripv4=$( ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" ) interface=$( ifconfig -a | grep -B 1 $serveripv4 | head -n1 | awk '{print $1}' | sed "s/:$//" ) AAA=$( echo $serveripv4 | awk -F '.' '{print $1}' ) BBB=$( echo $serveripv4 | awk -F '.' '{print $2}' ) CCC=$( echo $serveripv4 | awk -F '.' '{print $3}' ) DDD=$( echo $serveripv4 | awk -F '.' '{print $4}' ) cat>>/etc/network/interfaces<<EOF iface $interface inet6 static address 2a00:c70:1:$AAA:$BBB:$CCC:$DDD:1 netmask 96 gateway 2a00:c70:1:$AAA:$BBB:$CCC::1 EOF
然后 systemctl restart networking.service 就行了。
如果你像我一样运气不好,拿到了一块 WD 绿盘,IntelliPower 这种垃圾技术的盘,那么还得想办法拯救一下。绿盘默认 8 秒会把磁头停到启停区,这时候如果去读盘,就会卡一下,我们通过 idle3ctl 关闭这个功能:
sudo apt-get install idle3-tools sudo apt-get install idle3-tools # Show current idle3 value sudo idle3ctl -s 138 /dev/sda # setting to 300 seconds # The man page for idle3ctl states that values between 1 and 128 add 0.1 seconds, values between 129 and 256 add 30s: 128 * 0.1 + (138 - 128) * 30 = 312.8 seconds sudo idle3ctl -d /dev/sda # Disable parking, recommended
之后就是网卡,iKoula 的桌面主板用的是 RTL8168 这块开 BBR 会掉速 4MB 的螃蟹卡,我们需要更新驱动
由于 Realtek 的官网不太好使,我备份了驱动到自己的站点
apt update && apt install build-essential libelf-dev linux-headers-$(uname -r) wget https://down.gloriousdays.pw/Tools/0012-r8168-8.046.00.tar.bz2 tar xjvf 0012-r8168-8.046.00.tar.bz2 cd r8168-8.046.00 ./autorun.sh || modprobe r8169
这样就会安装上 R8168 的驱动了,之间会断网 3-5 分钟,之后重连即可,不需要 screen,但是如果一定要用也行。
使用 ethtool 查看驱动情况,如果是 r8168 就已经完成:
# ethtool -i eth0 driver: r8168 version: 8.046.00-NAPI firmware-version: expansion-rom-version: bus-info: 0000:01:00.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: yes supports-priv-flags: no
如果 10 分钟还连不上,去后台手动重启。
参考资料:
https://wdullaer.com/blog/2015/04/05/hack-your-wd-greens/
感谢星菊对这个问题提供的帮助
换用 libtorrent 1.1 以后,由于 arvidn 改善了 IO 线程的问题,因此总是出现 too many open files 错误,在多方询问以后,终于解决了这个问题。
如果去查这个问题,通常会建议修改 limits.conf,修改 ulimit -n 参数,在 sysctl.conf 中添加 fs.file-max 参数等等,然而都不能解决这个问题。
实际上,目前以 systemd 作为启动工具的发行版,都存在两套限制体系,一个是 limits.conf,负责限制命令行模式启动的程序,另一个是 /etc/systemd/system.conf,限制以 systemd service 方式启动的程序。因此如果要解决这个问题,需要所有的地方都进行修改。
在 /etc/systemd/system.conf 中,加上:
DefaultLimitNOFILE=999998 DefaultLimitNPROC=999998
在 /etc/sysctl.conf 中,加上:
fs.file-max = 2097152 fs.nr_open = 2097152
在 /etc/security/limits.conf 中,加上:
* hard nofile 999999 * soft nofile 999999 root hard nofile 999999 root soft nofile 999999
然后就可以解决问题了。