dd 命令刻录系统启动盘
若系统已自动挂载 U 盘,可以命令 [root@A ~]$ fdisk -l
查看 U 盘挂载设备号,如 /dev/sdb,但由于 Linux 中每个设备文件可能对应多个设备号,如主/次设备号,实际自动挂载的可能只是其中的一个设备号,如 /dev/sdb1,再以命令 [root@A ~]$ umount /dev/sdb1
卸载 U 盘;若系统未自动挂载 U 盘,同样可由 fdisk 命令查看 U 盘对应的设备号,如 /dev/sdb;
以命令 [root@A ~]$ mkfs.vfat /dev/sdb -I
格式化 U 盘;
最后以命令 [root@A ~]$ dd if=~/CentOS-7-x86_64-Minimal-xxxx.iso of=/dev/sdb
即可将 ~/CentOS-7-x86_64-Minimal-xxxx.iso 系统文件内容刻录入设备 /dev/sdb 对应的 U 盘。
系统安装注意事项
安装程序引导错误
在安装 CentOS 7.x 系统时,可能出现报错 “No controller found”,无法继续安装进程,此为安装程序引导错误。此时,可按下 Ctrl + Alt + Delete
组合键重启机器。待重新进入 “Install CentOS 7” 等安装选项选择界面时,按方向键选择该选项后按下 e
键,进入选项编辑页面,将该页面中的 “LABEL=CentOS\x207\x20x86_64” 修改为 “LABEL=CentOS\x207\x20x8” 后按下 Ctrl + x
组合键,而后安装程序仍会报告上述错误,但可继续进入后序安装进程,自此即可正常安装系统了。
系统目录空间配置
考虑到在使用过程中,计算节点的 /home 目录需由主节点的 /home 目录远程挂载而来,其原始 /home 目录无法被用户使用,可在安装系统时,将 /home 目录的空间设置小些,而将系统根目录设置得适当大些。
针对当前需求,推荐的手动分区目录配置为:
- /home: 50 GiB
- /boot: 1 GiB
- /boot/efi: 200 MiB
- swap: 48 GiB
剩余空间均分配给根目录 /
即可。
SSH 免密登录
以下实现主机 A 到主机 B 的免密登录:
- 在主机 A 下生成公钥/私钥对:执行
[user@A ~]$ ssh-keygen -t rsa
后,连按三次回车键即可。 - 把主机 A 下生成的公钥复制远程传输到主机 B 上,并添加到其 $HOME/.ssh/authorized_keys 文件中:执行
[user@A ~]$ ssh-copy-id -i .ssh/id_rsa.pub user@B
即可。
注:设置主机 B 上的 $HOME/.ssh/authorized_keys 文件权限为 600 。
设置系统免密登录
以命令 [root@A ~]$ systemctl stop firewalld.service
关闭防火墙;以命令 [root@A ~]$ systemctl disable firewalld.service
禁用防火墙。
以命令 [root@A ~]$ setenforce 0
关闭 SELinux;修改 /etc/selinux/config 文件:SELINUX=disabled
, 以禁用 SELinux 。
CentOS minimal 首次安装后连接网络
CentOS minimal 首次初始安装后是无法自动成功联网的,需手动配置网卡。即进入目录 /etc/sysconfig/network-scripts
,对于多网口的机器,在该目录下会存在多个以 ifcfg-
开头的配置文件,在修改除 ifcfg-lo
以外的其他配置文件中的 ONBOOT
选项为 yes
后重启机器即可。
安装额外的 yum 源
EPEL 源
EPEL,即 Extra Packages for Enterprise Linux,是为企业级 Linux 提供的一组高质量的额外软件包。
命令 [root@A ~]$ yum install epel-release
安装 rpm 包,命令 [root@A ~]$ yum clean all && yum makecache
更新软件源。
有时由于软件源设置问题,使用上述命令安装时可能提示找不到安装包,可换用命令 [root@A ~]$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
安装。
ELRepo 源
ELRepo 包含了一些硬件相关的驱动程序,比如显卡、声卡驱动。可以如下命令进行安装:
1 | [root@A ~]$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
注意将第二条命令中的版本号 7.0-2
修改为自己机器相应的数字。
Nux Dextop 源
Nux Dextop 是类似 CentOS、RHEL、ScientificLinux 等的第三方 RPM 仓库。Nux Dextop 库依赖于 EPEL 库,所以要先安装 EPEL 库。可通过如下命令进行安装:
1 | [root@A ~]$ rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro |
由于 Nux Dextop 仓库可能会与其他第三方库有冲突,所以建议默认情况下禁用该仓库,即将文件 /etc/yum.repos.d/nux-dextop.repo 中的 enable=1
全部修改为 enabled=0
便可。
如需调用 Nux Dextop 仓库,可显式启用该仓库,如可以命令 [root@A ~]$ yum --enablerepo=nux-dextop install fuse-exfat
调用该仓库安装 fuse-exfat。
系统软件安装
必要安装
- gcc-gfortran:
[root@A ~]$ yum install gcc-gfortran
- gcc-c++:
[root@A ~]$ yum install gcc-c++.x86_64
- autojump: 命令
[root@A ~]$ yum install autojump
安装,命令[root@A ~]$ yum install autojump-zsh.noarch
添加对 zsh 的支持。 - HDF5 库:
[root@A ~]$ yum install hdf5-devel
- htop:
[root@A ~]$ yum install htop
- vim:
[root@A ~]$ yum install vim
- tmux:
[root@A ~]$ yum install tmux
- iostat:
[root@A ~]$ yum install sysstat.x86_64
- locate:
[root@A ~]$ yum install mlocate
- zsh:
[root@A ~]$ yum install zsh
- fc-list:
[root@A ~]$ yum install fontconfig
可选安装
- Xpm 库:
[root@A ~]$ yum install libXpm-devel.x86_64
- ifconfig:
[root@A ~]$ yum install net-tools.x86_64
- GNU Parallel:
[root@A ~]$ yum install parallel.noarch
- eog:
[root@A ~]$ yum install eog.x86_64
- Xt 库:
[root@A ~]$ yum install libXt-devel.x86_64
- xauth:
[root@A ~]$ yum install xauth
(当ssh -X
远程登录报错X11 forwarding request failed on channel 0
时) - xwindow 图形界面:
[root@A ~]$ yum -y groupinstall "X Window System"
- GNU m4 宏处理器:
[root@A ~]$ yum install m4.x86_64
- ghostscript:
[root@A ~]$ yum install ghostscript.x86_64
- mail:
[root@A ~]$ yum install mailx
- GFortran 静态库:
[root@A ~]$ yum install libgfortran-static
- ntfs 磁盘格式支持:
[root@A ~]$ yum install ntfs-3g
- exfat 磁盘格式支持:
[root@A ~]$ yum install fuse-exfat
(需先安装 Nux Dextop 软件源)
GPU 节点安装
- nl 库:
[root@A ~]$ yum install libnl-devel.x86_64
修改主机名
hostnamectl set-hostname seislab
命令修改主机名为 seislab 。
修改系统时区
先用 timedatectl set-timezone Asia/Shanghai
命令更新时区为亚洲上海时区,再用 timedatectl set-local-rtc 1
命令将硬件时钟与系统时钟调整一致。
添加用户到 sudoer 列表
以下实现将 user 用户添加到 sudoer 列表:
- 进入 root 账户,在命令行键入:
[root@A ~]$ visudo
,打开 sudoer 的配置文件。 - 向下查找到
root ALL=(ALL) ALL
内容行,在下一行参照新建行内容user ALL=(ALL) ALL
,保存后退出,该内容允许user
用户组中的用户在所有(第一个ALL
)可登录的主机上以任意(第二个ALL
)用户身份执行任意(第三个ALL
)命令。
也可以参照该配置文件中的样例,用 Cmnd_Alias
定义一些命令组别名(命令需使用绝对路径,别名需全部大写),用已定义的命令组替换掉最后一个 ALL
,即仅允许用户执行限定的若干个命令。如 test ALL=LOCATE, STORAGE
意指只允许 test 用户组成员执行 LOCATE 和 STORAGE 命令组中的命令。
挂载本地磁盘
查看本地已挂载磁盘文件系统格式
以命令 [root@A ~]$ lsblk
查看磁盘分区关系。
以命令 [root@A ~]$ blkid
查看本地已挂载磁盘文件系统格式,如 ntfs 或 ext4 等。
格式化本地磁盘
命令 [root@A ~]$ mkfs -t ext4 /dev/sdb
以 ext4 文件格式格式化本地磁盘 /dev/sdb。
挂载本地磁盘
命令 [root@A ~]$ mount /dev/sdb /shdisk/lab
将本地磁盘 /dev/sdb 挂载至 /shdisk/sdb 目录下。
开机自动挂载
- 假以命令
[root@A ~]$ blkid
查看到本地磁盘 /dev/sdb 的 UUID(即 Universally Unique IDentifier,通用唯一识别符)值为 b0c3c256-60de-47d7-b10a-674b86bdc913,及其 Type(即文件系统类型)值为 ext4; - 以 root 身份打开并在文件 /etc/fstab 中添加行内容「 UUID=b0c3c256-60de-47d7-b10a-674b86bdc913 /shdisk/sdb ext4 defaults 0 0 」即可实现,在系统开机后,自动将本地磁盘 /dev/sdb 挂载至 /shdisk/sdb 目录下。
- 而后可以命令
[root@A ~]$ mount -a
检查各项参数是否有误。
这里,/etc/fstab
文件中的第五列为转储参数(0 表示不备份,1 表示需要备份,一般根分区需要备份);第六列为自检顺序(0 表示不自检,非 0 即表示需要自检,1 表示根分区自检,2 表示其他分区自检)。
挂载 ntfs 硬盘并指定访问权限
CentOS 系统默认不支持 ntfs 文件系统,需先行以命令 [root@A ~]$ yum install ntfs-3g
安装额外驱动 ntfs-3g。若提示找不到安装包,则需先按前述小节命令安装 EPEL 软件源。
若需指定挂载目录为 GID 为 1005 的用户组和 UID 为 1010 的用户所有,且访问权限为 750,则可以如下命令将硬盘 /dev/sdb 挂载在目录 /data 下:
1 | [root@A ~]$ mount -t ntfs -o rw,auto,umask=027,uid=1010,gid=1005 /dev/sdb /data |
其中,访问权限设置选项 umask 采用八进制记法,对应关系如下:
Octal | Binary | Permission |
---|---|---|
0 | 000 | rwx |
1 | 001 | rw- |
2 | 010 | r-x |
3 | 011 | r– |
4 | 100 | -wx |
5 | 101 | -w- |
6 | 110 | –x |
7 | 111 | — |
如设置访问权限为 750,即 -rwxr-x—,则应取 umask=027。
挂载远程目录
以主机 B(ip 为 192.18.1.2)挂载远程主机 A(ip 为 192.18.1.1)的共享目录 /data/share 为例:
服务端
[root@A ~]$ yum install nfs-utils rpcbind
安装 nfs-utils 和 rpcbind 服务;[root@A ~]$ chkconfig nfs on
设置 nfs 服务开机自启,[root@A ~]$ chkconfig rpcbind on
设置 rpcbind 服务开机自启;[root@A ~]$ service rpcbind start
启动 rpcbind 服务,[root@A ~]$ service nfs start
启动 nfs 服务,注意这两条命令的执行顺序;- 在文件 /etc/exports 中添加内容
/data/share 192.18.1.2(rw,no_root_squash,no_subtree_check)
; [root@A ~]$ exportfs -a
使配置文件生效;[root@A ~]$ showmount -e
查看是否共享成功。
客户端
[root@B ~]$ yum install nfs-utils rpcbind
安装 nfs-utils 和 rpcbind 服务;[root@A ~]$ chkconfig nfs on
设置 nfs 服务开机自启,[root@A ~]$ chkconfig rpcbind on
设置 rpcbind 服务开机自启;[root@A ~]$ service rpcbind start
启动 rpcbind 服务,[root@A ~]$ service nfs start
启动 nfs 服务,注意这两条命令的执行顺序;[root@B ~]$ showmount -e 192.18.1.1
查看是否检测到服务端的共享[root@B ~]$ mkdir /data/share
创建映射目录;- 在文件 /etc/fstab 中添加内容
192.18.1.1:/data/share /data/share nfs rw,defaults 0 0
; - 当前启动下,执行手动挂载
[root@B ~]$ mount -t nfs 192.18.1.1:/data/share /data/share
。
常见问题
- 若出现由于服务端偶然宕机而导致客户端执行 df 或 ls 等与远程挂载目录相关的操作时终端卡死的情况,可以在服务端依次执行如下命令手动重启 rpcbind 和 nfs 服务解决:
1 | [root@A ~]$ service rpcbind stop |
有时候使用命令 [root@A ~]$ service rpcbind restart && service nfs restart
重启服务也可解决该问题。
- 若在上一问题中,服务端暂时无法登陆,则在客户端以命令
[root@A ~]$ umount -fl /data/share
强制卸载该远程目录即可( -f 即强制卸载;-l 为延迟卸载。仅 -f 可能提示目录繁忙,-l 即等待目录不繁忙时再卸载)。 - 若在服务端启动 nfs 服务时出现问题,有可能是该服务节点的本地磁盘未挂载,可手动挂载后再重新启动 nfs 服务。
- 若远程挂载过程中出现
mount.nfs: access denied by server while mounting (null)
告警,可能是先前自动挂载失败导致的,需先umount
掉该挂载目录后再重新尝试远程挂载。 - 若在挂载远程目录时,出现
mount.nfs: requested NFS version or transport protocol is not supported
告警时,可能是由于远程服务器的 nfs 服务未正常启动,可登陆至目标服务器上进行 nfs 服务重启。若重启失败并报错 “A dependency job for nfs-server.service failed. See ‘journalctl -xe’ for details.”,则可以命令[root@A ~]$ journalctl -xe
查看出错原因。若发现本地磁盘自动挂载失败,则重新手动挂载该磁盘后再重启 nfs 服务即可。 - 若在客户端使用 showmount 检测共享失败并提示
RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
,可能是服务端未关闭防火墙,在关闭防火墙(如设置系统免密登录节所示)后重试。
设置磁盘配额
默认情况下,采用 vfsv0 格式设置磁盘配额,允许设置的最大磁盘空间配额需小于 4T。
挂载磁盘
通过 blkid 可以查询到要设置配额的磁盘设备的 UUID,假定其值为 2c0e8c3b-ffba-484e-90bf-f34e55c888f6,假定挂载点为 /data,假定磁盘格式为 ext4,以 root 身份打开并在文件 /etc/fstab 中添加行内容「 UUID=2c0e8c3b-ffba-484e-90bf-f34e55c888f6 /data ext4 usrquota,grpquota,defaults 0 0 」即可实现开机启用磁盘配额设置。
假定该磁盘的设备号为 /dev/sda,可以命令 [root@A ~]$ mount -o remount,usrquota,grpquota /dev/sda /data
重新挂载该磁盘。采用命令 [root@A ~]$ mount | grep sda
可检查 quota 挂载选项是否生效。
若只需设置用户磁盘配额,在以上设置中去掉 grpquota
关键字即可。
启用磁盘配额
先以命令 [root@A ~]$ quotacheck -cvug /dev/sda
检测文件系统并生成磁盘配额设置文件。若只需设置用户磁盘配额,去掉「g」选项即可。
再以命令 [root@A ~]$ quotaon -p /dev/sda
启用磁盘配额功能。
设置磁盘配额
以命令 [root@A ~]$ edquota -u test
可打开配置文件为 test 用户设置用户磁盘配额。
以命令 [root@A ~]$ edquota -g test
可打开配置文件为 test 用户组设置用户组磁盘配额。
以命令 [root@A ~]$ edquota -p test -u user1 user2 ...
可将用户 test 的磁盘配额设置应用到其他用户。
以命令 [root@A ~]$ repquota -as
可查看所有已使用磁盘的用户的磁盘使用情况,其中第二列的两个字符若为 +,则分别表示已超出空间限制和文件限制。
其他问题
- 若要测试磁盘空间配额设置效果,可使用 dd 命令,如
[user@A quotaDir]$ dd if=/dev/zero of=test.a bs=2M count=3
即在测试目录 quotaDir 下生成一个 2M × 3 = 6M 大小的文件 test.a。 - 若要设置 4T 及以上的磁盘空间配额,需采用 vfsv1 格式。在挂载磁盘时需在挂载选项中加入
jqfmt=vfsv1
,并需在启用磁盘配额使用 quotacheck 和 quotaon 命令时加入-F vfsv1
选项,还需在设置磁盘配额使用 edquota 命令时加入-F vfsv1
选项。如此设置,即可为用户配额磁盘空间 4T 以上。 - 此设置方法仅对于 ext4 等格式磁盘有效,对于 xfs 格式磁盘可使用
xfs_quota
命令设置配额。
设置内网静态 IP
为了提高集群系统安全性,可以设置机群间通过内网连接,通过为各个节点主机的互连网口设置静态 IP 实现。与此同时,还需要所有节点连接在同一台以太网交换机上,才能保证机群间可以互连互通。这里假设某主机与交换机连接的以太网端口设备号为 em4,则可通过创建或修改 /etc/sysconfig/network-scripts/ifcfg-em4
文件内容如下而为之设置静态 IP:
1 | TYPE=Ethernet |
其中,IPADDR
即为该主机指定的静态 IP 地址,UUID
为 em4 端口的通用唯一标识码,其值可通过命令 [user@A ~]$ nmcli con show
查询。在端口标识码未知时,也可通过 HWADDR
字段指定主机端口的 Mac 地址来绑定端口。通过命令 [user@A ~]$ ip address
可查看主机的网络连接情况,在名称为 em4 的连接中,link/ether
字段后面的以冒号连接的内容即主机端口的 Mac 地址。
需要注意的是,静态 IP 地址的各节数值均不得大于 255,且无前置 0;若意欲实现多个主机间的互连,还需在不同主机上将 IPADDR
的前三个字段设置为相同值,且第四个字段不能为 0;若意欲在作业调度系统中使用内网静态 IP,可能需要将静态 IP 设置到第一个网络端口上。
安装 Pbs Pro 作业调度系统
准备
机器
假设如下两台机器(CentOS 7 系统):
主机名 | 主机 IP |
---|---|
pbsmaster | 192.18.1.1 |
pbsslave | 192.18.1.2 |
修改两台机器的 /etc/hosts 文件,确保两台机器可以 ssh 互相访问。
安装包
此处下载安装包 pbspro-14.1.0.tar.gz 。
制作 RPM 包
先提前安装依赖包:
1 | yum -y install rpm-build |
执行以下命令,在 /root/rpmbuild/RPMS/x86_64 目录下生成 pbspro-[ client | debuginfo | execution | server ]-14.1.0-0.x86_64.rpm 包:
1 | mkdir -p /root/rpmbuild/SOURCES/ |
安装
安装 Master
登录至 Master 节点,命令 [root@pbsmaster /root/rpmbuild/RPMS/x86_64]$ yum install -y pbspro-server-14.1.0-0.x86_64.rpm
(或者 [root@pbsmaster /root/rpmbuild/RPMS/x86_64]$ rpm -ivh pbspro-server-14.1.0-0.x86_64.rpm
)安装作业调度系统,修改 /etc/pbs.conf 文件:
1 | PBS_SERVER=pbsmaster |
安装 Slave
登录至 Slave 节点,命令 [root@pbsslave /root/rpmbuild/RPMS/x86_64]$ yum install -y pbspro-execution-14.1.0-0.x86_64.rpm
(或者 [root@pbsslave /root/rpmbuild/RPMS/x86_64]$ rpm -ivh pbspro-execution-14.1.0-0.x86_64.rpm
)安装作业调度系统,修改 /etc/pbs.conf 文件:
1 | PBS_SERVER=pbsmaster |
修改 /var/spool/pbs/mom_priv/config 文件:
1 | clienthost pbsmaster |
启动 pbs
以命令 $ /etc/init.d/pbs start
分别在 pbsmaster 和 pbsslave 节点上启动 pbs,以命令 [root@pbsmaster ~]$ qmgr -c 'create node pbsslave'
在 pbsmaster 主节点上将 pbsslave 节点加入集群。
PBS Pro 队列管理
PBS 队列主要分为两种:路由队列(route)和执行队列(execution)。前者只用于向其他队列移动作业(move jobs);后者用于运行作业。
以下示例中,以 pbsmaster 为 PBS 主节点。
创建队列
以如下命令创建一个执行队列 exec_queue:
1 | [root@pbsmaster ~]$ qmgr -c 'create queue exec_queue' |
如果要创建一个路由队列,设置 queue_type = route 即可。另外,设置 enable = True 表示允许该队列接收作业,设置 started = True 表示允许该队列里的作业执行。
可以命令 [root@pbsmaster ~]$ qmgr -c 'delete queue exec_queue'
删除已创建的队列 exec_queue。
创建节点
以命令 [root@pbsmaster ~]$ qmgr -c 'create node vnode1'
创建一个节点 vnode1。
以命令 [root@pbsmaster ~]$ qmgr -c 'delete node vnode1'
删除已创建的节点 vnode1。
以命令 [root@pbsmaster ~]$ qmgr -c 'set node vnode1 queue = exec_queue'
将已创建的节点 vnode1 添加到已创建的队列 exec_queue 中。
记录配置
以如下命令将当前 PBS 配置导出到 /tmp/ 目录下:
1 | [root@pbsmaster ~]$ qmgr -c 'print server' > /tmp/server.out |
可以如下命令从 /tmp/ 目录下读取并重新配置 PBS 队列:
1 | [root@pbsmaster ~]$ qmgr < /tmp/server.out |
其他设置
以命令 [root@pbsmaster ~]$ qmgr -c 'set node vnode1 state = offline'
将节点 vnode1 下线,系统不再向该节点分派作业。重新设置该节点 state 为 free
即可恢复正常使用。
安装并配置 InfiniBand
事前准备
首先,在官网下载系统对应版本的驱动安装包( tgz 压缩包即可)。注意操作系统子版本号和机器架构的选择。在下载页面底部,勾选接受 EULA 协议之后方可开始下载。
再以命令 [root@A ~]$ lspci | grep Mellanox
验证主机是否已安装 Mellanox 网络适配器 HCA/NIC,若屏幕输出
1 | 02:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5] |
类似内容即表示该网络适配器已正确安装。若此处验证失败,则后序启动子网管理器 opensmd 也将失败,且通过命令 ip address
亦不能看到名称为 ib0 的 InfiniBand 网络连接。InfiniBand 网卡未正确安装可能导致此处验证失败。
驱动安装
解压 tgz 安装包后,在解压目录下,以命令 [root@A ~]$ ./mlnxofedinstall
开始安装驱动。
在安装过程中,程序首先会检查操作系统版本的一致性,若这里检查失败,可参考「常见问题」给出的解决方案。其次,程序还会检查软件依赖(包括 perl、gtk2、atk、cairo、gcc-gfortran、libxml2-python、tcsh、lsof、tcl 和 tk),并会自动给出所缺依赖的安装命令,根据提示安装依赖后再重新安装驱动即可。
待驱动安装完成后,以如下命令启动 openibd 并设为开机自启:
1 | [root@A ~]$ service openibd start |
再以如下命令启动子网管理器 opensmd 并设为开机自启:
1 | [root@A ~]$ service opensmd start |
最后,以命令 [root@A ~]$ ibstat
检查 HCA 端口状态,若 State 栏为 Active 则表示驱动安装正常。主机与 InfiniBand 交换机连接不正常可能导致 State 栏为 Down。
网络 IPoIB 配置
在 ibstat 驱动安装检查正常后方可进行网络配置。
首先以如下内容创建文件 /etc/sysconfig/network-scripts/ifcfg-ib0
:
1 | CONNECTED_MODE=no |
这里,为主机手动配置静态 InfiniBand IP。其中,IPADDR
项可自由指定,HWADDR
应设为主机的 InfiniBand Mac 地址。若意欲实现多个主机间的互连,需在不同主机上将 IPADDR
的前三个字段设置为相同值,且第四个字段不能为 0。以命令 [user@A ~]$ ip address
可查看主机的网络连接情况,在名称为 ib0 的连接中,link/infiniband
字段后面的以冒号连接的内容即主机的 InfiniBand Mac 地址。为不同主机配置网络时,只需修改这两项的内容即可。
配置完成后再以如下命令重启网络接口 ib0:
1 | [root@A ~]$ ifdown ib0 |
至此,已完成所有安装配置工作,即可在 InfiniBand 内网中通过 InfiniBand IP 访问不同主机。
常见问题
- 在驱动安装过程中若操作系统一致性检查失败,并报错系统 kernel 版本不匹配,可在安装包解压目录以命令
[root@A ~/software/MLNX_OFED_LINUX-x.x-x.x.x.x-rhel7.3-x86_64]$ ./mlnx_add_kernel_support.sh -m ./ --make-tgz
重新生成主机系统 kernel 对应的安装包。新安装包自动生成在目录 /tmp/ 下。 - 若在启动 openibd 服务时,出现如下告警:
1 | Please close all isert sessions and unload 'ib_isert' module. |
以如上所示命令 [root@A ~]$ modprobe -rv ib_isert rpcrdma ib_srpt
卸载 ib_isert、rpcrdma 和 ib_srpt 模块后再重新启动即可。
- 若启动 opensmd 服务失败,并使用命令
[root@A ~]$ ibstat
查看 InfiniBand 网络驱动状态时显示Link layer: Ethernet
,说明 Mellanox 网卡端口模式不对,先使用命令[root@A ~]$ mst status
查看该网卡对应的设备号,如/dev/mst/mt4119_pciconf0
,再以命令[root@A ~]$ mlxconfig -d /dev/mst/mt4119_pciconf0 set LINK_TYPE_P1=1 LINK_TYPE_P2=2
将连接模式修改为 1 (即 InfiniBand 模式,2 为 Ethernet 模式),并重启机器生效。 - 以命令
[root@A ~]$ /usr/sbin/ofed_uninstall.sh
即可卸载已完成安装的驱动。
安装 NVIDIA 显卡驱动及 cuda 库
前期准备
在 NVIDIA 官网分别下载 NVIDIA 显卡驱动和 cuda 库 安装程序 run 文件。对于 CentOS 7 系统,显卡驱动下载 Linux 64-bit
对应版本即可,若下载 Linux 64-bit RHEL 7
对应版本可能会安装失败。
可先行以命令 [root@A ~]$ yum install --enablerepo=epel dkms
安装 DKMS (Dynamic Kernel Module Support) 模块,它可在 kernel 更新后自动为我们重装驱动。
执行安装
- 在
/usr/lib/modprobe.d/dist-blacklist.conf
中以 # 注释掉原有内容行blacklist nvidiafb
,添加新建内容行blacklist nouveau
,以禁用 Linux 自带显卡驱动 nouveau 。 - 以命令
[root@A ~]$ mv /boot/initramfs-$(uname -r).img /root/initramfs-$(uname -r).img.bak
备份原 initramfs 文件,再以命令[root@A ~]$ dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
更新 initramfs 文件。 - 关机重启后,以命令
[root@A ~]$ lsmod | grep nouveau
查看是否成功将 nouveau 禁用。若未成功禁用,检查 disk-blacklist.conf 中的设置,从头开始依次重试。 - 以命令
[root@A ~]$ yum install kernel-devel
安装与系统版本对应的 kernel source。若不能找到对应的安装版本,可在添加第三方软件源,执行[root@A ~]$ yum update
进行更新后,从头开始重试;再或从网络上下载对应版本的 kernel-devel 的 RPM 包,如可从此处下载kernel-devel-3.10.0-514.el7.x86_64.rpm
,并以命令[root@A ~]$ rpm -Uvh kernel-devel-3.10.0-514.el7.x86_64.rpm
安装。 - 在给下载的显卡驱动安装文件添加可执行权限后,即可以管理员权限运行安装。若报错 kernel source tree,可以在添加
--kernel-source-path=/usr/src/kernels/$(uname -r)/
选项后运行。若报错 nvidia.ko,可以在添加-k $(uname -r)
选项后运行。 - 在给下载的 cuda 库安装文件添加可执行权限后,即可以管理员权限运行安装。
安装字体
查看系统字体
以命令 [user@A ~]$ fc-list
查看所有已安装的系统字体;以命令 [user@A ~]$ fc-list :lang=zh
查看系统中的中文字体,注意冒号前面的空格。
安装额外的字体
- 以管理员身份将字体文件拷贝到 /usr/share/fonts/ 目录下;
[root@A ~]$ cd /usr/share/fonts
;[root@A /usr/share/fonts]$ mkfontscale
(若找不到该命令,可以命令[root@A /usr/share/fonts] yum install mkfontscale
安装);[root@A /usr/share/fonts]$ mkfontdir
。
修改系统登录提示(欢迎)信息
Linux 系统 SSH 的欢迎信息可以通过修改 /etc/motd 的内容来进行自定义。
但是 /etc/motd 只支持纯文本的欢迎信息。想要实现彩色效果,可以通过修改 /etc/profile.d/motd.sh 来实现,如:
1 | !/bin/bash |
~/.bashrc、/etc/bashrc 和 /etc/profile
~/.bashrc 为用户终端环境设置,仅影响当前用户;/etc/bashrc 和 /etc/profile 为系统终端环境设置,影响所有用户。
系统登录时,/etc/profile 最先被加载,而后它调用了 /etc/bashrc 以及 ~/.bashrc。
/etc/profile 对所有 shell 生效,/etc/bashrc 和 ~/.bashrc 仅对 bash 生效。
创建、修改、删除及限制用户
本节涉及到的命令的调用格式均为:
1 | [root@A ~]$ command [option] username |
创建用户
创建新用户时使用 useradd 或 adduser 命令,其常用选项有:
- -c “comment”:指定一段注释性描述;
- -d directory:指定用户 HOME 目录,若该目录不存在,可同时使用 -m 选项以创建之;
- -g group:指定用户所属用户组;
- -G group:为用户添加附加组,group 设置为
""
即删除该用户所有附加组; - -s shell:指定用户的默认登录 SHELL;
- -e YYYY-MM-DD:指定用户账号失效的绝对时间;
- -u userid:指定用户的用户 ID,可同时使用 -o 选项以重复使用其他用户的 ID 号。
修改用户
修改用户账号时使用 usermod 或 groupmod 命令,常用选项与 useradd 命令一致。以下例中使用该命令修改旧用户名 test 为新用户名 love:
- 修改用户信息及 HOME 目录:
[root@A ~]$ usermod -l love -d /home/love -m test
- 修改用户组信息:
[root@A ~]$ groupmod -n love test
删除用户
以命令 [root@A ~]$ userdel -rf test
删除用户 test 。
限制用户
可以命令 passwd 限制用户账号的使用,其常用选项有:
- -l:锁定登录密码,即禁止账号使用;
- -u:解锁登录密码,即解禁账号使用;
- -d:删除登录密码,即无登录密码,在某些系统中可以直接登录;
- -f:强制下次登录时修改密码。
设置用户密码规则
设置密码有效期
与默认用户的密码有效期相关的设置参数保存在 /etc/login.defs
文件中,如需变更默认设置,打开该文件修改相关参数的值即可。这里的设置只对新创建的用户生效。文件中的其中相关参数有:
PASS_MAX_DAYS
:用户两次修改密码的最长间隔天数,超过期限后将强制用户修改密码;PASS_MIN_DAYS
:用户两次修改密码的最短间隔天数,设置为 0 则表示用户可以在任意时刻修改密码;PASS_WARN_AGE
:用户密码过期前给出警告的天数。
若要修改已有用户的密码有效期,对于以上三个参数可分别通过命令 [root@A ~]$ chage { -M | -m | -W } numberDays userName
进行修改。
另可通过命令 [root@A ~]$ chage -d 0 userName
强制用户下次登录后修改密码。
设置密码复杂度
备份设置
在修改密码复杂度规则之前,可先通过命令 [root@A ~]$ authconfig --savebackup=backupName
备份当前的默认规则,并以 backupName 命令此次备份,该命令将在 /var/lib/authconfig/backup-backupName 目录下备份相关配置文件。
通过命令 [root@A ~]$ authconfig --restorebackup=backupName
即可恢复之前名为 backupName 的备份。
规则设置
用户密码复杂度可通过命令 [root@A ~]$ authconfig [options] --update
来设置,其中 options 可选以下参数:
--passminlen=<number>
:用户密码的最短长度;--passminclass=<number>
:用户密码包含的字符类别(小写字母、大写字母、数字或特殊字符)的最小类别数目;--passmaxrepeat=<number>
:用户密码包含的连续相同字符的最大字符个数;--passmaxclassrepeat=<number>
:用户密码包含的连续同类字符的最大字符个数;--enablereqlower
:用户密码中必须包含至少一个小写字母;--enablerequpper
:用户密码中必须包含至少一个大写字母;--enablereqdigit
:用户密码中必须包含至少一个数字;--enablereqother
:用户密码中必须包含至少一个特殊字符。
如可通过命令 [root@A ~]$ authconfig --passminlen=8 --passmaxrepeat=3 --enablereqlower --enablereqother --update
设置用户密码必须是含有至少一个小写字母和至少一个特殊字符、且最多不超过 3 个连续相同字符的不少于 8 位的字符串。
认证设置
密码认证行为准则的设置有多种方法,最方便的当属 authconfig
工具的 faillock 选项,但低版本的 authconfig
可能不支持该选项。这时我们可以通过直接编辑 /etc/pam.d/ 目录下的服务模块设置文件来修改密码认证行为准则。对于本地 tty 终端登录,需要修改配置的是该目录下的 login 文件;对于远程 ssh 登录,则需要编辑该目录下的 sshd 文件。而实现用户连续登录密码认证失败账户锁定的效果,需要用到的 PAM 模块是 faillock.so
或 pam_tally2.so
模块。
authconfig
工具
通过命令 [root@A ~]$ authconfig --enablefaillock --faillockargs="deny=5 unlock_time=600" --update
可启用用户连续登录密码认证失败账户锁定功能,该命令指定用户在登录时密码连续输入错误 5 次即锁定该用户 600 s,超过锁定期限后用户方可使用正确密码登入。其中,failllockargs 还支持的参数有:
even_deny_root
:root 账户也可在连续登录密码认证失败时被锁定;root_unlock_time=1800
:设置 root 账户的锁定时间为 1800 s,锁定时间可与普通用户不同;fail_interval=900
:设置用户连续登录失败次数的计时长度为 900 s,即用户在该时间内连续登录失败达到限制次数则被锁定。
通过命令 [root@A ~]$ faillock --user userName
可查看用户登录失败记录。
在用户被锁定后,可通过命令 [root@A ~]$ faillock --user userName --reset
即时解锁用户登录。
faillock.so
模块
这里针对远程 ssh 登录,设置用户在登录时密码连续输入错误 5 次即锁定该用户 600 s。打开配置文件 /etc/pam.d/sshd 并自第二行起插入如下内容(中间用到的 pam_unix.so
模块虽与认证设置无关,但不可缺少):
1 | auth required pam_faillock.so preauth deny=5 unlock_time=600 |
该文件保存修改后即时生效。该模块同样支持 even_deny_root
、root_unlock_time=1800
和 fail_interval=900
等选项。
现在亦可通过 faillock
命令查看用户登录失败记录或即时解锁用户登录。
pam_tally2.so
模块
由上可见 faillock.so
模块的设置方式略显复杂,若采用 pam_tally2.so
模块设置,在配置文件 /etc/pam.d/sshd 的第二行插入如下内容即可:
1 | auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 |
该文件保存修改后即时生效。该模块可支持 even_deny_root
和 root_unlock_time=1800
等选项。
此时可通过命令 [root@A ~]$ pam_tally2 --user userName
查看用户登录失败记录,通过命令 [root@A ~]$ pam_tally2 --user userName --reset
即时解锁用户登录。
其他设置
可通过编辑 /etc/security/pwquality.conf
进行一些额外的密码复杂度设置,如:
dcredit = -2
:用户密码中必须包含至少 2 个数字,且不做数字字符加分;lcredit = 0
:用户密码中不必包含小写字母,即使含有小写字母也不做小写字母加分;ucredit = 2
:用户密码中含有不超过 2 个大写字母时,每个大写字母可加一分,也即最多大写字母加分不超过 2;ocredit = 4
:用户密码中含有不超过 4 个特殊字符时,每个特殊字符可加一分,也即最多特殊字符加分不超过 4;minlen = 12
:用户密码的复杂度不小于 12,即总字符个数加上各项字符加分不小于 12;difok = 5
:用户密码中至少有 5 个字符不存在于旧密码中;badwords = denywords1 denywords2 denywords3
:用户密码中不能包含的字符片断;gecoscheck = 1
:启用 GECOS 字段检查,即密码中不能包含用户 GECOS 信息字段(/etc/passwd 中用户信息的第 5 个字段)中的字符串。
该文件保存修改后即时生效。
对于以上设置,如:密码 pPNN13%
的复杂度为 7 (总字符个数)+ 0 (数字字符加分)+ 0 (小写字母加分)+ 2 (大写字母加分)+ 1 (特殊字符加分)= 10 < 12 不合规,密码 dkst@Feb.1st
的复杂度为 12 (总字符个数)+ 0 (数字字符加分)+ 0 (小写字母加分)+ 1 (大写字母加分)+ 2 (特殊字符加分)= 15 > 12 合规。
利用 fail2ban 防止暴力攻击
fail2ban 是一款防止暴力入侵的服务器防御软件。它基于系统安全日志文件,检测并禁止恶意来访的 IP 地址。
在安装 EPEL 软件源库之后,即可以命令 [root@A ~]$ yum install fail2ban
安装该软件。
fail2ban 的所有配置文件均保存在 /etc/fail2ban/
目录下,主配置文件为 jail.conf
。在使用命令 [root@A /etc/fail2ban]$ cp jail.conf jail.local
复制该文件后,再在 jail.local
做自定义的修改,常用的配置参数有:
ignoreip
: 忽略的 IP 地址列表,该列表中的 IP 地址不会被禁止;bantime
: 检测到的恶意 IP 地址被禁止访问的时间,超过该时间后会自动解禁,设为 -1 则表示永久封禁;findtime
: 检测时使用的时窗长度,即在该时间长度内检查 IP 地址的登录记录;maxretry
: 最大尝试登录次数,来访 IP 地址登录失败次数超过该数值时则被禁止。
一言言之,除 ignoreip
中的地址以外的其他来访 IP 地址,若在 findtime
内有超过 maxretry
次登录失败,则会被禁止在接下来的 bantime
内登入 。
fail2ban 可用于多种服务,如 sshd、apache 等。若要启用针对某一服务的访问 IP 地址检测,需在 jail.local
文件中该服务关键字段内加入 enabled = true
语句即可。如:
1 | SSH servers |
即可启用针对 sshd 服务的访问检测,再使用命令 [root@A ~]$ service fail2ban restart
重启 fail2ban 即可生效。
通过命令 [root@A ~]$ fail2ban-client status
即可查看软件服务状态。通过命令 [root@A ~]$ fail2ban-client status sshd
可查看详细的关于 sshd 服务的状态,其中会给出当前被禁止的 IP 地址列表。
通过命令 [root@A ~]$ fail2ban-client set sshd unbanip 192.18.1.101
可解除对 192.18.1.101 地址的禁止。
发送广播消息
mesg 命令
- 语法:
[root@A ~]$ mesg [ny]
- 功能:设置终端机的写入权限
- 参数:
n/y
允许/不允许系统用户将信息直接显示在屏幕上
write 命令
- 语法:
[user@A ~]$ write 用户名 [终端串口]
- 功能:向系统某一用户发送消息
wall 命令
- 语法:
[root@A ~]$ wall < 文件名
- 功能:向系统所有已登录用户发送文件内容
关机/重启
shutdown 命令
- 语法:
[root@A ~]$ shutdown [-t sec] [-hkr] time "WARNING INFO."
- 参数:
- h: 停止所有系统服务后立即关机;
- k: 只发送警告信息,实际不执行关机操作;
- r: 停止所有系统服务后重新启动。
- 实例:
shutdown -h now
: 立即关机;shutdown -h 20:30
: 在下一个 20:30 时刻关机;shutdown +5 "System will shutdown after 5 minutes
: 向所有登入用户发送警告,在 5 分钟后关机。
另外,可以命令 [root@A ~]$ shutdown -a
取消已经提交的定时关机命令。
reboot 命令
- 语法:
[root@A ~]$ reboot [-w]
- 参数:
w
仅做测试,执行一个重开机模拟,并不真正将系统重启。
pip 指定安装目录
临时方法
安装模块 modulename 到目录 /path/to/directory 可以使用命令:[user@A ~]$ pip install --target=/path/to/directory modulename
此方法会直接在目标目录创建 module 文件夹,因此调用前只需将该目录加入 PYTHONPATH
系统环境变量即可。
永久方法
若经常需要安装一些额外的 python 函数包到目录 /path/to/directory,则可以修改用户 HOME 目录下 .pip/pip.conf(若不存在则创建),加入以下内容:
1 | [install] |
此方法会根据安装 module 版本的不同,在目标目录下进一步创建其他子文件夹,最终在子文件夹下创建 module 文件夹,因此调用前需将子文件夹目录加入到 PYTHONPATH
系统环境变量中。
强制踢出已登录用户
以下实现踢出已登录用户 user:
- 先使用
w
命令查看用户 user 登录的 TTY 端口号,此处假设端口号为 pts/4; - 再使用命令
[root@A ~]$ pkill -kill -t pts/4
踢出。 - 最后使用命令
[root@A ~]$ pkill -u user
杀死该用户的所有进程。
查看系统信息
- 查看系统版本号:
[user@A ~]$ cat /etc/centos-release
- 查看系统内核版本号:
[user@A ~]$ uname -r
- 查看操作系统位数:
[user@A ~]$ getconf LONG_BIT
- 查看系统日志:
[root@A ~]$ vim /var/log/messages
- 查看系统字体:
[user@A ~]$ fc-list
- 查看系统中文字体:
[user@A ~]$ fc-list :lang=zh
- 查看系统网卡的 UUID:
[user@A ~]$ nmcli con show
- 查看系统网络 Mac 地址:
[user@A ~]$ nmcli device show
- 查看系统登录日志:
- 查看系统中所有用户的历史登录信息统计:
[root@A ~]$ lastlog
- 查看近期系统用户成功登入的登录信息:
[root@A ~]$ last
- 查看近期尝试登入失败的登录信息:
[root@A ~]$ lastb
- 查看系统中所有用户的历史登录信息统计:
查看 CPU 温度
以命令 [root@A ~]$ yum install lm_sensors.x86_64
安装 lm_sensors 工具。
再以 [root@A ~]$ sh -c "yes|sensors-detect"
检测传感器后,即可以命令 [user@A ~]$ sensors
查看 CPU 温度了。
查看机器硬件信息
主机型号
以命令 [root@A ~]$ dmidecode | grep -A8 "System Information$"
查看主机型号信息,其中 Manufacturer
字段即为制造商(品牌方),Product Name
为具体型号。
CPU
以命令 [user@A ~]$ lscpu
查看 CPU 信息,其中 Model name
字段为 CPU 型号,NUMA node(s)
字段为 CPU 个数,Core(s) per socket
字段为每个 CPU 的物理核数,CPU(s)
字段为总逻辑核数。
内存
以命令 [root@A ~]$ dmidecode | grep -A16 "Memory Device$"
查看内存信息,输出信息的每一段对应于一个内存插槽,其中 Manufacturer
为制造商,Type
为内存类型,Size
为内存大小,Speed
为数据传输速度。
硬盘
可先命令 [root@A ~]$ lsblk
查看磁盘的分区和挂载情况。
以命令 [root@A ~]$ yum install smartmontools
安装 smartctl 工具。
若设备 /dev/sda 对应的是单个磁盘,可以命令 [root@A ~]$ smartctl --all /dev/sda
查看设备 /dev/sda 的磁盘信息。
若该设备为 RAID 磁盘阵列,则应以命令 [root@A ~]$ smartctl --all /dev/sda -d megaraid,N
查看该阵列中第 N 块磁盘的信息,其中 N 为 SCSI 总线号,即代表该阵列中的第 N 块磁盘(自 0 计起)。
需指出的是,在该工具给出的信息中, Vendor
实为该磁盘的制造(加工生产)商,可能与磁盘的供货(贴标销售)商不同;Device Model
或 Product
字段为磁盘型号;User Capacity
为磁盘空间大小;Rotation Rate
为机械磁盘的转速;Form Factor
为磁盘尺寸大小;Transport protocol
为磁盘接口协议。
阵列卡
以命令 [user@A ~]$ lspci -v | grep RAID
查看阵列卡信息,RAID bus controller
字段即为阵列卡型号。
Infiniband 卡
以命令 [user@A ~]$ lspci -v | grep Mellanox
查看 Infiniband 卡信息,其中 Infiniband controller
字段即为 Infiniband 卡型号。
以太网网卡
以命令 [user@A ~]$ lspci -v | grep Ethernet
查看以太网网卡信息,Ethernet controller
字段即为以太网网卡型号,每个该字段各对应一个网卡。
xz 压缩或解压
使用 xz -z dir
命令压缩目录 dir,使用 xz -d file
命令解压文件 file。在解压以 .tar.xz
结尾的文件时,可以调用 tar -l xz -cxvf
命令。
rpm 查看系统安装包安装目录
先用 rpm -qa | grep libname
命令查询 libname 安装包得到该包完整名字 libname-version.arch ,再用 rpm -ql libname-version.arch
命令查看该包安装位置。
查看已安装的软件包
- 以 rpm 包安装的:
[root@A ~]$ rpm -qa | grep packagename
- 以 deb 包安装的:
[root@A ~]$ dpkg -l | grep packagename
- 以 yum 命令安装的:
[root@A ~]$ yum list installed | grep packagename
一次性定时任务 at
安装启动
以命令 [root@A ~]$ yum install at
安装 at 后台工具。
以命令 [root@A ~]$ service atd start
启动 atd 服务。
检查运行状态
以命令 [user@A ~]$ service atd status
查看 at 的守护进程 atd 是否正在运行。若显示 “Active: active (running)” 则表示已成功启动。
黑白名单
黑名单文件为 _/etc/at.deny_,白名单文件为 _/etc/at.allow_,并遵循如下规则:
- 当系统中存在白名单文件时,黑名单文件将被忽略,只有写入白名单的用户才可以运行 at 命令;
- 当系统中只有黑名单文件中,被写入名单的用户不能运行 at 命令,且黑名单对 root 无效;
- 如果两个文件都不存在时,只有 root 用户可以运行 at 命令。
at 命令
以命令 [user@A ~]$ at <time>
启动 at 命令行,并输入要执行的任务命令集合,按 [ctrl + d] 结束输入,at 命令会提示该任务的系统编号为 ##;这里,<time>
格式可以为:
- HH:MM,如 02:30
- HH:MM YYYY-MM-DD,如 08:00 2018-10-10
- HH:MM [am | pm] [month] [date],如 08:00 Oct 1
- HH:MM [am | pm] + number [minutes | hours | days | weeks],如 08:00 + 1 days
- now + number [minutes | hours | days | weeks],如 now + 5 minutes
以命令 [user@A ~]$ at -l
查看所有等待执行的 at 任务;
以命令 [user@A ~]$ at -c ##
查看 ## 号 at 任务的任务详情;
以命令 [user@A ~]$ at -d ##
删除正在等待执行的 ## 号 at 任务。
磁盘分区管理工具 fdisk
为例,以如下系列命令删除磁盘 /dev/sdb 的原有分区并创建一个新的分区:
[root@A ~]$ fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Command (m for help): m
Command action
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
q quit without saving changes
s create a new empty Sun disklabel
w write table to disk and exitCommand (m for help): d
Partition number (1,2, default 2): 2
Partition 2 is deletedCommand (m for help): p
Disk /dev/sdb: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt# Start End Size Type Name
1 34 32767 16M Microsoft reser Microsoft reserved partitionCommand (m for help): d
Selected partition 1
Partition 1 is deletedCommand (m for help): p
Disk /dev/sdb: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt# Start End Size Type Name
Command (m for help): n
Partition number (1-128, default 1): 1
First sector (34-7814037134, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-7814037134, default 7814037134):
Created partition 1Command (m for help): p
Disk /dev/sdb: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt# Start End Size Type Name
1 2048 7814037134 3.7T Linux filesysteCommand (m for help): w
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.
软 RAID 磁盘管理
RAID 简介
RAID(即 Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种磁盘管理技术,是由多个独立的高性能磁盘驱动器组成的磁盘系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
RAID 主要利用镜像(即 Mirroring,将原始数据完整复制到多个磁盘上)、数据条带(即 Data stripping,将数据分片保存在不同磁盘上)和数据校验(即 Data parity,利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码或 XOR 操作等算法来计算获得)三大技术来获取高性能、可靠性、容错能力和扩展性。
由于所采用技术组合的不同,实际应用中存在着多种 RAID 等级,如 RAID0、RAID1、RAID3、RAID5、RAID6 和 RAID10 等。根据实现方法的不同,又可以分为软 RAID、硬 RAID 和混合 RAID 三种:软 RAID 由操作系统和 CPU 来完成,没有独立的 RAID 控制/处理芯片和 I/O 处理芯片,效率较低;硬 RAID 由完全由专门的 RAID 控制/处理芯片、I/O 处理芯片和阵列缓冲来实现,不占用 CPU 资源,但成本较高;混合 RAID 有 RAID 控制/处理芯片,但没有 I/O 处理芯片,同时也需要 CPU 和驱动程序来完成,性能和成本都介于软 RAID 和硬 RAID 之间。
创建软 RAID 阵列
在 Linux 系统上,软 RAID 磁盘的管理可以借助 mdadm 命令来实现。以下利用 mdadm 工具以磁盘 /dev/sdf 为热备份磁盘,将磁盘 /dev/sdb、/dev/sdc、/dev/sdd 和 /dev/sde 按 RAID5 的方式组合为一个磁盘阵列:
- 以命令
[root@A ~]$ mdadm -C -v /dev/md5 -l5 -n4 /dev/sd[bcde] -x1 /dev/sdf
开始创建磁盘阵列,其中:-C 表示创建新的磁盘阵列,-v 表示列出相关信息,-l5 表示 RAID5 模式,-n4 表示采用 4 块磁盘制作阵列,-x1 表示采用 1 块磁盘作热备份; - 以命令
[user@A ~]$ cat /proc/mdstat
查看磁盘阵列制作进程,待有进度条的输出内容行消失即表示创建完成; - 以命令
[root@A ~]$ mdadm -D /dev/md5
即可查看新建磁盘阵列的详细信息; - 以命令
[root@A ~]$ mdadm -Dvs > /etc/mdadm.conf
命令保存当前阵列配置信息; - 以命令
[root@A ~]$ mkfs.ext4 /dev/md5
对新建磁盘阵列进行格式化。
至此,磁盘阵列即已成功创建,再以 mount 命令挂载后即可使用。
软 RAID 日常管理
以命令 [root@A ~]$ mdadm /dev/md5 -r /dev/sde
从 RAID 磁盘阵列 /dev/md5 中删除损坏的磁盘 /dev/sde。
以命令 [root@A ~]$ mdadm /dev/md5 -a /dev/sde
向 RAID 磁盘阵列 /dev/md5 中增加新的磁盘 /dev/sde,这里的新增磁盘会用作热备份磁盘。
以命令 [root@A ~]$ mdadm -G /dev/md5 -n4
设置使用 4 块工作磁盘,即将上述热备份磁盘 /dev/sde 转为工作磁盘。
以命令 [root@A ~]$ mdadm -S /dev/md5
停止 RAID 磁盘阵列 /dev/md5。
以命令 [root@A ~]$ mdadm -A /dev/md5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
重新装配 RAID 磁盘阵列 /dev/md5,或以命令 [root@A ~]$ mdadm -As
自动根据配置文件 /etc/mdadm.conf 装配阵列。
功能强大的 LD_PRELOAD 变量
LD_PRELOAD 是 Linux 系统的一个环境变量,它可以定义一个程序运行前优先加载的动态链接库,主要是用来有选择性地载入不同动态链接库中的相同函数。
一般情况下,动态链接库的加载顺序为:LD_PRELOAD > LD_LIBRARY_PATH > /etc/ld.so.cache > /lib > /usr/lib。
为了实现某些功能,可以重定义第三方库中的一些函数,编译为动态链接库,并将 LD_PRELOAD 设置为此自定义动态链接库。此时,程序在运行时,会优先调用自定义库文件中覆写的第三方库同名函数。此处可见详细示例。
另外,在安装某些软件(如 anaconda)时,如需指定其他路径的第三方库而不使用自身提供的同名库(如 hdf5),可将 LD_PRELOAD 设置为需指定路径的库文件,即可强制安装程序调用指定路径的库文件。
创建新用户时的默认规则配置
/etc/login.defs 配置文件
通过该文件可以定义在创建新用户时的一些默认设置,其中:
- MAIL_DIR 字段:系统邮件文件存放位置;
- PASS_MAX_DAYS 字段:用户密码持续有效天数;
- PASS_MIN_DAYS 字段:用户密码允许修改的最短间隔天数;
- PASS_MIN_LEN 字段:允许设置的密码最小长度;
- PASS_WARN_AGE 字段:自系统给出提醒到密码完全失效的间隔天数;
- UID_MIN 字段:允许设置的最小用户 ID;
- UID_MAX 字段:允许设置的最大用户 ID;
- GID_MIN 字段:允许设置的最小用户组 ID;
- GID_MAX 字段:允许设置的最大值用户组 ID;
- CREATE_HOME 字段:是否创建用户 HOME 目录,yes 表示创建。
/etc/default/useradd 配置文件
通过该文件可以定义在使用 useradd 或 adduser 命令创建新用户时的一系列创建规则,其中:
- HOME 字段:用户 HOME 目录的所在目录;
- INACTIVE 字段:是否启用账号过期停权,-1 表示不启用;
- EXPIRE 字段:账号失效日期,为空表示不启用;
- SHELL 字段:默认 SHELL 类型,需指明全路径;
- SKEL 字段:创建用户 HOME 目录时拷贝的初始启动文件的存放位置。
用户账号信息系统文件
/etc/passwd 文件
该文件记录了用户的一些基本属性,一行记录对应于一个用户,每行记录又以 :
分隔为 7 个字段,分别为:
用户名:登录密码:用户 ID :用户组 ID :注释性描述信息: HOME 目录:登录 SHELL
“用户名”中不能有分隔符 :
,不宜超过 8 个字符,不宜包含字符 .
,不宜以字符 -
或 +
开头。
“登录密码”为密码加密字符串。出于安全考虑,在采用了 shadow 技术的现代 Linux 系统中,本文件中该字段一般设为字符 x
或 *
。
“用户 ID”相同而用户名不同的多个用户,系统视为同一个用户,对系统中的文件拥有相同的访问权限,但可以有不同的登录密码、不同的 HOME 目录和不同的登录 SHELL 等。
“注释性描述信息”可以记录一些与用户相关的个人信息,没有实际用途。
“登录 SHELL”也可以指定为某特定的程序,即用户只能运行该指定程序,程序运行结束后自动退出登录。
另外,该文件中还记录了一些伪用户的信息,它们的登录 SHELL 为空,即不能登录。它们的存在主要是为了方便系统管理,满足相应的系统进程支文件所有者属性的要求。
/etc/shadow 文件
该文件记录了与用户密码相关的信息,同样地,一行记录对应于一个用户,每行记录又以 : 分隔为 8 个字段,分别为:
用户名:登录密码:最后修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
“用户名”与 /etc/passwd 文件中保持一致,唯一地表征一个单独的用户。
“最后修改时间”为最后一次修改用户登录密码的时间,其值为自 1970 年 1 月 1 日起算的天数。
“最小时间间隔”指定两次修改登录密码的最小间隔天数。
“最大时间间隔”指定登录密码持续有效的最大天数。
“警告时间”指定自系统给出提醒到密码完全失效的间隔天数。
“不活动时间”指定账号保持有效的用户连续不登录的最大天数。
“失效时间”指定用户账号失效的时间,其值为自 1970 年 1 月 1 日起算的天数。
/etc/group 文件
该文件记录了用户组的相关信息,一行记录对应于一个用户组,每行记录又以 : 分隔为 4 个字段,分别为:
用户组名:用户组密码:用户组 ID :组内用户列表
“用户组名”由字母或数字构成,不应重复。
“用户组密码”为密码加密字符串。出于安全考虑,在采用了 shadow 技术的现代 Linux 系统中,本文件中该字段一般设为字符 x
或 *
。
“组内用户列表”中,多个用户以逗号 ,
分隔。
批量创建用户
准备文件
先参照 /etc/passwd 文件的格式,创建一个文本用户文件 user.txt,如:
1 | user001::600:100:user:/home/user001:/bin/bash |
再创建一个密码对照文件 passwd.txt,如:
1 | user001:明码密文 |
创建用户
[root@A ~]$ newusers < user.txt
:从用户文件 user.txt 中导入数据,创建用户;[root@A ~]$ pwunconv
:取消 shadow password 功能,将 /etc/shadow 中的用户密码写入 /etc/passwd 中,删除 /etc/shadow 文件,方便下一步的密码转换;[root@A ~]$ chpasswd < passwd.txt
:按照默认的加密方式,将用户密码加密后写入 /etc/passwd 的密码栏;[root@A ~]$ pwconv
:重新启用 shadow password 功能,创建 /etc/shadow 文件,删除 /etc/passwd 中的用户密码。
journalctl 查看系统日志
可以命令 [root@A ~]$ journalctl -n 10
查看最新的 10 条日志。
可以命令 [root@A ~]$ journalctl -u NetworkManager
查看与 NetworkManager 服务相关的日志。
可以命令 [root@A ~]$ journal -p err..alert
的方式查看指定优先级的日志信息。这里最后一个参数也可以用 ‘3..1’ 代替。具体的对应关系是:
1 | 0:emerg; 1:alert; 2:crit; 3:err; 4:warning; 5:notice; 6:info; 7:debug |
可以命令 [root@A ~]$ journalctl --since today --until "20 min ago"
查看自今日零时起至 20 分钟前的所有日志。这里的时间参数也可换成 ‘2021-11-20’、‘“2 hour ago”’ 等形式。
可以命令 [root@A ~]$ journalctl _UID=1020
查看与 UID 为 1020 的用户有关的日志。
可以命令 [root@A ~]$ journalctl -k
查看系统内核日志。
可以命令 [root@A ~]$ journalctl -f
实时查看日志更新。
CentOS 7 / Redhat 开放指定网络端口
下文中以 55555/tcp
为例,即指定网络端口号为 55555,指定网络协议为 tcp。
查看已开放端口
[root@A ~]$ firewall-cmd --zone=public --list-port
开放指定端口
1 | [root@A ~]$ firewall-cmd --zone=public --add-port=55555/tcp --permanent |
关闭指定端口
1 | [root@A ~]$ firewall-cmd --zone=public --remove-port=55555/tcp --permanent |
查看指定端口状态
[root@A ~]$ firewall-cmd --zone=public --query-port=55555/tcp
nginx 安装
准备工作
首先,以如下命令安装依赖:
1 | [root@A ~]$ yum install gcc-g++ autoconf automake libtool make cmake |
然后,自官网下载源码安装包 nginx-1.xx.x (不带 Windows 的稳定版即可),并以命令 [root@A ~]$ tar -zpxvf nginx-1.xx.x.tar.gz
解压之。
最后,以如下命令创建 nginx 用户并修改该用户默认属性:
1 | [root@A ~]$ groupadd nginx |
编译安装
在安装包的解压目录 nginx-1.xx.x 下,运行如下脚本将 nginx 安装至 /data/software/nginx 目录:
1 |
|
管理测试
可以命令 [root@A ~]$ /data/software/nginx/sbin/nginx -v
查看 nginx 的安装版本。
nginx 的配置文件为 /data/software/nginx/conf/nginx.conf
,通过修改该文件相应内容,即可自定义配置 nginx(如修改默认监听端口,重启 nginx 服务方可生效)。
可以命令 [root@A ~]$ /data/software/nginx/sbin/nginx -t
验证 nginx 配置。
可以命令 [root@A ~]$ /data/software/nginx/sbin/nginx
首次启动 nginx 服务。
可以命令 [root@A ~]$ /data/software/nginx/sbin/nginx -s reload
重启 nginx 服务。
可以命令 [root@A ~]$ /data/software/nginx/sbin/nginx -s stop
停止 nginx 服务。
在启动 nginx 服务后,可以如下命令进行 localhost 测试(以默认端口号 80 为例):
1 | [user@A ~]$ curl localhost:80 |
在目标服务器(以 IP 地址 192.18.1.101,端口号 80 为例)上启动 nginx 服务,并关闭 SELinux 和防火墙后,在其他可访问目标服务器的主机上,浏览器打开 http://192.18.1.101:80 即可访问目标服务器的 nginx 测试页面。
常见问题总结
CentOS 系统启动时在进度条页面卡死
有时 CentOS 系统由于各种问题在启动时长时间卡死在进度条页面,可在该页面先按 「F5」键查看系统启动项,检查是否有系统应用或服务未正常启动。再重启机器至选择启动系统页面时按「e」键修改启动选项,将以 linux16
开头的行中 ro
替换为 rw init=/sysroot/bin/sh
,再按「Ctrl-x」键即可启动单用户模式。进入后执行命令 chroot /sysroot
即可获取 root 权限,修改有问题的系统启动项后重启即可。
pbsnodes 工作异常
在调用 pbsnodes 命令时出现异常,可能是由于某些 PBS 节点的 pbs 服务未正常启动,可登陆至该节点以命令 [root@A ~]$ service pbs start
重启 pbs 服务即可。
多用户组用户的组间切换
多用户组用户在登录时默认登录到初始登录用户组,通过命令 [user@A ~]$ newgrp groupname
即可切换到附加用户组。
PGI 社区免费版 License 过期
修改 PGI 社区免费版安装目录下的 license.dat 文件中 FEATURE 行的日期为将来的某一日期即可。
OpenMPI 提供的 mpirun 在运行时不同节点的运行环境变量不同
使用「-x <arg0>」运行选项将当前主机的环境变量分发给其他主机,如 [user@A ~]$ mpirun -x LD_LIBRARY_PATH ...
。
安装 NVIDIA 高版本(Linux 418.43 以上)驱动后,nvprof 工具由于内部错误无法工作
在安装 NVIDIA GPU 高版本(Windows 419.17 或 Linux 418.43 以上)驱动后,Cuda 并行代码分析工具 nvprof 或 nvvp 在分析代码性能时,出现由于内部错误引起的报错信息:
ERR_NVGPUCTRPERM The user running <tool_name/application_name> does not have permission to access NVIDIA GPU Performance Counters on the target device.
这是由于 NVIDIA 公司提高了驱动的安全等级,默认禁止普通用户访问 NVIDIA GPU 性能工具,即不允许普通用户进行代码性能分析,root 用户可正常使用 nvprof 和 nvvp 等代码性能分析工具。
根据此处的官方提示,对于 Linux 系统,可在通过命令 [root@A ~]$ modprobe -r vidia_uvm nvidia_drm nvidia_modeset nvidia-vgpu-vfio nvidia
卸载依赖的 NVIDIA 模块(若警告提示未安装某模块时,可在 -r 选项后面的模块列表里去掉相应模块后重新尝试卸载)后,再通过命令 [root@A ~]$ modprobe nvidia NVreg_RestrictProfilingToAdminUsers=0
即可设置允许普通用户使用 NVIDIA GPU 性能工具。
上述设置仅在当次系统启动下生效,当系统发生重启时自动失效。
在文件 /etc/rc.d/rc.local 中追加行内容 modprobe -r vidia_uvm nvidia_drm nvidia_modeset nvidia-vgpu-vfio nvidia
即可使机器在重启时自动执行此命令,再在文件夹 /etc/modprobe.d/ 下创建文件 custom.conf 并写入行内容 options nvidia "NVreg_RestrictProfilingToAdminUsers=0"
即可默认设置允许普通用户使用 NVIDIA GPU 性能工具。如此设置则系统重启后仍有效。
updatedb 报错 “ `/var/lib/mlocate/mlocate.db’ is locked ”
这可能是由于先前的 updatedb
命令被异常中止引起的。在执行命令 [root@A ~]$ rm /var/lib/mlocate/mlocate.db
删除中间文件之后,即可正常运行 updatedb
命令更新文件信息数据库。
报错 “curl#60 - “Peer’s Certificate issuer is not recognized.””
在使用 yum
、wget
和 curl
等网络下载工具时报如上错误,这是因为系统不能正常进行 CA 验证,可能系统中未安装相关验证工具,可通过命令 [root@A ~]$ yum install ca-certificates
进行安装。如仍未解决问题,可参考这里的解决方案。
PBS 作业系统中设置 ulimit 限制
用户不能直接在 PBS 作业脚本中通过 ulimit 命令设置内存限制(报错 “Operation not permitted”),可由 root 账户在各个计算节点修改 /PathToPBSHome/lib/init.d/limits.pbs_mom
文件,注释其中的判断条件 if ... fi
,保存后重启 PBS 服务即可使其中的设置命令生效。