本文部分内容来源于 什么值得买:每天一个群晖小tip 篇三十四:五步操作将群晖RAID1阵列降级为Basic模式
首先要拔掉一块硬盘,破坏Raid1的阵列,群晖会提示存储池降级,并有个“堪用”警示。


1、使用ssh登陆群晖并获取root账户;
sudo -i2、输入命令,查看当前分区;
cat /proc/mdstat
3、根据数字大小确认需要处理的分区状态,由于我的硬盘为4TB大小,根据容量大概可以确认这里为md2分区,然后执行下列命令;
mdadm --grow --raid-devices=1 --force /dev/md2
出现 raid_disks for /dev/*** set to 1 即为降级成功
命令解析;
mdadm:这是一个用于管理软件 RAID 阵列的 Linux 实用程序。
--grow:这个选项用于修改现有的 RAID 阵列,比如更改设备数量、布局或其他属性。
--raid-devices=1:这个选项指定 RAID 阵列应该具有的新设备数量。在当前情况下,将其设置为 1,这实际上意味着将 RAID 阵列缩小为单个设备,即降级为Basic模式。
--force:这个选项用于强制应用更改,即使这些更改可能是危险的或不受支持的。使用 --force 应该非常小心,因为它可能导致数据丢失或损坏。
/dev/md5:这是尝试修改的 RAID 设备的路径。md5 通常指的是系统中的第五个软件 RAID 阵列。
md0/1 通常为群晖的系统分区。回到群晖DSM后,无需刷新网页即可看到阵列类型变成了Basic,并且状态为良好

操作完成后,记得关闭SSH确保网络安全。插回刚刚的硬盘,重新初始化并创建存储池、存储空间即可使用。

本篇与debian同,随缘更新,记录实用操作
使用esim卡
使用@苏苏小亮亮的openwrt 2022-06-05 包
棒子板号:001B 512MB+4GB
使用电脑usb连接,wifi作为调试
系统发布页面:https://www.kancloud.cn/a813630449/ufi_car/2792820
刷入方式可见棒子第三章,进入fastboot后,执行压缩包内的fastboot.bat,多次回车刷入即可成功
如果进不去fastboot,可在9008模式格式化boot分区,再次上电自动进入fastboot
由于openwrt的无线驱动尚未解决,因此连接热点网速会很慢,目前没有好的解决方法,因此本文主要满足通过usb供网,并分享ipv6地址,热点仅作为管理端。
使用sftp连接openwrt,然后将之前系统备份的 NON-HLOS.bin 文件解压或者通过镜像软件打开,将里面全部文件提取出来,再上传到 /root 目录中(可直接通过ssh远程软件自带的文件管理器上传,原理相同)
上传完成后,执行指令,将文件移动到 /lib/firmware 内
mv ./IMAGE/* /lib/firmware/正常来说,这个版本的openwrt是可以直接读取外卡槽的,如果想使用esim卡,则需要手动切换。因为有些软件包和debian系统不一样,但原理相差不多,所以修改部分指令并直接扔到 rc.local 内依旧是可以使用的。
打开网页管理,进入 系统-启动项-本地启动脚本 ,加入一行在原有的指令之前:
echo 255 > /sys/class/leds/sim\:sel/brightness重启系统,在ssh输入 mmcli -m 0 即可查看esim连接状态,此时会显示disable
再执行指令:
mmcli -m 0 -e即可启用sim卡
此时openwrt即可使用sim卡上网,重启之后仍然正常联网
棒子本身内存只有0.5GB,且openwrt很多服务会运行比debian多且频繁,通过虚拟内存可以增加一定的稳定性。这里由于棒子存储只有4GB,装完openwrt后仅剩余2.7GB,且重点不在于跑docker等服务,因此创建800MB的虚拟内存即可够用。
在 ssh 控制台输入指令创建个分区文件:
dd if=/dev/zero of=/usr/swap bs=1M count=800输入指令查看创建的分区大小是否为800MB:
du -sh /usr/swap将分区文件设置为swap分区文件,并启用分区:
mkswap /usr/swap
swapon /usr/swap设置开机自动挂载swap分区,一键指令(如果已经添加了挂载其他分区请勿使用该指令,会覆盖全部内容):
echo /usr/swap swap swap defaults 0 0 > /etc/fstab也可以手动在文件 vi /etc/fstab 最后一行添加: /usr/swap swap swap defaults 0 0
在openwrt网页端 系统-启动项-本地启动脚本,最后一行添加:
swapon /usr/swap保存并执行重启后,输入 free -m 指令即可看到swap分区添加成功。
如果磁盘不够用等原因想卸载swap分区,可执行指令:
swapoff /usr/swap
rm /usr/swap在 /etc/fstab 内删除前面添加的那一行内容,并删除openwrt网页端 系统-启动项-本地启动脚本 内的前面添加的指令,即可完成卸载swap。
目前先到这里,剩下的随缘更新...
注意:ipv6部分未完篇,但方法可行,如有建议可评论区留言,后面随缘更新...
本来这篇文章是为了ipv6热点而写的教程,后面发现方法很多但是争议也多,因此干脆作为日常使用及优化的记录篇,在本篇可以看到使用sim卡、切卡、网桥、led控制、更改usb模式等多个玩法,可按需学习使用...
本文使用 酷安@jsbsbxjxh66 大佬的ufi001b-debian超频版1.2Ghz Debian进行修改
使用esim卡环境(如使用实体卡可跳过切esim卡步骤)
使用电脑进行连接(需打开cmd进行adb操作,以及ssh工具)
本节修改内容:
网关:192.168.2.1
选卡:esim
网桥:br0
先使用 adb shell 删除全部的连接,如 nmcli c del wifi usb
使用ssh或者adb shell连接后,使用指令新建个网桥,并新建两个从机,为usb与wifi,执行指令:
nmcli c add type bridge ifname br0 con-name br0 ipv4.method manual ipv4.addresses 192.168.2.1/24 ipv4.gateway '' ipv4.dns '223.5.5.5'
nmcli c add type ethernet ifname usb0 con-name usb-share
nmcli c add type bridge-slave ifname usb-share con-name usb-share master br0修改 /etc/dnsmasq.conf 最后两行
listen-address=192.168.2.1
dhcp-range=192.168.2.10,192.168.2.254,12h执行重启 adb reboot ,重启后再次输入 adb shell 进入终端,此时usb是无IPV4分配的,执行指令
systemctl enable dnsmasq.service
systemctl start dnsmasq.service再次重启后,即可分配到usb的ipv4,可以通过ssh连接
通过ssh连接debian后,执行 nmtui ,选择 编辑连接 ,选择网桥br0点进去,手动添加一个wifi连接。
接下来的内容按需采取,ipv6部分存在争议,可自行尝试
将驱动文件上传到root目录,执行指令覆盖原驱动即可
mv wcn36xx.ko /lib/modules/5.15.0-handsomekernel+/kernel/drivers/net/wireless/ath/wcn36xx/
使用sftp连接至debian,将之前全分区备份中的 NON-HLOS.bin 文件使用7z打开或者软碟通打开,将里面的IMAGE拖出来,并通过sftp上传到debina root目录
执行指令,替换 /lib/firmware 内的驱动文件
mv IMAGE/* /lib/firmware/sim:sel 为esim卡的位置,如果要切换到sim卡槽,一般为 sim:sel2 ,可以用指令看一下列表内是否有sim:sel2
ls /sys/class/leds/如果没有 sim:sel2 则默认外置卡槽,可按需切换esim
输入指令 mmcli -m 0 ,如果显示有内容但显示 sim-missing ,此时则为卡槽模式,可插入自己的卡。
切换esim卡可直接修改 /etc/rc.local 文件,使开机自动修改
!/bin/sh -e
echo 255 > /sys/class/leds/sim\:sel/brightness
modprobe -r qcom-q6v5-mss
sleep 1
modprobe qcom-q6v5-mss
sleep 1
systemctl restart rmtfs
sleep 1
systemctl restart ModemManager
exit 保存后输入 reboot 重启系统,重启后输入 mmcli -m 0 ,如出现 state: connected 即为连接正常。
同时在重启后检查wifi是否以及开启,执行 nmcli 后是否出现modem连接信息,如果出现连接ip等信息即为一切顺利(如下图)。如果前面不顺利,后面设置ipv6转发会出问题。
如果出现输入 mmcli -m 0 后,显示卡未连接disconnect或者未发现卡,可以使用sim卡重启大法尝试一下。如果多次出现,可以试试看加入到开机启动脚本中 rc.local(自行添加sleep 1延时)
systemctl stop ModemManager
qmicli -d /dev/wwan0qmi0 --uim-sim-power-off=1
qmicli -d /dev/wwan0qmi0 --uim-sim-power-on=1
systemctl start ModemManager棒子debian系统可通过执行指令查看emmc寿命,数值仅参考,也有部分型号查看为0x00的,为芯片未定义,0x01为最佳寿命,同理数值越大寿命越低,该值仅供参考
cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time执行指令可断开棒子usb共享,更改为host主机模式,可用于棒子专用拓展坞使用
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role相反的,也可以切换回网络共享模式
echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role如果棒子无wifi或者误删,可以用这个指令在adb shell内快速创建一个wifi热点,名字为4G-wifi,密码为123456789
nmcli d wifi hotspot ifname wlan0 con-name wifi ssid 4G-wifi band bg channel 11 password 123456789如果觉得led灯太闪(没壳的会显得很亮),可以执行指令关闭led,同时可以放rc.local开机启动自动关闭led灯
echo none > /sys/class/leds/red\:os/trigger
echo none > /sys/class/leds/blue\:wifi/trigger
echo none > /sys/class/leds/green\:internet/trigger输入指令启用ipv6转发,执行过程中可能会掉线ssh,建议在 adb shell 内执行
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.proxy_ndp=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra=2" >> /etc/sysctl.conf
sysctl -p
nmcli connection up br0
systemctl restart dnsmasq.service
nmcli connection up usb安装依赖
apt install radvd ndppd dhcpcd5编写配置文件
br0为要监听的网络
/etc/radvd.conf.demointerface br0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvManagedFlag off;
AdvOtherConfigFlag off;
prefix REPLACEIPV6 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
};/etc/ndppd.conf.demoroute-ttl 30000
proxy wlan0 {
router yes
timeout 500
rule REPLACEIPV6 {
auto
}
}/etc/dhcpcd.confinterface br0
ipv6
ipv6rs
ipv6ra_other_information启动服务
systemctl restart radvd
systemctl restart ndppd
systemctl restart dhcpcd理论上v6部分就结束了,但是试过不同设备有几率并不能分发地址,还存在争议,也可以参考这位大佬的文章开启v6共享:https://zyyme.com/msm8916-wifi.html
本篇暂时完结,不研究debian了,后续随缘更新...
]]>本章节待慢慢补充...
linux下的GPIO一般可以在/sys/kernel/debug/gpio下查询到信息,但是由于棒子的PCB没有开源,无法得知目前那些GPIO可以使用。但是通过表面可知,至少有3颗LED、2路SIM卡控制端口可用,且板载Uart串口调试点,因此,如果能对其中几个IO进行操作,通过IIC协议,即可可以控制多路外设,成为真正的硬件开发板...
从最简单的开始,控制一颗LED的亮灭。刷了Debian系统后,板子上只有红色、蓝色灯为启用状态,而绿色灯为None状态。因此,我们可以先拿没用的绿色LED下手。
查询目前棒子上已知的GPIO引用:ls /sys/class/leds/
查询后可得:
蓝色LED默认分配为WIFI状态
绿色LED默认分配为网络状态
红色LED默认为系统运行指示灯
SIM:EN为SIM卡启用状态,该焊盘位于ESIM底座GND处,预测SIM1同理
SIM:SEL为SIM选择状态,物理位置目前未测量
进入green的目录内,可看到以下几个文件:
主要文件为brightness、max_brightness、trigger,这三个文件即为LED引脚的属性
brightness:可读可写; 所以这个属性文件是用于设置 LED的亮度等级或者获取当前 LED 的亮度等级。
max_brightness: 该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级。
trigger: 触发模式,该属性文件可读可写,通过 cat 命令查看该属性文件触发模式
其中,trigger 内有以下的模式:
这里中括号选中为none,即为禁用。常见模式有:
timer:使用系统定时器控制,可用于作为伪PWM控制,定时闪烁等功能
heartbeat:心跳模式,可用于作为监控系统运行状态,定时有规律的闪烁
default-on:默认开启模式,此模式会使LED常亮,可用于寻找板载物理位置使用
mmc:读写存储器(emmc)的时候会闪烁
phy0tx(rx):接收(发送)wifi数据时会闪烁
使用echo的方式写入该文件即可控制LED的状态,如这里使它运行为心跳包闪烁模式:
echo heartbeat > /sys/class/leds/green\:internet/trigger同理,如果写入 none 则为禁用led灯,指令如下:
echo none > /sys/class/leds/green\:internet/trigger也可以设置led为wifi状态指示灯:
echo phy0radio > /sys/class/leds/green\:internet/trigger仅需执行指令,即可控制led状态,重启后恢复原始模式,可写入rc.local让其每次开机都设置为该模式。
可以将其设置为 timer 定时器模式,通过手动调整延时开与延时关的方式模拟PWM占空比:
echo timer > /sys/class/leds/green\:internet/trigger
echo 90 > /sys/class/leds/green\:internet/delay_off
echo 10 > /sys/class/leds/green\:internet/delay_on同理,可以使用绿色LED的IO用来控制风扇,实现温控风扇。以下代码为即兴发挥,可自行测试,将风扇连接至绿色LED引脚上,或者更改 GPIO_PIN 值为其他IO引脚;可以自行更改 pwm_v 的值,以1000为满值,分4个档位。代码仅供测试,如果有问题可评论区留言。
#python 3
import time
import os
pwm_v = [300,500,700,900] #档位速度设置,满值为1000
GPIO_PIN = "green\:internet" #IO引脚设置
print("开始初始化GPIO...")
os.system(f"echo timer > /sys/class/leds/{GPIO_PIN}/trigger")
while True:
time.sleep(1)
try:
temp_file=open("/sys/class/thermal/thermal_zone0/temp",'r')
temp = int(int(temp_file.read())/1000)
temp_file.close()
print(f"当前温度为:{temp}")
except OSError as e:
print(f"打开文件出错:{str(e)}")
if temp <25:
print(f"温度在(0,25)区间内,关闭风扇,PWM占空比0%")
os.system(f"echo 0 > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo 1000 > /sys/class/leds/green\:internet/delay_off")
if temp >= 25 and temp <35:
print(f"温度在[25,35)区间内,开启第一档,高电平时间{pwm_v[0]},低电平时间{1000-pwm_v[0]},PWM占空比{pwm_v[0]/1000*100}%")
os.system(f"echo {pwm_v[0]} > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo {1000-pwm_v[0]} > /sys/class/leds/green\:internet/delay_off")
if temp >= 35 and temp <45:
print(f"温度在[35,45)区间内,开启第二档,高电平时间{pwm_v[1]},低电平时间{1000-pwm_v[1]},PWM占空比{pwm_v[1]/1000*100}%")
os.system(f"echo {pwm_v[1]} > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo {1000-pwm_v[1]} > /sys/class/leds/green\:internet/delay_off")
if temp >= 45 and temp <55:
print(f"温度在[45,55)区间内,开启第三档,高电平时间{pwm_v[2]},低电平时间{1000-pwm_v[2]},PWM占空比{pwm_v[2]/1000*100}%")
os.system(f"echo {pwm_v[2]} > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo {1000-pwm_v[2]} > /sys/class/leds/green\:internet/delay_off")
if temp >= 55 and temp <65:
print(f"温度在[55,65)区间内,开启第四档,高电平时间{pwm_v[3]},低电平时间{1000-pwm_v[3]},PWM占空比{pwm_v[3]/1000*100}%")
os.system(f"echo {pwm_v[3]} > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo {1000-pwm_v[3]} > /sys/class/leds/green\:internet/delay_off")
if temp >= 65:
print(f"温度大于65摄氏度,开启最大功率,PWM占空比100%")
os.system(f"echo 1000 > /sys/class/leds/green\:internet/delay_on")
os.system(f"echo 0 > /sys/class/leds/green\:internet/delay_off")
除了简单的控制LED的行为以及模拟PWM,这几个引出的IO或许还可以更改输出输入模式,待本文后续更新继续探索...
https://github.com/Yushi-Xing/openstick_fan/blob/main/main.cpp
https://gitee.com/anhui1995/ufi_auto-fan/blob/master/autofan.c
https://blog.csdn.net/qq_26226907/article/details/128027533
https://www.kancloud.cn/handsomehacker/openstick/2637560
近期需要搭建个简易的小型网站,原想着用服务器面板解决,但是网站程序要求苛刻(如使用PHP函数、安装模块、资源性能分配等),环视了一圈服务器面板也没有找到中意的,不是限制太多就是自身占用过大,因此决定自己搭建配置LNMP三件套来部署网站程序,以达到最佳性能与最小损耗...
LNMP是一种用于配置网站前端程序的运行环境组合。‘L’指Linux系统环境,‘N’指Nginx,‘M’指MySQL或者MariaDB数据库,‘P’指PHP程序。类似的环境组合还有LAMP,该包使用Apache作为网页服务器驱动程序,与Nginx相比占用较大但是相对稳定,但是近年来搭建小型网站项目依然是Nginx更加流行。
此处我预备的环境版本为:
Linux = Debian 10.2 64bit
Nginx = 稳定版1.20.2
MySQL = 8.0.29
PHP = 8.1/7.4
服务器使用腾讯云的香港区域服务器,配置为2C2G,搭建小型网站性能足够使用
服务器使用腾讯云提供的纯净Debian 10.2镜像,无预装其他环境

进入系统后先更新软件包:
apt update
apt upgrade由于腾讯云的服务器都是预置好软件源的,因此购买大厂的机器后一般无需手动换源即可开箱即用
本文使用的Nginx版本官网下载链接(适用于Debian buster系统): nginx_1.20.2-1~buster_amd64.deb
CentOS 8系统Nginx下载链接: nginx-1.20.2-1.el8.ngx.x86_64.rpm
其他系统或者版本下载链接可见列表: http://nginx.org/packages/
通过SSH连接至服务器,并获取root权限:
su下载Nginx 1.20.2软件安装包(下载链接可根据自己的系统环境从上方列表查找),本文以Debian 10.2为例:
wget http://nginx.org/packages/debian/pool/nginx/n/nginx/nginx_1.20.2-1~buster_amd64.deb安装Nginx软件包:
dpkg -i nginx_1.20.2-1~buster_amd64.deb安装完成后查看版本:
nginx -v如果显示为nginx version: nginx/1.20.2即为安装成功,删除软件包即可
Nginx的配置文件一般存放于/etc/nginx/conf.d/文件夹内,编辑里面的文件即可
默认网站配置文件名为default.conf,使用nano编辑器进行初始配置:
nano /etc/nginx/conf.d/default.conf文件内容有这几处需要修改:
在"location"项的index内需要添加 index.php ,root项内的路径可指定好也可保持默认,后面配置网页时可再修改。如图所示:

找到"location ~ .php$"项,将其与大括号内的内容注释取消掉,并修改:
fastcgi_pass 项为 unix:/run/php-fpm/www.sock;,Nginx 通过 UNIX 套接字与 PHP-FPM 建立联系,该配置与 /etc/php-fpm.d/www.conf 文件内的 listen 配置一致。fastcgi_param SCRIPT_FILENAME 后的 /scripts$fastcgi_script_name; 替换为 $document_root$fastcgi_script_name;。修改完成后如下图所示:

按Ctrl+O写入文件,Ctrl+X退出编辑
最后将Nginx配置为开机启动即可:
systemctl start nginx
systemctl enable nginx本文修改后的配置文件如图:

由于测试所用的为一个静态页面,因此只需要指定根目录与域名即可。另存为test.conf,重启Nginx,检查无报错后所用浏览器访问域名,网页加载正常,说明Nginx配置验证成功。
如果要配置多个网站,只需要在域名服务商多解析几个到服务器IP的域名,然后将/etc/nginx/conf.d/default.conf文件重复拷贝作为模板使用,每次修改完配置文件,需要重新启动Nginx服务使其生效,同时要确保Nginx没有报错。
在配置文件时,只需要使location项内的root所指定的网站根目录不相同、server_name所指定的域名不相同,即可通过不同域名访问到不同站点根目录的index文件。
反代、伪静态本文暂且不提及。
]]>腾讯云今年春节活动优惠力度较大,在这期间我也采购了一台服务器与俩数据盘,准备作为网盘...
前往轻量服务器云硬盘后台挂载硬盘至目标服务器上

挂载成功后,通过ssh连接至服务器,输入fdisk -l可查看到新挂载的硬盘容量大小及硬盘id(此处主硬盘为vda,新挂载的硬盘为vdb、vdc)

由于该云硬盘在之前挂载过windows server系统的服务器,使用指令fdisk -l得知已经被win分区处理过。因云硬盘上没有重要信息需要转移,所以这里准备直接进行重新初始化操作...
如果硬盘为新购挂载的可以直接查看“云硬盘初次使用初始化”...
执行以下指令,进入 fdisk 分区工具,开始对新增数据盘执行分区操作。以新挂载的数据盘 /dev/vdb 为例,则执行以下命令:
sudo fdisk /dev/vdb
从前面得知,这块硬盘已经被win分区过了,所以先删除全部分区,再重新格式化以挂载给linux使用
输入指令 d 来删除分区,分别删除1、2号分区

删除分区后,再重新建立个新的分区并格式化为ext4
输入指令 n 来新建分区,有时会提醒要选择分区类型,一般可输入 p 来创建个主要分区(p 表示主要分区,e 表示扩展分区)
之后要选择的主分区编号、初始扇区、截止扇区可直接回车默认即可。
操作结束后,输入指令 p 即可看到新建的分区。确认无误后,输入指令 w 将分区结果写入分区表中。
如果上述操作有失误之处,直接输入 q 可不保存退出

退出分区软件后,输入指令将分区表同步到系统:
partprobe如果此指令提示找不到命令,需要安装软件包parted来解决:apt install parted
执行以下命令,将新建分区文件系统设置为系统所需格式:
sudo mkfs -t <文件系统格式> /dev/vdb1不同文件系统支持的分区大小不同,请根据实际需求合理选择文件系统。以设置文件系统为 EXT4 为例,则执行以下命令:(格式化需要一段时间,请稍等一会)
sudo mkfs -t ext4 /dev/vdb1
再输入 fdisk -l 可看出,该硬盘文件系统已经变成“Linux filesystem”
再如法炮制,将第二块硬盘也初始化一番...

此时云硬盘已经初始化结束,接下来就可以挂载使用了。
执行以下命令,查看磁盘名称:
sudo fdisk -l第一步挂载成功后可以在列表中看到服务器有两块磁盘,/dev/vda 为系统盘,/dev/vdb 为新挂载数据盘(多块硬盘将以vdc、vdd依次排序)
执行以下命令,将新建分区文件系统设置为系统所需格式:
sudo mkfs -t <文件系统格式> /dev/vdb1不同文件系统支持的分区大小不同,请根据实际需求合理选择文件系统。以设置文件系统为 EXT4 为例,则执行以下命令:(格式化需要一段时间,请稍等一会)
sudo mkfs -t ext4 /dev/vdb1再输入 fdisk -l 可看出,该硬盘文件系统已经变成“Linux filesystem”,可以被挂载至系统文件夹使用了。
本文将会把硬盘挂载至/mnt文件夹内(大部分系统、设备也是如此),之后可以通过访问该文件夹来使用云硬盘
新建文件夹用于挂载不同的一批:(文件夹名可自定义)
mkdir /mnt/data1
mkdir /mnt/data2执行以下命令,将设备挂载至新建的挂载点。执行以下命令:
sudo mount /dev/vdb1 /mnt/data1
sudo mount /dev/vdc1 /mnt/data2执行以下命令,查看挂载结果。
sudo df -h
因为是为了网盘服务,所以要保证服务器启动时硬盘也可以同时被加载,接下来设置硬盘开机自动挂载...
本文使用的是腾讯云购买的云硬盘,可以直接使用云硬盘的软链接。官方文档:
| 挂载方式 | 优缺点 | 信息获取方式 |
|---|---|---|
| 使用云硬盘的软链接(推荐) | 优点:每个云硬盘的软链接固定且唯一,不会随卸载挂载、格式化分区等操作而改变。缺点:只有云硬盘才有软链接。无法感知分区的格式化操作。 | 执行以下命令,查看云硬盘的软链接。sudo ls -l /dev/disk/by-id |
| 使用文件系统的 UUID | 可能会因文件系统的 UUID 变化而导致自动挂载设置失效。例如,重新格式化文件系统后,文件系统的 UUID 将会发生变化。 | 执行以下命令,查看文件系统的 UUID。sudo blkid /dev/vdb |
| 使用设备名称 | 可能会因设备名称变化而导致自动挂载设置失效。 | 执行以下命令,查看设备名称。sudo fdisk -l |
执行以下命令,备份 /etc/fstab 文件。以备份到 /home 目录下为例:
sudo cp -r /etc/fstab /home执行以下命令,使用 VI 编辑器打开 /etc/fstab 文件。
sudo vi /etc/fstab按 i 进入编辑模式。
将光标移至文件末尾,按 Enter,添加如下内容。
<设备信息> <挂载点> <文件系统格式> <文件系统安装选项> <文件系统转储频率> <启动时的文件系统检查顺序>/dev/disk/by-id/virtio-disk-xxxxx /data ext4 defaults 0 0/dev/disk/by-id/virtio-disk-xxxxx-part1 /data/newpart ext4 defaults 0 2UUID=d489ca1c-5057-4536-81cb-ceb2847f9954 /data ext4 defaults 0 0UUID=d489ca1c-5057-4536-81cb-ceb2847f9954 /data/newpart ext4 defaults 0 2/dev/vdb /data ext4 defaults 0 0/dev/vdb1 /data/newpart /data/newpart ext4 defaults 0 2sudo mount -a 如果运行通过则说明文件写入成功,新建的文件系统会在操作系统启动时自动挂载。
输入 reboot手动重启后再输入 df -h`,可以看到硬盘已经自动挂载成功了

本章节(上)部分内容结束,感谢阅读~
]]>(已更新Zsh无法使用环境变量问题)
一般如果需要运行java程序时,需要一个简单、稳定的jdk或者jre环境,如下操作即可快速搭建java环境...
使用指令 sudo apt search jdk 即可搜索软件源中的jdk各类版本,找到需要的版本并复制下包名,使用 sudo apt install 包名 即可安装,如图:

通常情况下安装这个版本即可,使用指令 sudo apt install openjdk-11-jdk
如果所需的应用需要特定java环境或者想安装更新版本,可以去手动下载安装包,然后上传并解压等...
java常见下载站:
以AdoptOpenJDK为例,我们本篇文章是为树莓派安装jdk环境,因此选择的“其他平台”
本文推荐选择OpenJDK 11 ,此版本为长期支持版,较稳定,且此版本可以通过上面方法一快速安装。本文演示了OpenJDK 15版本的手动安装
依次选择 OpenJDK 15 —— HotSpot,在下面Operating System出选择Linux,Architecture处选择系统版本
如果是树莓派官方系统,应选择arm32,除非你的树莓派是安装了64位系统版本

在下面筛选出的版本中选择JDK版本下载(如果没有编译等生产需求,可以下载JRE版本,文件体积较小)

下载完后将压缩包上传至树莓派内,并解压,指令为 tar -zxvf 压缩包名

使用指令 mv ./jdk-15.0.2+7 /usr/java 将解压出的文件夹放在 /usr/java 文件夹,或者也可以放到 /etc/java 等其他地方,记下路径,可以输入 pwd 查看当前路径,选中后右键即可复制
配置环境变量:
sudo nano /etc/profile在文件末尾添加上以下内容:
export JAVA_HOME=/usr/java/jdk-15.0.2+7
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin其中,第一行的路径应该改成java存放的位置,如上述中我将解压出来的 jdk-15.0.2+7 文件夹放到了 /usr/java/ ,因此第一行填入当前的路径
修改完毕后按 Ctrl+O 保存,按 Ctrl+X 退出编辑
输入 source /etc/profile 刷新环境变量(无需重启)
输入 java -version 查看版本信息,如果出现版本信息即为安装成功
如果安装了zsh,在zsh下使用java指令会显示
zsh: command not found: java此时可以将/etc/profile添加的内容复制到用户目录下的.zshrc文件内,然后再输入
source .zshrc如图:

Zsh 属于 Shell 的一种,和 Bash 一样,但比 Bash 更好用,Zsh 完全兼容 Bash,拥有极其丰富的插件,其强大的自动补全参数、文件名以及自定义功能,可以大大提高我们使用 Linux 的效率。
本文将会展示安装zsh、美化主题与安装自动填充插件的过程。本文摘选自网络,原文:https://www.cnblogs.com/ShawnChan/p/11723626.html
echo $SHELLapt install -y zshchsh -s /bin/zshapt install -y gitsh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
复制配置文件:
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc主题列表可见github:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
vim .zshrc 修改 ZSH_THEME="ys"
"ys"为要修改主题的名称,可见github列表
插件列表可见github:https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
官网:Incremental completion on zsh(https://mimosa-pudica.net/zsh-incremental.html)
wget -O incr-0.2.zsh https://mimosa-pudica.net/src/incr-0.2.zshcp incr-0.2.zsh .oh-my-zsh/plugins/source ~/.oh-my-zsh/plugins/incr*.zshgit clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestionsplugins=(git zsh-autosuggestions)最后使用source ./zshrc重新加载zsh配置文件
凭个人需求和经验慢慢收录各种各样的Linux指令,包括且不仅于Debian系、红帽系等系统常用指令...
apt/apt-get
Debian系系统常用软件包管理指令,常用子命令:
install 从仓库寻找并安装软件包(软件包名字后加"="再加版本号,可以安装指定版本的软件包)
remove 移除软件包及重要依赖
autoremove 自动移除软件包及相关依赖
update 更新软件仓库
upgrade 获取软件更新并自动更新到最新版本
search 关键词搜索软件包yum
红帽系系统常用软件包管理指令,同系统下类似的指令还有dnf等(没详细了解)
install 同上,安装用man
单词manual的缩写,即使用手册的意思,可以通过指令如`man apt`来查看apt指令的使用手册
q 退出
Enter 按行下翻
Space 按页下翻
b 上翻一页
/字符串 在手册页中查找字符串netstat
用来显示网络状态,比较常用的有查看当前使用的端口等功能
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关
netstat -tunlp | grep 端口号 查看指定端口占用情况
netstat -ntlp 查看全部tcp端口占用
netstat -apu 查看UDP端口占用
netstat -i 显示网卡列表Linux用户与用户组添加:
//添加可登陆的普通账户,无su权限,无默认密码
sudo useradd yanhy
//设置初始密码
sudo passwd yanhy
//添加sudo权限,先修改sudoers为可写权限
chmod u+w /etc/sudoers
//编辑sudoers
vi /etc/sudoers
在 root ALL=(ALL:ALL) ALL 下面添加xxx ALL=(ALL) ALL
yanhy ALL=(ALL:ALL) ALL //允许用户yanhy执行sudo,需要密码
%yanhy ALL=(ALL:ALL) ALL //允许用户组yanhy里面的用户执行sudo,需要密码
yanhy ALL=(ALL:ALL) NOPASSWD: ALL //允许用户yanhy执行sudo且不输入密码
%yanhy ALL=(ALL:ALL) NOPASSWD: ALL //允许用户组yanhy里面的用户执行sudo且不输入密码
//撤销sudoers写入权限
chmod u-w /etc/sudoers
//查看全部用户
cat /etc/passwd
补充:
默认添加账户指令详细内容:
[root@localhost ~]# grep "yanhy" /etc/passwd
yanhy:500:500::/home/yanhy:/bin/bash
UID从500开始,自动创建home目录,bash默认为/bin/bash
新增账户时默认密码配置:
[root@localhost ~]# grep "yanhy" /etc/shadow
yanhy:!!:15710:0:999:7:::
密码为“!!”即无密码,密码有效期为999天,到期前7天将会提醒
新增账户时默认用户组配置:
[root@localhost ~]# grep "yanhy" /etc/group
yanhy:x:500:
创建用户时默认会创建和用户名相同的用户组,且GID也是从500开始
===以下为samba添加用户时附加操作===
//新增用户组为samba,用户组id为2000
sudo groupadd samba -g 2001
//添加无法登陆的账户,用于网盘等子账户,uid为2000,用户组id为2001(无法登陆终端的账户)
sudo useradd yanhy -u 2000 -g 2001 -s /sbin/nologin -d /dev/null
//授予访问权限
sudo chown -R yanhy:samba /home/ubuntu/
//同时再给自己一边权限
sudo chown -R ubuntu:ubuntu /home/ubuntu/
//添加samba用户密码
sudo smbpasswd -a yanhy
Screen使用方法简要总结(指令区分大小写)
- screen -ls 列出所有创建的窗口
- screen -S xxxx 新建一个名字为`xxxx`的新窗口并进入
- screen -r xxxx 进入一个名字为`xxxx`的窗口,如果没有这个名字的窗口会显示`There is no screen to be resumed matching xxxx.`
- screen -R xxxx 进入一个名字为`xxxx`的窗口,如果没有这个窗口会自动创建新窗口且名字为`xxxx`
- 关闭screen 进入一个窗口,然后关闭当前的项目,再输入exit,即可退出窗口并从列表中移除
- Ctrl + a + d 暂离当前窗口(进入一个窗口后,先按ctrl+a,保持ctrl键再按d即可离开该窗口,不影响运行的项目)
- screen -wipe 列出全部窗口并自动移除无效的窗口
- 出现名字相同的多个窗口时,进入窗口时需要输入id而不是窗口名,如:列表中有`114514.test` `1919810.test`,进入窗口时需要输入`screen -r 114514`
- kill 9 id号 强制杀死窗口进程(id号为`23333.Name`中的`23333`,如 `kill 9 23333`,不能输入窗口名)
修改bashrc文件后刷新
- 重新打开终端
- sudo source .bashrc
]]>经常为了在linux跑编译去安装虚拟机或者wsl,但其都有共同特征,即虚拟环境...为了更稳定的生产力以及学习linux,我找到了Fedora...
为搭建个正常的linux环境,我之前曾尝试了debian系的ubuntu、deepin、raspbian(PC版)、kali等,但因为都是同一系列的,总感觉操作有些乏味,于是找上了红帽系的系统,而Fedora正是红帽系广受欢迎的社区发行版系统,因此准备将其安装为第二系统。
这个系统使用体验不错,之前在搞服务器的时候用过centos,曾了解过yum软件包管理器等,但红帽系的系统操作还需学习,正好是个机会,写在博客上记录自己从安装双系统到优化fedora的日常使用。
安装完成后的截图:
因为日常开发还是windows系统,因此我选择从win来安装双系统。
因为考虑到可能日用,基本功能要有,所以这边选择工作站workstation版本下载。

在下载镜像的同时,打开分区软件(如diskgunius),为Fedora系统腾出一些空间(推荐60-80GB),将腾出的空间融为一块,且不创建新分区(后续Fedroa安装时会自动分配)(此文在fedroa系统下所写,因此无法提供截图)
下面操作步骤为回忆内容,至于为啥这么熟练,因为第一次分区分小了,重装了N次...
下载完毕后我选择使用u盘来安装(手头刚好有闲置u盘,其他的方法暂时不考虑),使用ultraiso将镜像写入到u盘,随后插入u盘,重启电脑,并按住F12不放(华为荣耀笔记本是F12选择启动设备,其他电脑自行查询),选择USB启动即可。
进入grub选择页后,直接选择默认的第一条进入即可,会进入到体验版系统,并会弹出系统安装引导软件。
选择中文、时区后,第三个选择硬盘需慎重。一般电脑内仅一块硬盘,选择默认硬盘后下方勾选自定义,再点左上角完成,会进入自定义分区页面
进入自定义分区页面后,确保下面显示空余空间为几十个GB而不是只有MB大小,如果是MB,可能分区的时候自动创建分区了,在下面列表找到目标分区后点下面的“-”号即可删除分区,小心不要把其他有重要数据的分区或者win系统分区删除了;如果是正常的几十GB,直接选择上面自动分区即可,无需多余操作,最后返回到主页面就可以开始安装系统了。
安装完成后,点击重启后拔出u盘,再次开机会自动引导到linux的grub启动,正常情况下grub启动项前两个分别是正常启动入口和恢复安全紧急模式入口,第三个引导项则是win的启动入口。(在fedora下,引导项无需且严重不推荐手动修改,系统会通过脚本自动找到可启动的linux内核,如果有安装多个版本,可以在系统内卸载旧内核版本,而不应该直接修改grub)
系统默认的grub可以说是非常简陋的了,因此在后面优化操作体验的时候会提到修改启动页面主题部门...
按照我个人的linux使用习惯,一般情况下没有国内优化的系统开箱第一件事就是换源了,不知道是不是错觉,没有换源总感觉装依赖都特别慢...
红帽系系统感觉换源还挺复杂的(之前给centos换源也是头疼了半天),这边就总结一下快捷指令吧,如果有特殊需要请做好备份
sudo sed -e 's|^metalink=|#metalink=|g' \
-e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.ustc.edu.cn/fedora|g' \
-i.bak \
/etc/yum.repos.d/fedora.repo \
/etc/yum.repos.d/fedora-modular.repo \
/etc/yum.repos.d/fedora-updates.repo \
/etc/yum.repos.d/fedora-updates-modular.repo中科大源帮助文档:https://mirrors.ustc.edu.cn/help/fedora.html
换源后输入sudo dnf makecache即可产生软件包缓存,随后即可yum update(yum、dnf都是软件包管理器)
换源后速度明显提升不少(截图来自fedora系统内置截图软件)(圆角好评
在这波更新后,浏览器、文件管理区、应用商店等众多软件都需要重新打开以生效新版本(至少我这个系统版本是这样,而且印象里内核还有个更新

应用商店打开速度也快了起来,软件包也能加载出来

一般在大型更新后,我是习惯输入sudo yum clean all来清理更新产生的缓存(原因是因为之前翻目录发现缓存cache目录占用特别大,查了一下发现很多软件包缓存),效果如图:

在较大更新或者应用商店明示你要更新内核时,更新完经常会留下旧内核,这时候就需要手动清理了(也可以不理会,就是开机引导时会有脚本把全部内核启动项给仍到grub,会显得不好看)
查看当前内核版本 uname -r
我这里提示版本为“5.14.10-300.fc35.x86_64”
查看系统内安装的内核相关包 rpm -qa | grep kernel
明显可以看出同一个包(如kernel-core)有两个不同的版本,再根据上面查到的当前内核版本,可以确定要卸载的包:
kernel-headers-5.14.9-300.fc35.x86_64
kernel-core-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-modules-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-5.14.10-300.fc35.x86_64(旧版本需卸载)
libreport-plugin-kerneloops-2.15.2-6.fc35.x86_64
abrt-addon-kerneloops-2.14.6-9.fc35.x86_64
kernel-modules-extra-5.14.10-300.fc35.x86_64(旧版本需卸载)
kernel-core-5.14.17-301.fc35.x86_64
kernel-modules-5.14.17-301.fc35.x86_64
kernel-5.14.17-301.fc35.x86_64
kernel-modules-extra-5.14.17-301.fc35.x86_64接下来,输入 sudo yum remove kernel-5.14.10-300.fc35.x86_64等手动移除这四个旧版本即可(-core可能无法移除,可重启后尝试)
最后输入reboot重启即可
至此,fedora已经安装完毕,且软件包等更新完成,可正常使用。想要了解更多玩法,欢迎继续关注本博客!
]]>