Files
blog-public/content/docs/server/qa/_index.md

155 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
weight: 5
title: "Q & A"
---
## 使用 SSH X11 forwarding
远程桌面非常笨重。在 Linux 系统上连接到 Linux 服务器时,可以使用 SSH X11 forwarding 代替之:
```bash
ssh chn@srv1.chn.moe -X -Y
```
之后在服务器上运行图形化程序时,就会在本地显示,就像在本地运行那样,只不过有明显的延迟。例如:
```bash
ovito POSCAR
```
## RDP 设置连接类型
连接到 Linux 远程桌面时需要手动设置连接类型为“LAN”不然会很卡我也不知道为什么。似乎是 xrdp 的 bug。
![](rdp1.png)
<img src="rdp2.png" style="zoom: 50%;" />
## 混合使用不同型号的节点
不建议这样做,如果你非要这样做再往下看。
计算软件(例如 VASP在编译时需要针对不同的硬件进行优化得到不同的二进制程序以此发挥硬件的最大性能。
也就是说,针对不同型号的 CPU 优化的 VASP 其实并不是同一个程序,运行过程中 CPU 收到的指令也不相同。
大多情况下,越新的 CPU 支持的指令集越多,
针对新 CPU 优化的程序在旧 CPU 上不能运行(因为旧 CPU 看不懂这些新指令),针对旧 CPU 优化的程序在新 CPU 上运行效率不高。
以下面提交任务的命令为例:
```bash
sbatch --ntasks=64 --cpus-per-task=1 --export=ALL,OMP_NUM_THREADS=1 --wrap="vasp-intel srun --mpi=pmix vasp-std"
```
任务会在某一个节点上先启动、再与其它节点通信并在其它节点上启动;具体启动哪一个 VASP取决于最先启动的那个节点[^1]。
例如,你可以使用下面的命令查看当前节点上最终会启动哪一个 VASP
```bash
vasp-intel which vasp-std
```
要跨不同型号的节点使用 VASP可以按照以下步骤操作
1. 准备一个优化得足够“弱”的 VASP可以在所有节点上运行。对于 srv1可以使用 `srv1-node1` 上的 VASP使用下面的命令计算它的路径
```bash
echo $(nix eval --raw nixos#nixosConfigurations.srv1-node1.pkgs.localPackages.vasp.intel)/bin/vasp-intel
```
现在的计算结果是 `/nix/store/xlxz74mppn76iwk2y2njh7gjncwsx7r8-vasp-intel/bin/vasp-intel`。
随着更新,将来的路径会发生变化。
2. 使用这个 VASP 提交任务,例如:
```bash
sbatch -n64 --cpus-per-task=1 --export=ALL,OMP_NUM_THREADS=1 -pall --wrap="/nix/store/xlxz74mppn76iwk2y2njh7gjncwsx7r8-vasp-intel/bin/vasp-intel srun --mpi=pmix vasp-std"
```
对于其它的计算软件,不一定能这样做。因为还有别的针对 CPU 优化的方案(例如,编译多个版本的二进制库,在运行时动态检测 CPU 型号并加载最合适的版本)。
并行使用不同型号的 CPU 时,队列系统或 MPI 往往并不会根据型号平衡各个 CPU 的负载,也就是算得快的 CPU 会等着算得慢的 CPU。
## BtrFS 是什么
它是一个比较现代的文件系统。相比于常用的其它文件系统(例如 Windows 的 NTFS它的好处有
* 同样的内容只占用一份空间;以及内容会被压缩存储,在读取时自动解压。这样大致可以节省一多半的空间。
* 每小时自动备份,放置在 `/nix/persistent/.snapshots` 中,大致上会保留最近一周的备份。如果你误删了什么文件,可以去里面找回。
## 查看文件或文件夹的大小
Windows 下不用教。Linux 下分两种情况:
* 对于厦大超算jykang使用 `du -ah --max-depth=0 文件或目录名`。
* 对于其它服务器(使用了 BtrFS由于压缩和 CoW实际占用空间会小于大小因此 `du` 得到的结果不准确。
使用 `compize 文件或目录名` 命令。
得到的结果中,`TOTAL` 行 `Disk Usage` 列为实际占用的空间,`TOTAL` 行 `Referenced` 列为文件或文件夹的大小。
## 查看硬盘剩余空间
Windows 下不用教。Linux 下分两种情况:
* 对于厦大超算jykang:硬盘空间实际上是比较大的,紧张的是 `jykang` 这个用户的限额quota
似乎没有 root 权限没法看。按照经验大概是 800 G 多一点。
如果你知道怎样不用 root 用户看,请务必教教我。
* 对于其它服务器:`df -h`。
## 自动启动 Pageant 并添加密钥
如果您觉得每次打开 Pageant 都要手动添加密钥很麻烦,希望可以将这个过程自动化;并且熟悉 Windows 命令行的使用,可以编写一个批处理文件。
将下方代码用记事本保存,然后将扩展名从 `.txt` 改为 `.bat`,之后每次双击该文件即可启动 Pageant 并自动添加密钥:
```bash
"C:\ProgramData\chocolatey\bin\PAGEANT.EXE" "Z:\.ssh\id_rsa.ppk"
```
其中第一个引号内为 Pageant 的路径,第二个引号内为您的密钥文件的路径。也可以将该批处理文件放入开机启动项中,使得 Pageant 在开机时自动启动。
因为每个人的密钥文件以及 Pageant 的路径都可能不同,所以这里无法提供通用的批处理文件。
## 为什么不转发 agent 就无法区分不同密钥?
如果你好奇为什么不使用 Pageant 就无法区分使用不同密钥的登陆:
SSH 连接并不是直接由 jykang 用户处理的,
而是由一个名为 `sshd` 的程序处理,它通常以 `root` 用户的身份运行。
在完成认证后,`sshd` 会将 Windows 电脑发来的信息解密后转发给以 `jykang` 用户运行的进程,
并将以 `jykang` 用户运行的进程的输出加密后发回给 Windows 电脑。
我们只能控制 `jykang` 用户运行的进程,但这里拿不到任何关于密钥的信息。
```mermaid
flowchart TB
subgraph "Run on windows"
A[(密钥文件)] -.->|从硬盘读取| B["SSH client (putty, WinSCP, etc.)"]
end
subgraph "Run on hpc by root"
C["SSH server (sshd)"]
end
B <--> |"认证信息 & 加密的数据"| C
subgraph "Run on hpc by <b>jykang</b>"
D["Other programs (bash, VASP, etc.)"]
end
C <--> |"解密后的数据(不包含密钥信息)"| D
```
Pageant 程序就是所谓的“SSH agent”。“SSH agent forwarding” 就是将到 Pageant 的连接通过已经建立的 SSH 连接转发给远程服务器,
使得远程服务器可以与 Pageant 通信,进而读取密钥信息。
“SSH agent forwarding” 典型的用途是在远程服务器上使用本地的密钥再次登陆其他服务器,而不是为了区分使用不同密钥的登陆。
```mermaid
flowchart TB
subgraph "Run on windows"
A[(密钥文件)] -.->|从硬盘读取| E["SSH agent (pageant)"]
E <-->|认证信息| B["SSH client (putty, WinSCP, etc.)"]
end
subgraph "Run on hpc by root"
C["SSH server (sshd)"]
end
B <--> |"认证信息 & 加密的数据"| C
subgraph "Run on hpc by <b>jykang</b>"
D["Other programs (bash, VASP, etc.)"]
end
C <--> |"解密后的数据(不包含密钥信息)"| D
E <-...-> |"通过已经建立的 SSH 连接转发密钥信息"| D
```
事实上linux 的管理(统计用户使用的资源,等)非常依赖于不同的用户,即用高权限的用户去管理低权限的用户。
大家都使用同一个账户的情况下,很多管理的功能没有现成的解决方案(要自己手写代码、思考如何设计),甚至完全无法实现。
整这个东西真的挺麻烦的。我也嫌麻烦(而且我要做的事情比大多数用户多得多)。要不是康老师一定要我做,我才不会做。
如果你嫌这些麻烦,与其埋怨我,不如去建议自己的导师去自己申请一个账号用。
[^1]: MPI 是按照绝对路径来搜索可执行文件的。
NixOS 的特性导致不同参数编译的 VASP 会被放在不同的目录下,因此会在其它节点上启动与最先启动的节点相同、但不是针对这些节点优化的 VASP。
如果通过一些手段将不同参数编译的 VASP 放在同一个位置,它们是否能正常通信,我觉得应该是可以的。
但我觉得这样做意义不大,因为算得快的 CPU 还是需要等着算得慢的 CPU。