yanhy的学习记录匣 - Linux 2024-06-22T13:06:00+08:00 Typecho https://www.yanhy.top/index.php/feed/atom/tag/Linux/ <![CDATA[群晖硬盘阵列Raid1降级拆分硬盘]]> https://www.yanhy.top/index.php/archives/359/ 2024-06-22T13:06:00+08:00 2024-06-22T13:06:00+08:00 yanhy2000 https://yanhy.top 一开始组nas时买了一块全新4TB和二手4TB,刚入坑nas那会各种数据安全焦虑,所以组了Raid1软阵列。现在想拆分,可要麻烦不少,记录一下~

本文部分内容来源于 什么值得买:每天一个群晖小tip 篇三十四:五步操作将群晖RAID1阵列降级为Basic模式

破坏阵列

首先要拔掉一块硬盘,破坏Raid1的阵列,群晖会提示存储池降级,并有个“堪用”警示。

群晖通知

存储管理器显示降级

登陆SSH

1、使用ssh登陆群晖并获取root账户;

sudo -i

2、输入命令,查看当前分区;

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确保网络安全。插回刚刚的硬盘,重新初始化并创建存储池、存储空间即可使用。

新存储池的建立

]]>
<![CDATA[随身wifi折腾入门(番外)-- openwrt优化使用]]> https://www.yanhy.top/index.php/archives/338/ 2023-04-19T18:18:00+08:00 2023-04-19T18:18:00+08:00 yanhy2000 https://yanhy.top

本篇与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地址,热点仅作为管理端。

更换modem

使用sftp连接openwrt,然后将之前系统备份的 NON-HLOS.bin 文件解压或者通过镜像软件打开,将里面全部文件提取出来,再上传到 /root 目录中(可直接通过ssh远程软件自带的文件管理器上传,原理相同)

上传完成后,执行指令,将文件移动到 /lib/firmware

