最近github需要双重身份验证才能登录并上传代码。操作流程如下:
首先,登录GitHub后,打开Settings,点击左侧Password and authentication,设置Two-factor authentication为enabled。会弹出一个界面,上面有个二维码。
然后,在google浏览器中安装插件“身份验证器”,使用该插件给二维码截图,再点击插件,即可返回一串数字,填入网页中,即可完成验证。
最近github需要双重身份验证才能登录并上传代码。操作流程如下:
首先,登录GitHub后,打开Settings,点击左侧Password and authentication,设置Two-factor authentication为enabled。会弹出一个界面,上面有个二维码。
然后,在google浏览器中安装插件“身份验证器”,使用该插件给二维码截图,再点击插件,即可返回一串数字,填入网页中,即可完成验证。
若没有xfs_quota命令,则安装quota软件:
dnf install quota
临时关闭
setenforce 0
永久关闭
perl -p -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
mount -o remount,usrquota,grpquota /dev/sdb1 /home
或修改 /etc/fstab 文件永久生效(需要重新挂载目标分区才能生效):
/dev/sdb1 /home xfs defaults,usrquota,grpquota 0 0
然后使用mount命令查看挂载分区是否支持磁盘配额:
mount | grep home
/dev/sdb1 on /home type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
虽然添加了挂载参数,使用mount命令检测时,其挂载方式依然是noquota。在使用xfs_quota进行配额时会失败,提示:
xfs_quota: cannot set limits: Function not implemented
此时,需要进行开机的配置设置,修改启动配置文件/etc/default/grub内容如下:
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rhgb quiet rootflags=uquota,pquota" 主要添加了rootflags=uquota,pquota参数。
然后,重新生成启动文件:
对于Legacy启动
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.orig && grub2-mkconfig -o /boot/grub2/grub.cfg
对于UEFI启动
cp /boot/efi/EFI/rocky/grub.cfg /boot/efi/EFI/rocky/grub.cfg.orig && grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
然后重启后,再检测mount参数。
对user01用户的/home分区进行配额。软限制为3G,硬限制为3.5G。
xfs_quota -x -c 'limit bsoft=3000m bhard=3500m user01' /home
xfs_quota -x -c report /home
-x 允许执行管理员指令
-c 输入执行的指令
对user01、user02、user03等多个用户的家目录进行配额。软限制为3G,硬限制为3.5G。按如下步骤进行:
第一步,生成/etc/projects文件
echo "1000:/home/user01
1000:/home/user02
1002:/home/user03" > /etc/projects
以上/etc/projects文件中设置了两个project编号。project编号是一个数字,可以随便给一个。其中1000对应两个文件夹,1002对应一个文件夹。后续设置好后,这1000对应的两个文件夹一起共享一个配额,而1002对应的文件夹独享一个配额。
第二步,生成/etc/projid文件
echo "user01_3G:1000
user03_3G:1002" > /etc/projid
该/etc/projid文件设置一个好记的project名称(随便取名,推荐取得有意义些),对应这project编号。
第三步,让project名称生效
xfs_quota -x -c 'project -s user01_3G' /home
xfs_quota -x -c 'project -s user03_3G' /home
命令行project的参数-s表示读取/etc/projects文件内容,标记目标文件夹进行配额。每当对/etc/projects文件内容进行修改后,则需要重新运行相应的命令,使修改生效。
第四步,设置project名称对应的磁盘配额。
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user01_3G' /home
xfs_quota -x -c 'limit -p bsoft=3000m bhard=3500m user03_3G' /home
命令行limit的参数-p表示使用project方式进行配额。若配额限制为0,则表示不进行配额限制。
查看磁盘配额及使用量:
xfs_quota -x -c report /home
查看磁盘分区和目录是否有quota设置:
xfs_quota -x -c print
查看磁盘配额的使用量:
xfs_quota -x -c “df -h”
目前,最新版本的SGE版本是8.1.9版本,其软件较旧,在Rocky 9.2 Linux系统上使用其高版本的GCC进行编译基本不会成功。于是采用特别提供repo源进行安装,即采用某些高人已经编译好的rpm软件进行安装。
部署SGE前,需要设置好各个节点的主机名,需要修改3个文件。以设置node1主机为例:
echo 'NETWORKING=yes
HOSTNAME=node1' > /etc/sysconfig/network
echo 'node1' > /proc/sys/kernel/hostname
echo 'node1' > /etc/hostname
然后在各节点上设置主机名和其IP映射信息:
echo '10.0.0.1 node1
10.0.0.2 node2
10.0.0.3 node3
10.0.0.4 node4
10.0.0.5 node5
10.0.0.6 node6
10.0.0.7 node7
10.0.0.8 node8' > /etc/hosts
首先,开放防火墙端口。
sudo firewall-cmd --add-port=992/udp --permanent
sudo firewall-cmd --add-port=6444/tcp --permanent
sudo firewall-cmd --add-port=6445/tcp --permanent
sudo systemctl restart firewalld.service
然后,安装SGE软件可能依赖的一些系统软件。
sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs
继续,正式安装SGE软件,采用loveshack编译的SGE。
sudo wget https://copr.fedorainfracloud.org/coprs/loveshack/SGE/repo/epel-9/loveshack-SGE-epel-9.repo -P /etc/yum.repos.d
sudo dnf -y install gridengine gridengine-devel gridengine-execd gridengine-drmaa4ruby gridengine-qmon
# 需要强制安装gridengine-qmaster,正常安装保存血少libdb4,而Rocky9默认安装libdb5。
sudo dnf -y download gridengine-qmaster
sudo rpm -ivh --nodeps gridengine-qmaster-8.1.9-6.el9.x86_64.rpm
sudo chown -R chenlianfu:chenlianfu /opt/sge
最后,在管理节点上部署SGE的qmaster服务。
cd /opt/sge
./install_qmaster
# 安装到靠后时,启动了Grid Engine qmasster服务,然后可以提供部署SGE的节点主机名信息,按y和Enter键使用一个文件来提供主机信息,输入文件路径/etc/hosts提供加入到SGE集群系统的主机信息。有利于后续在各计算节点上部署execd服务。
首先安装SGE依赖的系统软件,然后部署SGE的execd服务。
sudo dnf -y install csh java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc ant automake hwloc-devel openssl-devel libdb-devel pam-devel libXt-devel motif-devel ncurses-libs ncurses-devel ant-junit junit javacc libdb-utils jemalloc munge-libs
cd /opt/sge
./install_execd
# 全程按Enter键直到完毕即可。
部署完毕后,若需要使用SGE软件,则执行如下命令载入SGE的环境变量信息:
source /opt/sge/default/common/settings.sh
或将该信息添加到~/.bashrc从而永久生效:
echo 'source /opt/sge/default/common/settings.sh' >> ~/.bashrc
source ~/.bashrc
启动SGE软件方法:
sudo /opt/sge/default/common/sgemaster restart # 控制节点启动
sudo /opt/sge/default/common/sgeexecd restaart # 计算节点启动
查看SGE软件运行日志文件:
Qmaster: /opt/sge/default/spool/qmaster/messages Exec daemon: /opt/sge/default/spool/<hostname>/messages
我通过编写一个程序:keep_SGE,使用root用户或无密码sudo权限运行后能自动维持管理节点或计算节点的SGE服务。再继续通过例行任务流程,能使集群中服务器再SGE系统中的稳定性。
sudo mkdir /root/bin
sudo wget http://chenlianfu.com/public/bin/keep_SGE -P /root/bin/
sudo echo -e "1\t*\t*\t*\t*\t/root/bin/keep_SGE" > crontab.txt
sudo crontab crontab.txt
sduo rm crontab.txt
部署完毕SGE后,会生成一个默认主机用户组@allhosts,它包含所有的执行节点;生成一个默认的all.q队列名,它包含所有节点所有计算资源。默认的队列包含的计算资源是最大的。 通过使用命令qconf -mq queuename来对队列进行配置。修改hostlist来配置该队列可以使用执行主机;修改slots来配置各台执行主机可使用的线程数。从而对队列的计算资源进行设置。
使用qconf命令对SGE进行配置:
qconf -ae hostname
添加执行主机
qconf -de hostname
删除执行主机
qconf -sel
显示执行主机列表
qconf -ah hostname
添加管理主机
qconf -dh hostname
删除管理主机
qconf -sh
显示管理主机列表
qconf -as hostname
添加提交主机
qconf -ds hostname
删除提交主机
qconf -ss
显示提交主机列表
qconf -ahgrp groupname
添加主机用户组
qconf -mhgrp groupname
修改主机用户组
qconf -shgrp groupname
显示主机用户组成员
qconf -shgrpl
显示主机用户组列表
qconf -aq queuename
添加集群队列
qconf -dq queuename
删除集群队列
qconf -mq queuename
修改集群队列配置
qconf -sq queuename
显示集群队列配置
qconf -sql
显示集群队列列表
qconf -ap PE_name
添加并行化环境
qconf -mp PE_name
修改并行化环境
qconf -dp PE_name
删除并行化环境
qconf -sp PE_name
显示并行化环境
qconf -spl
显示并行化环境名称列表
qstat -f
显示执行主机状态
qstat -u user
查看用户的作业
qhost
显示执行主机资源信息
使用qsub提交作业
qsub简单示例:
$ qsub -V -cwd -o stdout.txt -e stderr.txt run.sh
其中run.sh中包含需要运行的程序,其内容示例为如下三行:
#!/bin/bash
#$ -S /bin/bash
perl -e 'print "abc\n";print STDERR "123\n";'
qsub的常用参数:
-V
将当前shell中的环境变量输出到本次提交的任务中。
-cwd
在当前工作目录下运行程序。默认设置下,程序的运行目录是当前用户在其计算节点的家目录。
-o
将标准输出添加到指定文件尾部。默认输出文件名是$job_name.o$job_id。
-e
将标准错误输出添加到指定文件尾部。默认输出文件名是$job_name.e$job_id。
-q
指定投递的队列,若不指定,则会尝试寻找最小负荷且有权限的队列开始任务。
-S
指定运行run.sh中命令行的软件,默认是tcsh。推荐使用bash,设置该参数的值为 /bin/bash 即可,或者在run.sh文件首部添加一行#$ -S /bin/bash。若不设置为bash,则会在标准输出中给出警告信息:Warning: no access to tty (Bad file descriptor)。
-hold_jid
后接多个使用逗号分隔的job_id,表示只有在这些job运行完毕后,才开始运行此任务。
-N
设置任务名称。默认的job name为qsub的输入文件名。
-p
设置任务优先级。其参数值范围为 -1023 ~ 1024 ,该值越高,越优先运行。但是该参数设置为正数需要较高的权限,系统普通用户不能设置为正数。
-j y|n
设置是否将标准输出和标准错误输出流合并到 -o 参数结果中。
-pe
设置并行化环境。
任务提交后的管理:
$ qstat -f
查看当前用户在当前节点提交的所有任务,任务的状态有4中情况:qw,等待状态,刚提交任务的时候是该状态,一旦有计算资源了会马上运行;hqw,该任务依赖于其它正在运行的job,待前面的job执行完毕后再开始运行,qsub提交任务的时候使用-hold_jid参数则会是该状态;Eqw,投递任务出错;r,任务正在运行;s,被暂时挂起,往往是由于优先级更高的任务抢占了资源;dr,节点挂掉后,删除任务就会出现这个状态,只有节点重启后,任务才会消失。
$ qstat -j jobID
按照任务id查看
$ qstat -u user
按照用户查看
$ qdel -j jobID
删除任务
Cygwin软件是Windows系统下的一个终端软件。它其实是一个小型的Linux虚拟机,它能运用大部分的Linux原生命令,也能访问Windows的文件系统。
在Cygwin官网https://www.cygwin.com/中下载最新版本的软件安装包,然后在windows系统下进行安装。需要注意的是,安装的时候要选择或填写可用的镜像站点网址(例如,http://mirrors.163.com/cygwin/)才能进行联网下载和安装。需要注意的是,在安装过程中要选择并安装一些常用的软件,例如 procps, gcc, make, cmake, openssh, curl, wget, perl, python, rsync, vim, lynx和chere等。在安装流程的选择软件包界面,查看的下拉菜单中选择完整,利用搜索来检索软件名称并双击跳过来进行软件的选择和安装。
软件安装完毕后,双击windows系统桌面上的软件图标,则打开了一个Linux系统的终端,用于Linux系统命令的直接运行。此外,Cygwin软件在Windows目录C:\cygwin64\bin下生成了各个Linux命令的exe文件,可以在windows下CMD中运行。需要注意的是, C:\cygwin64目录是Cygwin Linux系统的根目录,而windows的各个磁盘分区位于Cygwin Linux系统的/cygdrive目录下。
后续可以使用apt-cyg命令在Cygwin Linux中安装系统软件,需要安装其包管理器软件apt-cyg:
# 从官网下载apt-cyg软件,其实是一个bash脚本程序
curl https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
chmod 755 apt-cyg
mv apt-cyg /usr/bin
# 设置apt-cyg的源
apt-cyg mirror http://mirrors.163.com/cygwin
# 下载并安装rsync和oenssh软件
apt-cyg install rsync openssh procps
# 若报错没有wget和lynx命令,则重新双击Cygwin安装软件再次安装,搜索并选中wget和lynx命令,额外安装这两个命令后,则可以让apt-cyg顺利运行。
若需要更新Cygwin软件,直接下载最新版软件,再次安装到相同目录即可覆盖和更新,不影响Cygwin系统中已经安装好的软件和用户配置。
此外,若打开的Cygwin终端中不能正确显示中文主机名,可以在终端界面右击打开Options选项,做成点击Text栏,右侧在Locale菜单中选择C,Character set菜单中选择GBK,应用保存后,重新打开Cygwin终端,即可正常显示中文字符。
默认情况下,通过桌面快捷方式或开始菜单中打开Cygwin软件,进入的工作目录是用户的家目录。为了更方便进行数据操作,可以实现:在某个文件夹或桌面上右键点击,再于弹出的菜单中点击打开Cygwin软件,并自动进入到所在的工作文件夹中。
有两种方法能实现右击打开Cygwin并进入工作目录:
1. 在Cygwin Linux系统中安装chere软件后,以管理员权限打开Cygwin Linux终端,执行命令:chere -i -t mintty -s bash,成功后,右键菜单中有“Bash Prompt Here”选项,点击即可打开Cygwin Linux终端,且自动进入目标文件夹。改进效果:按win+r,输入regedit按回车键后打开注册表编辑器,打开路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cygwin64_bash”,将默认数据“&Bash Prompt Here”改为“在此处打开 Cygwin”,能修改右击后菜单的选项名称;然后在页面右侧空白处右击新建字符串值并改名为“Icon”,双击它并填入数据值“C:\cygwin64\Cygwin-Terminal.ico”,使之指向一个图片log文件,能修改右击有菜单选项的图片log;左键点击下级选项command,双击右侧的默认选项,修改其值为:C:\cygwin64\bin\mintty.exe -e /bin/bash --login -i -c "cd '%V';exec bash",则表示使用右击菜单中的Cygwin打开时执行的CMD命令,能让打开Cygwin的方式更好。 2. 直接手动修改Windows系统的注册表信息:按win+r,输入regedit按回车键后打开注册表编辑器,打开路径“计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\Cygwin\command”;新建项Cygwin及其字符串Icon,该项的默认数据值设置为“在此处打开 Cygwin”,字符串Icon的数据值设置为“C:\cygwin64\Cygwin-Terminal.ico”;在其下新建项command,其默认数据值设置为C:\cygwin64\bin\mintty.exe -e /bin/bash --login -i -c "cd '%V';exec bash"。
以上通过修改Windows系统注册表的方式实现了右击打开Cygwin软件,修改后立马生效,不需要重启系统。
打开Cygwin软件的命令是 C:\cygwin64\bin\mintty.exe,可以在Cygwin终端中执行命令”mintty –help”查看其使用方法。可以通过一些参数设置终端窗口在Windows桌面上的位置、终端的行数和列数、是否有窗口边界、是否有标题、进入终端后执行的命令等。
在我个人笔记本电脑的Windows桌面上生成文件aa.bat,写入以下三行内容:
C:\cygwin64\bin\mintty.exe --position 3,3 --size 113x35 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116
C:\cygwin64\bin\mintty.exe --position 3,1060 --size 113x34 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116
C:\cygwin64\bin\mintty.exe --position 1930,3 --size 112x69 --title 1 --Border void -e ssh -p 7118 -i C:\cygwin64\home\chenlianfu\.ssh\id_rsa chenlianfu@122.205.95.116
当双击桌面上aa.bat文件时,即可同时打开3个Cygwin终端,能整齐排列并占满桌面;每个终端打开后则执行ssh命令并无密码自动登录到我的远程服务器中。
通过热键进行一键启动的高级用法:我个人通过AutoHotkey软件设置热键,当按 alt+f 键时,即表示执行了aa.bat,即可同时打开多个排列整齐的Cywin终端并同时自动连接服务器。操作方法:首先通过AutoHotkey官网https://www.autohotkey.com/下载并安装AutoHotkey软件;然后在桌面上生成文件aa.ahk,其内容如下,用于设置热键;双击aa.ahk文件运行程序,使热键生效;将aa.ahk文件放置到C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup路径(其中xxx是用户名)下,让aa.ahk程序能开机启动,从而实现永久生效。
; 在Windows系统桌面上打开多个cygwin终端 ; 设置快捷的热键:^表示control键;#表示windows键;!表示Alt键;Right表示方向键右。 !f:: Run C:\User\Desktop\aa.bat Return
在Windows11系统下,按 Windows+i 打开设置,点击应用,点击可选功能,点击查看功能,勾选OpenSSH服务器,点击下一步,点击安装。
或者使用Windows Terminal安装OpenSSH:按Windows + x,点击Windows终端(管理员),输入以下命令分别安装OpenSSH客户端和服务端。
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装完毕OpenSSH服务端后,还需要启动SSH服务,设置开机启动,设置防火墙。在Windows终端(管理员)中执行以下命令:
# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
操作完毕后,即可使用SSH登录到Windows系统终端了。登录后的操作,和在目标机器上打开其Windows终端进行操作是等同的。
ssh username@servername
修改OpenSSH配置文件,使支持使用密钥远程登录Windows系统。修改C:\ProgramData\ssh\sshd_config文件的内容,修改如下几项:
PubkeyAuthentication yes PermitRootLogin no ClientAliveInterval 60 ClientAliveCountMax 10 UseDNS no GatewayPorts yes
修改完配置文件后,在Windows终端中重启SSH服务:
Stop-Service sshd; Start-Service sshd
或
Restart-Service -Name sshd
我经常远程登录Linux服务器进行比较耗时的计算,却又想在程序结束后能及时提醒我。于是,我在输入一个耗时较长的命令后,额外加一个命令finishing_reminder_by_ringingSong.pl。该命令在远程Linux系统上运行后,能播放我当前笔记本电脑Windows系统中的一段响铃音乐。具体的操作流程如下:
将在Linux系统上的密钥文件id_rsa拷贝到Windows系统用户的.ssh文件夹下,将授权文件authorized_keys拷贝到C:\ProgramData\ssh文件夹下并重命名为administrators_authorized_keys。在Windows终端(管理员)中对这两个文件再进行权限设置,修改拥有者权限:
icacls.exe "C:\Users\chenlianfu\.ssh\id_rsa" /inheritance:r /grant "chenlianfu:F"
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
在Windows系统上执行命令,构建到公网服务器的反向隧道:
ssh -f -N -R 52228:localhost:22 chenlianfu@chenlianfu.com
考虑设置开机时在联网状态下自动运行以上命令:右击我的电脑,显示更多选项,管理,任务计划程序,创建任务,在弹出的页面中进行设置。触发器:启动后1分钟;条件:只有在有网络连接可用时才启动;操作:以上ssh命令。
在远程Linux计算服务器上检测能否使用密钥登录到Windows笔记本电脑上:
ssh -p 52228 chenlianfu@chenlianfu.com
设置Windows系统Path路径:按Windows+q搜索“高级系统设置”,点击“查看高级系统设置”,在弹出的窗口中点击“环境变量”,鼠标左键选中“Path”所在行,再点击编辑,浏览到文件夹C:\Program Files (x86)\Windows Media Player和C:\Program Files (x86)\Tencent\QQMusic\QQMusic1917.16.31.32,从而将该路径添加进去,再点击确定。此外,我将音频文件放置于D:\ringing_sound_01.mp3路径。关闭所有Windows终端,再重新打开,输入命令即可播放音乐:
wmplayer.exe D:\ringing_sound_01.mp3
QQMusic.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3
在远程Linux服务器中执行命令,即可播放本地笔记本电脑上的音频。
ssh -p 52228 chenlianfu@chenlianfu.com "wmplayer.exe D:\ChenLianfu_Data\05.设置数据\ringing_sound_01.mp3"
按Windows+q,在搜索框输入“控制面板”,打开Window7时代的控制面板页面,再点击“备份和还原(Windows 7)”,于打开的页面中点击“创建系统映像”,即可将系统中的所有设置和软件备份到指定的驱动器下,生成文件夹WindowsImageBackup。
按Windows+q,在搜索框输入“创建恢复驱动器”,打开的页面中会自动识别驱动器,此时插上U盘后会自动刷新找到U盘的驱动器盘符,按提示将U盘做成启动盘,用于系统恢复。
按windows+q键,在打开的搜索栏中输入“功能”,点击出现的“启用或关闭Windows功能”,在出现的复选框拆单中中,勾选“适用于Linux的Windows子系统”和“虚拟机平台”。然后等待一段时间用于安装WSL,完毕后提示重启计算机,按提示确认重启即可。
或使用Windows自带的命令行终端进行操作:按windows+x键,再按字母a,则打开管理员PowerShell;输入命令“wsl –install”,然后重启计算机即可。
目前,WSL有1和2两个版本,默认安装的是WSL2。WSL2相比WSL1,它多了3个功能:托管VM,完整的Linux内核和完全的系统调用兼容性,但其跨OS文件系统的性能较差。在管理员PowerShell中使用如下命令可以切换WSL版本:“wsl –set-default-version 1”。
在Windows系统的微软应用商店中搜索Linux子系统,选择一个进行下载安装即可。
或者打开Windows管理员Power Shell,使用命令“wsl –list –online”检测可以使用的Linux子系统,当前结果如下:
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
然后,下载相应的Linux系统,例如,在浏览器中输入https://aka.ms/wslubuntu2204网址,即可下载得到文件Ubuntu2204-221101.AppxBundle。下载完毕后,双击安装即可。需要注意,可能双击安装不成功,此时需要根据提示,在浏览器中打开https://aka.ms/wslstore网址,并下载WSL2 Linux内核更新包并安装,然后再安装Ubuntu2204。安装完毕后根据提示设置用户名和密码。
打开Windows Power Shell,使用命令bash或ubuntu即可进入到Linux子系统。我安装了cygwin虚拟机,在cygwin中输入ubuntu命令也能进入到Linux子系统。
在Linux子系统中创建/etc/wsl.conf,能对Linux子系统进行一些设置,例如:是否自动挂载Windows系统的磁盘分区、设置主机名、是否将Windows程序添加到PATH环境变量。简单示例如下:
[network]
hostname=ubuntu2204
重启Linux子系统方法:(1)在Linux子系统或Windows Power Shell中,输入命令“wsl.exe –shutdown”即可;(2)在 Windows Power Shell中,输入命令“net stop LxssManager”关闭相应服务,在输入命令“net stop LxssManager”开启服务。
若设置用户无密码sudo时,需要修改/etc/sudoers文件内容“%sudo ALL=(ALL:ALL) NOPASSWD:ALL”,而仅单独对用户进行NOPASSWD设置依然不能生效。
使用Linux子系统前,推荐先安装一些软件:
sudo apt-get update
sudo apt-get install gcc sra-toolkit net-tools sysstat
CentOS8系统默认没有安装Docker软件,而是同为容器软件的Podman。在CentOS8系统上安装Docker软件,首先要卸载runc及依赖它的Podman软件,因为Docker软件安装需要依赖的containerd.io和runc冲突。然后,安装Docker的dnf源来安装Docker。
sudo dnf erase runc
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce
# 若是CentOS7系统,则使用yum命令,在添加docker源命令上不同
yum erase runc podman
yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
设置Docker开机启动并检查Docker信息和启动状态。
sudo systemctl enable --now docker.service
systemctl status docker.service
docker --version
docker info
查看到docker的根目录位于 /var/lib/docker,docker数据放于该文件夹下,容易导致根分区爆满。推荐修改docker数据的存放路径。
第一方法修改docker数据的存放路径。通过修改系统服务启动文件中启动命令的参数,需要重载启动配置文件。
perl -p -i -e 's#^(ExecStart=.*)#$1 --data-root /home/.docker#' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker.service
docker info
第二种方法修改docker数据的存放路径。 通过docker专门的配置文件修改参数,能更方便修改更多参数,并值得推荐。
cat <<EOF > /etc/docker/daemon.json
{
"storage-driver": "vfs",
"data-root": "/ceph/.docker"
}
EOF
# 以上修改了两个参数。由于数据存放路径在CEPH文件系统上,其驱动方式也要相应修改为vfs。默认为overlay2。
docker info
第一种方法:批量化使用smartctl命令检测CEPH系统中机械硬盘的信息,确定有坏道磁盘的SN编号,或留取正常磁盘的SN编号。
第二种方法:在CEPH网页管理界面的OSD栏目中搜索关键词down,检测对应OSD的编号、磁盘SN编号和磁盘在Linux系统中的识别名称,如下图所示。
以上示例中找到的损坏磁盘关键信息:
磁盘对应的OSD编号:osd.174 后续需要删除并重建该osd编号。 磁盘SN编号:ZL23XVRL 有利于拔下有问题的硬盘,以免拔错。 Linux下的磁盘识别名称:sdaf 加上新盘后,需要对该盘进行分区操作。
在计算服务器上卸载CEPH文件系统(可选)。我这边由于需要通过一台登录节点服务器作为中转,再登录CEPH服务器进行操作。因此,该登录节点服务器需要卸载 CEPH文件系统,以免CEPH文件系统掉线后,无法登录该服务器。
for i in 1 2 11 12 13 14 15 16 17 18 19 20
do
echo "ssh node$i sudo umount -l /ceph"
done > command.umount.list
ParaFly -c command.umount.list -CPU 12
通过指令暂停CEPH系统:
ceph osd set noout
ceph osd set norecover
ceph osd set norebalance
ceph osd set nobackfill
ceph osd set nodown
ceph osd set pause
再关闭所有CEPH服务器或仅关闭有坏道的CEPH存储服务器的Linux系统。本次是在ceph105机器上发现有坏盘,对该机器关机并更换硬盘后手动启动,其它存储服务器重启。
echo "ssh ceph110 sudo shutdown -r now
ssh ceph109 sudo shutdown -r now
ssh ceph108 sudo shutdown -r now
ssh ceph107 sudo shutdown -r now
ssh ceph106 sudo shutdown -r now
ssh ceph105 sudo shutdown -h now
ssh ceph104 sudo shutdown -r now
ssh ceph103 sudo shutdown -r now
ssh ceph102 sudo shutdown -r now" > command.shutdown.list
ParaFly -c command.shutdown.list -CPU 9
ssh ceph101 sudo shutdown -r now
重启CEPH集群后,进行时间同步、网络优化和CEPH参数优化。
for ((i=102;i<=110;i=i+1))
do
echo "ssh ceph$i ntpdate ceph101"
done > command.ntpdate.list
ParaFly -c command.ntpdate.list -CPU 9
for ((i=102;i<=110;i=i+1))
do
echo "ssh ceph$i systemctl restart chronyd.service"
done > command.chronyd.list
ParaFly -c command.chronyd.list -CPU 9
for ((i=102;i<=110;i=i+1))
do
echo "ssh ceph$i /root/bin/rc.local"
done > command.rc_local.list
ParaFly -c command.rc_local.list -CPU 9
/root/bin/rc.local
for ((i=102;i<=110;i=i+1))
do
echo "ssh ceph$i /root/bin/ethtool_lro.sh"
done > command.ethtool_lro.list
ParaFly -c command.ethtool_lro.list -CPU 9
/root/bin/ethtool_lro.sh
for ((i=102;i<=110;i=i+1))
do
echo "ssh ceph$i /root/bin/test.sh"
done > command.ethtool_test.list
ParaFly -c command.ethtool_test.list -CPU 9
/root/bin/test.sh
for ((i=101;i<=110;i=i+1))
do
echo "ssh ceph$i /root/bin/modifing_OSD_parameters.pl 22 8 true 10 86400 604800 0.5 0.05 259200 100 10 10 100"
done > command.modifing_OSD_parameters.list
ParaFly -c command.modifing_OSD_parameters.list -CPU 10
ceph config set mds mds_log_max_segments 1024
ceph config set mds mds_cache_trim_threshold 25600000
ceph config set mds mds_cache_trim_decay_rate 0.01
ceph config dump
取消CEPH系统的暂停操作:
ceph osd set noout
ceph osd set norecover
ceph osd set norebalance
ceph osd set nobackfill
ceph osd set nodown
ceph osd set pause
给CEPH存储服务器添加虚拟内存(可选)。我管理的CEPH存储服务器每个节点内存为256 GiB,在MDS服务器上可能不够,给每台服务器再添加256G SWAP空间。
for ((i=101;i<=110;i=i+1))
do
echo "ssh ceph$i swapon /swapadd"
done > command.swapon.list
ParaFly -c command.swapon.list -CPU 10
在更换了坏盘的ceph105主机上进行新盘的分区操作。
根据最开始安装CEPH系统时留下的磁盘分区的操作记录信息,对新加入的磁盘进行相同的分区操作。首先,使用新加入的磁盘,添加到一个新的虚拟盘中。
vgcreate ceph-block-31 /dev/sdaf
然后,对虚拟盘进行分区。
lvcreate -l 100%FREE -n block-31 ceph-block-31
以上命令需要确定新加入磁盘对应的Linux识别编号和虚拟盘编号,是操作的成败关键。
由于新加入的盘替换了坏盘的位置,重启服务器后,其Linux识别编号不变。若采用不关停CEPH系统直接更换硬盘的话,则热插拔更换硬盘后,其Linux识别编号在所有磁盘识别编号往后计数,和坏盘之前的编号不一致。
由于最初安装CEPH系统时,直接使用了ceph-block-num的虚拟盘分区名称。若此时未保留最初的磁盘分区命令,可以使用lvdisplay查看系统中的虚拟盘分区(也称为逻辑卷)信息,查看缺失的逻辑卷名称。
lvdisplay | grep " LV Name" | grep block | sort
lvdisplay | grep " VG Name" | grep block | sort
删除OSD编号:
ceph auth del osd.174
ceph osd crush remove osd.174
ceph osd rm 174
根据最开始安装CEPH系统时留下的OSD创建记录,将新的虚拟盘分区创建成OSD。由于使用了bluestore的方法,一个OSD包含一个完整物理磁盘做的逻辑卷和一块固态硬盘部分扇区做的逻辑卷。后者的逻辑卷名称不能搞错,因此该步骤一定要有最初安装CEPH系统时留下的OSD创建记录。
ceph-volume lvm create --bluestore --data ceph-block-31/block-31 --block.db ceph-db-4/db-31
以上步骤会自动分配一个新的OSD编号。CEPH系统应该是自动按照数字编号往后进行OSD编号分配。由于刚删除了一个编号,新的自动分配的编号就刚好是删除的OSD编号。
新的OSD上线后,数据会自动进行重新分配(rebalancing),结束后CEPH恢复健康状态。
[root@ceph101 ~]# ceph -s cluster: id: 8f1c1f24-59b1-11eb-aeb6-f4b78d05bf17 health: HEALTH_WARN Slow OSD heartbeats on back (longest 23249.475ms) Slow OSD heartbeats on front (longest 23245.394ms) services: mon: 5 daemons, quorum ceph101,ceph103,ceph107,ceph109,ceph105 (age 21m) mgr: ceph107.gtrmmh(active, since 22m), standbys: ceph101.qpghiy mds: cephfs:3 {0=cephfs.ceph108.iuobhj=up:active,1=cephfs.ceph102.imxzno=up:active,2=cephfs.ceph104.zhkcjt=up:active} 1 up:standby osd: 360 osds: 360 up (since 17m), 360 in (since 17m); 47 remapped pgs data: pools: 4 pools, 10273 pgs objects: 386.82M objects, 657 TiB usage: 1.2 PiB used, 4.0 PiB / 5.2 PiB avail pgs: 8742316/3849861458 objects misplaced (0.227%) 10220 active+clean 47 active+remapped+backfilling 6 active+clean+scrubbing+deep io: client: 3.4 MiB/s rd, 392 MiB/s wr, 6 op/s rd, 221 op/s wr recovery: 181 MiB/s, 103 objects/s progress: Rebalancing after osd.174 marked in (17m) [=======.....................] (remaining: 44m)