Back to homepage

技术博文下的文章


GNU/Linux 上 Sysrq 的用法

nios34于 March 3, 2021 发表在技术博文中。
你可能注意到你的键盘上的 PrintScreen 键也写着 SysRq,让我们来看看它的是干啥的。

内核配置

Linux 内核将 Sysrq 的功能分割出来了,你可以用这个命令查看它的状态:

# grep "CONFIG_MAGIC_SYSRQ" /boot/config-*

如果写着 Y 那就说明启用了(一般的发行版都是启用的),否则使用下面的方法:

临时

# echo "1" >/proc/sys/kernel/sysrq

永久

# echo "kernel.sysrq = 1" >> /etc/sysctl.conf

文档

'r' - Turns off keyboard raw mode and sets it to XLATE.

'k' - Secure Access Key (SAK) Kills all programs on the current virtual
console. NOTE: See important comments below in SAK section.

'b' - Will immediately reboot the system without syncing or unmounting
your disks.

'o' - Will shut your system off (if configured and supported).

's' - Will attempt to sync all mounted filesystems.

'u' - Will attempt to remount all mounted filesystems read-only.

'p' - Will dump the current registers and flags to your console.

't' - Will dump a list of current tasks and their information to your
console.

'm' - Will dump current memory info to your console.

'0'-'9' - Sets the console log level, controlling which kernel messages
will be printed to your console. ('0', for example would make
it so that only emergency messages like PANICs or OOPSes would
make it to your console.)

'e' - Send a SIGTERM to all processes, except for init.

'i' - Send a SIGKILL to all processes, except for init.

'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system
will be non-functional after this.)

'h' - Will display help ( actually any other key than those listed
above will display help. but 'h' is easy to remember :-)

这就是 Magic Sysrq 的所有指令键。

如何按出来呢?举个例子:要重启系统的话,使用 Alt + Sysrq + B。

用处

你一定遇到过死机的情况,有些情况下 TTY 也救不你。这时就需要安全的重启,并且这操作要不会被其他程序干扰。

你也许会说:很简单,Alt + Sysrq + B。

额,然后你的数据就没了。所以,通用的做法是:

按顺序按下:R E I S U B

按下一个时等一会再按下一个,否则内核没法处理完成你的指令。

最后在紧急同步以后,你的计算机会重启。操作完成。 :-)

重新部署整个玩客云并安装甜糖

nios34于 February 16, 2021 发表在技术博文中。
前情提要:今早,未知狐(看到他的友链了吗,就在下面,点它)给我介绍了个能用闲置流量赚钱的软件——甜糖。我当然是直接冲冲冲。我找到了一个玩客云的一键安装脚本。图方便,我直接跑了起来。在脚本的自动重启结束后,ssh 没了。

重装 Armbian

其实这么做的原因不止有系统炸了,主要还是其他人折腾过这个系统(往上面装 docker 和 k8s 是真的 NB)。

第一步,当然是拆机。用尖锐一点的物品抵住 SD 卡插槽,然后把外面一层塑料膜翘出来。然后,你会看到一片面板上有 6 个螺丝。将它们拧下来放好。

第二步,刷机前的准备。现在,面板已经被拆除。我们可以看到里面的主板。将主板直接拔出,然后将一跟 USB 2.0 公对公连接线(没有的话,拿两根数据线剪开然后同颜色的线拧一起)插入靠近 HDMI 接口的 USB 口。

第三步,刷机。短接主板上的针脚,电脑刷机。(技术细节:知乎

大功告成!

挂载文件系统

玩客云自带的几个 G 肯定是不够用的。我们需要挂载更多!这里我的玩客云接上了:一个 32 GB U盘、一个 120 GB 硬盘盒和一张 16 GB TF卡。我决定使用 systemd 自动完成它们的挂载。我之所以不用 fstab,是因为 systemd 在挂载失败后还会继续启动而 fstab 如果出错只会进入单用户模式。那时,我会再次面对之前的处境。文件的内容很简单,格式和下面的相同。

[Unit]
Description = Here is your description.

[Mount]
What = /dev/sdXX
Where = /path/to/mountpoint
Type = ext4                   # Or whatever.
Options = defaults            # Or you place something intersting here.

[Install]
WantedBy = local-fs.target

要注意的是,如果你的挂载点是 /path/to/point,那你的配置文件名称应该为 path-to-point.mount。而且,软链接不会起作用!其它的挂载点同理,据说当路径里有 - 时,你需要把它改成 _。写完以后,保存到 /etc/systemd/system 下。下面是操作的方法:

$ systemctl start path-to-point.mount # 挂载文件系统 VICE VERSA

$ systemctl enable path-to-point.mount# 开机自动装载 VICE VERSA

$ systemctl status path-to-point.mount# 查看挂载情况

陆续写好了 TF 卡、硬盘和 U 盘的配置文件,另一个问题接踵而至——挂载失败。 dmesg 告诉我 Unrecognised features on journal。这是因为这个 ext4 系统是在高版本建立的,它具有我这个版本不具备的新特性。解决方法很简单,即干掉那个特性。

# e2fsck /dev/sda1

# tune2fs -O ^has_journal /dev/sda1

直接秒杀,问题解决。

部署 Cloudflare DDNS

这里 DDNS 直接使用 Gayhub 上的脚本。链接如下:https://github.com/yulewang/cloudflare-api-v4-ddns/。在 Cloudflare 上抄下自己的 Global API Token 然后将其填入 ShellScript就完事了。我想让它每小时检查一次 IP 变化,所以我在 crontab -e 中追加 0 * * * * /path/to/abc.sh

不同介质间备份

这里我也使用了上一节的定时任务,同步的命令是 rsync -ax --delete /path/to/data /path/to/backupfolder。其基本上与 rm -rf /path/to/backupfolder/data && cp -rf /path/to/data /path/to/backupfolder/data 等价,只不过更省时间就是了。

匿名 FTP 服务器

这里就略了,老一套没意思。地址是:http://home.050821.xyz:8448/。欢迎大家来下载资源(那种的没有 :-p)。

甜糖

部署甜糖,我也要使用 systemd。这样能更方便的监控其运作。建立一个叫做 tiantang.service 的文件,内容同下:

[Unit]
Description = Put your description here.

[Service]
Type = forking
ExecStart = /path/to/ttnode_172 -p /path/to/cachefolder

[Install]
WantedBy = multi-user.target

写完以后,同样地,扔到 /etc/systemd/system 去。操作方式也和 mount 一样,只不过去掉后缀。比如:systemctl start tiantang

似乎镜像中 eth0 的 MAC 地址是一样的,所以为了避免你的流量为别人做工。在第一次运行时,安装并使用这个命令 macchanger -r eth0。它会暂时改变你的 MAC 地址直至下一次重启,这是避免重复的好办法。

当然如果你已经启动过一次,那就请先删掉 /path/to/.yfnode 这个文件夹。随后的运行会初始化一个新的 ID 给你。

到这里,我的玩客云的部署已经完成了。最后上一张我配置目录的结构。 :-)

2021-02-16 22-43-13.png