mv ./IMAGE/* /lib/firmware/

切换esim卡

正常来说,这个版本的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。

目前先到这里,剩下的随缘更新...

资料参考

开启swap分区

debian优化使用

]]>
<![CDATA[随身wifi折腾入门(番外)-- debian优化使用]]> https://www.yanhy.top/index.php/archives/336/ 2023-04-18T12:33:00+08:00 2023-04-18T12:33:00+08:00 yanhy2000 https://yanhy.top

注意:ipv6部分未完篇,但方法可行,如有建议可评论区留言,后面随缘更新...

本来这篇文章是为了ipv6热点而写的教程,后面发现方法很多但是争议也多,因此干脆作为日常使用及优化的记录篇,在本篇可以看到使用sim卡、切卡、网桥、led控制、更改usb模式等多个玩法,可按需学习使用...

环境与工具

本文使用 酷安@jsbsbxjxh66 大佬的ufi001b-debian超频版1.2Ghz Debian进行修改

使用esim卡环境(如使用实体卡可跳过切esim卡步骤)

使用电脑进行连接(需打开cmd进行adb操作,以及ssh工具)

制作网桥

本节修改内容:
网关:192.168.2.1
选卡:esim
网桥:br0

新建网桥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连接

添加wifi网络

通过ssh连接debian后,执行 nmtui ,选择 编辑连接 ,选择网桥br0点进去,手动添加一个wifi连接。

常用修正

接下来的内容按需采取,ipv6部分存在争议,可自行尝试

替换 HT40 驱动(可选)

将驱动文件上传到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/

切换esim卡

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转发会出问题。

重启sim卡

如果出现输入 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

查看emmc芯片寿命

棒子debian系统可通过执行指令查看emmc寿命,数值仅参考,也有部分型号查看为0x00的,为芯片未定义,0x01为最佳寿命,同理数值越大寿命越低,该值仅供参考

cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time

切换为USB模式

执行指令可断开棒子usb共享,更改为host主机模式,可用于棒子专用拓展坞使用

echo host > /sys/kernel/debug/usb/ci_hdrc.0/role

相反的,也可以切换回网络共享模式

echo gadget > /sys/kernel/debug/usb/ci_hdrc.0/role

快速开启一个wifi

如果棒子无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灯太闪(没壳的会显得很亮),可以执行指令关闭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

AP启用ipv6共享(待补充)

输入指令启用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.demo
interface br0 {
    AdvSendAdvert on;
    MinRtrAdvInterval 3;
    MaxRtrAdvInterval 10;
    AdvManagedFlag off;
    AdvOtherConfigFlag off;
    prefix REPLACEIPV6 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr off;
    };
};
/etc/ndppd.conf.demo
route-ttl 30000
proxy wlan0 {
    router yes
    timeout 500
    rule REPLACEIPV6  {
        auto
    }
}
/etc/dhcpcd.conf
interface br0
    ipv6
    ipv6rs
    ipv6ra_other_information

启动服务

systemctl restart radvd
systemctl restart ndppd
systemctl restart dhcpcd

理论上v6部分就结束了,但是试过不同设备有几率并不能分发地址,还存在争议,也可以参考这位大佬的文章开启v6共享:https://zyyme.com/msm8916-wifi.html

本篇暂时完结,不研究debian了,后续随缘更新...

]]>
<![CDATA[随身wifi折腾入门(3)-- 简单控制GPIO]]> https://www.yanhy.top/index.php/archives/334/ 2023-04-11T17:12:00+08:00 2023-04-11T17:12:00+08:00 yanhy2000 https://yanhy.top

本章节待慢慢补充...

linux下的GPIO一般可以在/sys/kernel/debug/gpio下查询到信息,但是由于棒子的PCB没有开源,无法得知目前那些GPIO可以使用。但是通过表面可知,至少有3颗LED、2路SIM卡控制端口可用,且板载Uart串口调试点,因此,如果能对其中几个IO进行操作,通过IIC协议,即可可以控制多路外设,成为真正的硬件开发板...

控制LED行为

从最简单的开始,控制一颗LED的亮灭。刷了Debian系统后,板子上只有红色、蓝色灯为启用状态,而绿色灯为None状态。因此,我们可以先拿没用的绿色LED下手。

了解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数据时会闪烁

尝试控制LED行为模式

使用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让其每次开机都设置为该模式。

制作温控PWM风扇

可以将其设置为 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

]]>
<![CDATA[Debian10系统下LNMP三件套安装与配置——Nginx与初始环境篇]]> https://www.yanhy.top/index.php/archives/231/ 2022-05-22T04:37:00+08:00 2022-05-22T04:37:00+08:00 yanhy2000 https://yanhy.top

近期需要搭建个简易的小型网站,原想着用服务器面板解决,但是网站程序要求苛刻(如使用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,搭建小型网站性能足够使用

LNMP环境包之‘L’——Linux

服务器使用腾讯云提供的纯净Debian 10.2镜像,无预装其他环境

安装linux系统.png

进入系统后先更新软件包:

apt update
apt upgrade

由于腾讯云的服务器都是预置好软件源的,因此购买大厂的机器后一般无需手动换源即可开箱即用

LNMP环境包之‘N’——Nginx

本文使用的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项内的路径可指定好也可保持默认,后面配置网页时可再修改。如图所示:

nginx配置文件修改1.png

找到"location ~ .php$"项,将其与大括号内的内容注释取消掉,并修改:

  • root项指定好网站根目录
  • 修改 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;

修改完成后如下图所示:

nginx配置文件修改2.png

按Ctrl+O写入文件,Ctrl+X退出编辑

最后将Nginx配置为开机启动即可:

systemctl start nginx
systemctl enable nginx

验证配置

本文修改后的配置文件如图:

nginx安装验证.png

由于测试所用的为一个静态页面,因此只需要指定根目录与域名即可。另存为test.conf,重启Nginx,检查无报错后所用浏览器访问域名,网页加载正常,说明Nginx配置验证成功。

拓展:多网站配置

如果要配置多个网站,只需要在域名服务商多解析几个到服务器IP的域名,然后将/etc/nginx/conf.d/default.conf文件重复拷贝作为模板使用,每次修改完配置文件,需要重新启动Nginx服务使其生效,同时要确保Nginx没有报错。

在配置文件时,只需要使location项内的root所指定的网站根目录不相同、server_name所指定的域名不相同,即可通过不同域名访问到不同站点根目录的index文件。

反代、伪静态本文暂且不提及。

]]>
<![CDATA[Linux轻量云服务器云硬盘搭建网盘(上)]]> https://www.yanhy.top/index.php/archives/191/ 2022-03-29T06:44:00+08:00 2022-03-29T06:44:00+08:00 yanhy2000 https://yanhy.top

腾讯云今年春节活动优惠力度较大,在这期间我也采购了一台服务器与俩数据盘,准备作为网盘...

资源:

  • 轻量云服务器2c4g 6M带宽
  • 云盘程序-cloudreve
  • 云硬盘100G+1000G

云服务器挂载硬盘

前往轻量服务器云硬盘后台挂载硬盘至目标服务器上

12222.png

云硬盘初始化

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

1333333.png

由于该云硬盘在之前挂载过windows server系统的服务器,使用指令fdisk -l得知已经被win分区处理过。因云硬盘上没有重要信息需要转移,所以这里准备直接进行重新初始化操作...

如果硬盘为新购挂载的可以直接查看“云硬盘初次使用初始化”...

win转linux云硬盘二次初始化

执行以下指令,进入 fdisk 分区工具,开始对新增数据盘执行分区操作。以新挂载的数据盘 /dev/vdb 为例,则执行以下命令:

sudo fdisk /dev/vdb

14444.png

从前面得知,这块硬盘已经被win分区过了,所以先删除全部分区,再重新格式化以挂载给linux使用

输入指令 d 来删除分区,分别删除1、2号分区

1555555.png

删除分区后,再重新建立个新的分区并格式化为ext4

输入指令 n 来新建分区,有时会提醒要选择分区类型,一般可输入 p 来创建个主要分区(p 表示主要分区,e 表示扩展分区)

之后要选择的主分区编号、初始扇区、截止扇区可直接回车默认即可。

操作结束后,输入指令 p 即可看到新建的分区。确认无误后,输入指令 w 将分区结果写入分区表中。

如果上述操作有失误之处,直接输入 q 可不保存退出

16666.png

退出分区软件后,输入指令将分区表同步到系统:

partprobe

如果此指令提示找不到命令,需要安装软件包parted来解决:apt install parted

执行以下命令,将新建分区文件系统设置为系统所需格式:

sudo mkfs -t <文件系统格式> /dev/vdb1

不同文件系统支持的分区大小不同,请根据实际需求合理选择文件系统。以设置文件系统为 EXT4 为例,则执行以下命令:(格式化需要一段时间,请稍等一会)

sudo mkfs -t ext4 /dev/vdb1

1666666.png

再输入 fdisk -l 可看出,该硬盘文件系统已经变成“Linux filesystem”

再如法炮制,将第二块硬盘也初始化一番...

177777.png

此时云硬盘已经初始化结束,接下来就可以挂载使用了。

云硬盘初次使用初始化

执行以下命令,查看磁盘名称:

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

188888.png

因为是为了网盘服务,所以要保证服务器启动时硬盘也可以同时被加载,接下来设置硬盘开机自动挂载...

本文使用的是腾讯云购买的云硬盘,可以直接使用云硬盘的软链接。官方文档:

挂载方式优缺点信息获取方式
使用云硬盘的软链接(推荐)优点:每个云硬盘的软链接固定且唯一,不会随卸载挂载、格式化分区等操作而改变。缺点:只有云硬盘才有软链接。无法感知分区的格式化操作。执行以下命令,查看云硬盘的软链接。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 2
  • 以使用磁盘分区的 UUID 自动挂载为例,结合前文示例则添加:
UUID=d489ca1c-5057-4536-81cb-ceb2847f9954 /data ext4 defaults 0 0
  • 若您需挂载分区,则结合前文示例则添加:
UUID=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 2
  • 按 Esc,输入 :wq 并按 Enter 保存设置并退出编辑器。
    执行以下命令,检查 /etc/fstab 文件是否写入成功。
sudo mount -a 

如果运行通过则说明文件写入成功,新建的文件系统会在操作系统启动时自动挂载。

输入 reboot手动重启后再输入 df -h`,可以看到硬盘已经自动挂载成功了

2222211.png

本章节(上)部分内容结束,感谢阅读~

]]>
<![CDATA[在树莓派Linux多方式安装Java]]> https://www.yanhy.top/index.php/archives/66/ 2022-03-29T06:34:00+08:00 2022-03-29T06:34:00+08:00 yanhy2000 https://yanhy.top

(已更新Zsh无法使用环境变量问题)

一:使用apt自动化安装jdk

一般如果需要运行java程序时,需要一个简单、稳定的jdk或者jre环境,如下操作即可快速搭建java环境...

使用指令 sudo apt search jdk 即可搜索软件源中的jdk各类版本,找到需要的版本并复制下包名,使用 sudo apt install 包名 即可安装,如图:

08970-os7hivfel8f.png

通常情况下安装这个版本即可,使用指令 sudo apt install openjdk-11-jdk
26914-oud8vb3ztd.png

二:手动下载安装自己所需jdk版本

如果所需的应用需要特定java环境或者想安装更新版本,可以去手动下载安装包,然后上传并解压等...

下载JDK

java常见下载站:

以AdoptOpenJDK为例,我们本篇文章是为树莓派安装jdk环境,因此选择的“其他平台”

本文推荐选择OpenJDK 11 ,此版本为长期支持版,较稳定,且此版本可以通过上面方法一快速安装。本文演示了OpenJDK 15版本的手动安装

依次选择 OpenJDK 15 —— HotSpot,在下面Operating System出选择Linux,Architecture处选择系统版本
如果是树莓派官方系统,应选择arm32,除非你的树莓派是安装了64位系统版本

09556-tiitxuhl51r.png

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

55141-nkoerhtmlos.png


配置JDK

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

66816-ekjbxw8gywd.png

使用指令 mv ./jdk-15.0.2+7 /usr/java 将解压出的文件夹放在 /usr/java 文件夹,或者也可以放到 /etc/java 等其他地方,记下路径,可以输入 pwd 查看当前路径,选中后右键即可复制
59399-efuj3cic6gw.png

配置环境变量:

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/ ,因此第一行填入当前的路径
15474-y0avhlpu0md.png

修改完毕后按 Ctrl+O 保存,按 Ctrl+X 退出编辑
输入 source /etc/profile 刷新环境变量(无需重启)
输入 java -version 查看版本信息,如果出现版本信息即为安装成功
49859-ann0n9ewz1.png


新增zsh解决

如果安装了zsh,在zsh下使用java指令会显示

zsh: command not found: java

此时可以将/etc/profile添加的内容复制到用户目录下的.zshrc文件内,然后再输入

source .zshrc

如图:

1111111.png

本文到此结束,感谢支持!

]]>
<![CDATA[Linux使用 Oh-My-Zsh 美化终端]]> https://www.yanhy.top/index.php/archives/182/ 2022-03-29T04:55:00+08:00 2022-03-29T04:55:00+08:00 yanhy2000 https://yanhy.top

Zsh 属于 Shell 的一种,和 Bash 一样,但比 Bash 更好用,Zsh 完全兼容 Bash,拥有极其丰富的插件,其强大的自动补全参数、文件名以及自定义功能,可以大大提高我们使用 Linux 的效率。
本文将会展示安装zsh、美化主题与安装自动填充插件的过程。本文摘选自网络,原文:https://www.cnblogs.com/ShawnChan/p/11723626.html

查看当前shell

echo $SHELL

安装zsh

apt install -y zsh

切换默认shell

chsh -s /bin/zsh

安装git

apt install -y git

安装oh-my-zsh管理器

自动安装

sh -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列表

安装自动补全插件

incr自动补全插件

插件列表可见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.zsh
  • 复制incr*.zsh文件到plugins
cp incr-0.2.zsh .oh-my-zsh/plugins/
  • 在.zshrc 文件末尾添加下面这行
source ~/.oh-my-zsh/plugins/incr*.zsh
  • 重新打开终端,以使配置生效

zsh-autosuggestions自动补全插件

  • 下载插件(该命令会将插件自动clone到.oh-my-zsh目录中)
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
  • 编辑.zshrc文件(找到plugins=(git)这一行,如果没有添加。更改为如下)
plugins=(git zsh-autosuggestions)

最后使用source ./zshrc重新加载zsh配置文件

]]>
<![CDATA[Linux常用操作指令(更新中)]]> https://www.yanhy.top/index.php/archives/151/ 2022-03-29T04:48:00+08:00 2022-03-29T04:48:00+08:00 yanhy2000 https://yanhy.top

凭个人需求和经验慢慢收录各种各样的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
]]>
<![CDATA[[Linux系统] Fedora体验]]> https://www.yanhy.top/index.php/archives/133/ 2021-11-17T07:43:00+08:00 2021-11-17T07:43:00+08:00 yanhy2000 https://yanhy.top

经常为了在linux跑编译去安装虚拟机或者wsl,但其都有共同特征,即虚拟环境...为了更稳定的生产力以及学习linux,我找到了Fedora...2021-11-16 23-58-56屏幕截图.png

前言

为搭建个正常的linux环境,我之前曾尝试了debian系的ubuntu、deepin、raspbian(PC版)、kali等,但因为都是同一系列的,总感觉操作有些乏味,于是找上了红帽系的系统,而Fedora正是红帽系广受欢迎的社区发行版系统,因此准备将其安装为第二系统。
这个系统使用体验不错,之前在搞服务器的时候用过centos,曾了解过yum软件包管理器等,但红帽系的系统操作还需学习,正好是个机会,写在博客上记录自己从安装双系统到优化fedora的日常使用。
安装完成后的截图:
2021-11-17 00-03-32 的屏幕截图.png


安装

因为日常开发还是windows系统,因此我选择从win来安装双系统。

下载镜像

官网链接:https://getfedora.org/

因为考虑到可能日用,基本功能要有,所以这边选择工作站workstation版本下载。

2021-11-16 23-57-56屏幕截图.png

在下载镜像的同时,打开分区软件(如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系统内置截图软件)(圆角好评
换源后终端.png

在这波更新后,浏览器、文件管理区、应用商店等众多软件都需要重新打开以生效新版本(至少我这个系统版本是这样,而且印象里内核还有个更新

2021-11-17 00-54-03屏幕截图.png

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

2021-11-17 00-55-38屏幕截图.png

清理缓存、旧内核

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

2021-11-17 01-00-22屏幕截图.png

在较大更新或者应用商店明示你要更新内核时,更新完经常会留下旧内核,这时候就需要手动清理了(也可以不理会,就是开机引导时会有脚本把全部内核启动项给仍到grub,会显得不好看)

查看当前内核版本 uname -r
我这里提示版本为“5.14.10-300.fc35.x86_64”

查看系统内安装的内核相关包 rpm -qa | grep kernel
2021-11-17 01-07-42屏幕截图.png

明显可以看出同一个包(如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已经安装完毕,且软件包等更新完成,可正常使用。想要了解更多玩法,欢迎继续关注本博客!

]]>