干这行最常碰到的一件事就是:新机器到手,不管是从采购流程里拆出来的工作站,还是云厂商控制台里新建的实例,接下来这一整套流程——装系统、挂数据盘、建用户、配生信环境——是绕不开的。以前我用 Red Hat 和 CentOS 多一些,这两年切到 Ubuntu 之后,发现很多细节跟 RHEL 系差别还挺大,网上教程又碎,东抄一段西抄一段,照着做还经常踩坑。
这篇文章我就把最近给一台生信分析服务器从零到能跑流程的完整过程整理出来,覆盖 Ubuntu 系统安装、数据盘挂载、多用户创建与权限管理、以及生信常用软件和 Python/R 环境的配置。不是罗列命令完事,每一步我会讲清楚为什么这么做,哪些地方容易翻车,以及我实测下来更稳妥的做法。内容偏向新手友好,但老手也可以直接跳到自己需要的段落。
1. 系统安装:从启动盘到 Ubuntu Server 落地
1.1 先想清楚装哪个版本,以及桌面版还是服务器版
很多人一上来就问 Ubuntu 装哪个版本,实际上这不是纠结版本号的问题,而是先要确认两件事:架构(x86_64 还是 ARM)和用途(纯计算节点还是带图形界面的个人工作站)。
生信分析服务器一般建议直接选 Ubuntu Server LTS。LTS 是长期支持版本,Ubuntu 每两年出一个,桌面版支持 3 年,服务器版支持 5 年。对生信这类需要长时间稳定跑流程的环境来说,五年不换系统意味着你装的软件、配的环境不会被系统升级打断,这对 reproducibility 是有实际意义的。目前最新的 LTS 是 24.04.x,如果你手头有老一点的服务器,22.04.x 也完全没问题。
桌面版不是不能用,但服务器上开图形界面纯属浪费资源。GNOME 桌面随便吃 2GB 内存,这内存给比对软件它不香吗?另外桌面版会默认带 snap 商店、自动更新机制这些跟计算节点不搭的东西。所以我这里只讲 Ubuntu Server 的安装。
1.2 制作启动盘的两个要点
制作启动盘的工具有 Rufus、balenaEtcher、Ventoy 这些,我长期用 Ventoy,因为它有个非常实际的好处:一个 U 盘里放多个 ISO,装哪台机器选哪个镜像,不用来回格式化 U 盘。你甚至可以同时放 Ubuntu Server、Ubuntu Desktop 和系统救援镜像,出问题的时候一个 U 盘全部搞定。
用 Ventoy 装的时候有个坑——Secure Boot。UEFI 模式下如果主板开了 Secure Boot(默认就是开的),Ventoy 启动会出现蓝屏或者直接卡住。解决方法是进 BIOS 把 Secure Boot 临时关掉,装完系统后可以再开回来,Ubuntu 的 shim 是支持 Secure Boot 的,不影响启动。这里必须提醒一句:不同主板的 BIOS 界面差异很大,但选项名称基本一致,找 “Secure Boot”→“Disabled” 就行,改了之后记得保存退出。
1.3 安装过程中的分区方案怎么选
Ubuntu Server 安装界面到存储配置那一步,会给两个选项:使用整个磁盘,或者手动配置分区。这里我强烈建议手动分区,哪怕目标机器就一块盘。
我的推荐方案是:
- /boot/efi:EFI 系统分区,建议 512MB 或 1GB,文件系统选 FAT32。
- /:根分区,ext4 或 xfs 都可以,给个 200GB 到 500GB 足够,系统和软件都装在根分区。
- swap:以前习惯给 2 倍内存,现在服务器内存动辄 128GB、256GB 的,真没必要给这么大。给个 16GB 到 32GB 兜底就好,主要防止某些工具内存峰值把系统拖死。
- /data:剩余所有空间都给这个数据分区。注意,这一步很多新手容易漏,或者全部空间给了根分区,后面挂数据盘的时候反而麻烦。提前把系统盘里的数据目录独立出来,后面重装系统、升级系统都不会动到数据。
手动分区界面里选择 “Custom storage layout”,会进入类似分区的操作界面。操作步骤是:选中空闲空间,点击 “Add GPT Partition”,依次创建上述分区。注意在创建 /boot/efi 分区时,Type 要选 “EFI System Partition”,否则 UEFI 无法识别引导。创建根分区时,Mount point 填/,创建 /data 分区时 Mount point 填/data。
1.4 安装时顺手配置好的三样东西
在安装向导的后半段,会让你设置主机名、用户名和密码、SSH key。这几个地方值得多花几分钟好好设,因为系统装完再改会比较麻烦。
主机名建议写成有辨识度的,比如bio-ws01、ngs-node-02这种,别用什么 ubuntu、localhost 的默认名字。多台服务器的时候,主机名混乱会带来很大的运维麻烦,尤其是生信平台多节点提交任务时,日志里看节点名完全分不清是哪台机器。用户名这里有个细节:安装向导默认创建的用户是带 sudo 权限的,也就是说你拿这个用户就能做管理员操作。我习惯创建一个主管理员,比如sysadmin,后面给其他人创建用户时,都用普通权限账户,不随便给所有人 sudo。
SSH 部分一定要勾选安装 OpenSSH server,并且把自己的公钥粘进去。不然系统装完只能对着键盘敲,还要登云控制台的 VNC,体验很差。公钥是在你自己电脑上用ssh-keygen -t ed25519生成的,把~/.ssh/id_ed25519.pub的内容复制过去即可。
2. 硬盘挂载:让数据盘变成真正的数据仓库
2.1 认清哪块是数据盘:lsblk 与 fdisk 的配合
刚装完系统的服务器,查磁盘状态第一反应就是执行lsblk。这个命令会列出所有块设备、大小、挂载点。一台典型服务器的输出长这样:
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 223.6G 0 disk ├─sda1 8:1 0 1G 0 part /boot/efi ├─sda2 8:2 0 200G 0 part / └─sda3 8:3 0 22.6G 0 part [SWAP] sdb 8:16 0 3.7T 0 disksda 是系统盘,已经分好了;sdb 没分区没挂载,就是我们要处理的数据盘。用sudo fdisk -l可以看更详细的信息,包括磁盘型号、扇区大小、序列号。建议执行这一步的时候顺手记一下磁盘的序列号,云服务器或者阵列柜里识别物理盘时会用到。
2.2 分区、格式化,以及为什么我推荐 ext4
数据盘分区其实很简单,不搞 LVM、不做 RAID 的话,整个盘一个分区是最省事的方式。
# 对 /dev/sdb 进行分区 $ sudo fdisk /dev/sdbfdisk 是交互式的,详细步骤是:输入n(new partition)→ 选择分区号,直接回车默认 → 起始扇区,回车默认 → 结束扇区,回车默认(用整块盘)→ 输入w(write)写入分区表。整个过程下来就创建了一个 /dev/sdb1。
分区完了要格式化。生信场景的文件系统选择,我首推 ext4,其次是 xfs。原因很简单:ext4 兼容性最好,老工具不认 xfs 元数据的情况偶尔有发生;而且 ext4 支持在线扩容,空间不够了后面用resize2fs直接扩展就行。xfs 也不是不行,处理超大文件(单个文件超过 2TB)这类极端场景 xfs 在元数据性能上有优势,但日常比对和统计根本摸不到这个上限。
$ sudo mkfs.ext4 /dev/sdb1格式化之前一定要确认磁盘盘符没有搞错。有个血泪教训:之前在测试机上执行格式化命令时手滑写错了盘符,把系统盘给抹了,只能重装。所以执行mkfs前务必执行下面这条确认三遍:
$ lsblk -o NAME,SIZE,MODEL,SERIAL,MOUNTPOINT2.3 开机自动挂载:别再用 mount 命令将就了
格式化之后直接sudo mount /dev/sdb1 /data能用,重启就没。要开机自动挂载,必须写入 /etc/fstab。
$ sudo mkdir -p /data $ sudo blkid /dev/sdb1blkid 的输出的 UUID 要记录下来,例如UUID="abc123...-xxxx"。然后编辑 /etc/fstab:
$ sudo vim /etc/fstab在文件末尾加一行:
UUID=abc123...-xxxx /data ext4 defaults,nofail 0 2解释一下这一行几个关键部分的含义:UUID用磁盘的唯一标识而不是/dev/sdb1,原因是设备名重启后可能变化,UUID 不会变;defaults表示使用默认挂载选项,nofail非常重要——如果这块盘出问题没挂上,系统也能正常启动,否则开机时 console 会一直停在 “Failed to mount /data”,等你输 root 密码去修复。后面的0 2是 dump 和 fsck 选项,0 2表示启动时检查该分区的文件系统,系统分区一般是0 1,普通数据盘0 2就行。
改完 fstab 一定要先验证配置有没有写错:
$ sudo umount /data $ sudo mount -a $ df -h /data执行mount -a如果没报错,df 能显示出 /data 的容量,就说明配置成功。这个验证步骤别省,直接重启验证的话,fstab 写错了系统会起不来。
2.4 网络存储的补充:NFS 挂载在生信集群中的用法
多台机器需要共享数据时,NFS 是最常见的方案。比如你有两台服务器,A 机器上挂了数据盘,想让 B 机器访问,就可以在 A 机器上启用 NFS 服务,B 机器上挂载。
A 机器上安装并配置 NFS 服务端:
$ sudo apt install nfs-kernel-server $ sudo vim /etc/exports # 加入一行,把 /data 共享给 192.168.1.0/24 网段,读写权限 /data 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash) $ sudo exportfs -raB 机器上挂载:
$ sudo apt install nfs-common $ sudo mkdir -p /shared_data $ sudo mount -t nfs 192.168.1.10:/data /shared_data生信分析里,多个节点共享同一份参考基因组和原始测序数据,能避免在每个节点上都复制一份几百 GB 的文件,省下的磁盘空间和同步时间相当可观。不过要注意 NFS 是单点服务,网络或者服务端出问题会影响所有挂载方。所以生产环境建议做好冗余,或者在 fstab 里同样加上nofail参数。
3. 用户创建与权限管理:多用户服务器的安全底线
3.1 useradd 与 adduser 的区别,以及推荐做法
生信服务器通常不是一个人用,课题组的师弟师妹、合作单位的伙伴都可能有登录需求。用户管理的第一步就是创建用户。
Ubuntu 下useradd和adduser是两套逻辑。adduser是 Perl 脚本,会交互式地让你设置密码和用户信息,属于“傻瓜式”;useradd是底层命令,灵活度更高,不指定参数时默认的行为比较反直觉——不创建家目录、不设置 shell。平时我推荐用adduser,简单直接:
$ sudo adduser zhangwei这个命令一路回车到底,最后输入两次密码就完成了。它会自动创建用户目录 /home/zhangwei,默认 shell 是 /bin/bash,用户组和用户名同名。一个比较实用的细节是,adduser在创建用户的同时还会帮你创建邮件目录,并把 /etc/skel 下的文件复制到新用户家目录里。如果你希望所有新用户默认拥有某些文件,比如 .bashrc 里的公用的环境变量,提前放到 /etc/skel/ 下就好了。
3.2 用户组规划:别把所有人塞进同一个组
多用户服务器上,组策略直接关系到协作效率和权限安全。常见做法是按项目或角色分组成,比如:
$ sudo groupadd bioinfo $ sudo usermod -aG bioinfo zhangwei $ sudo groupadd rnaseq $ sudo usermod -aG rnaseq wangliusermod -aG的-a参数一定要带上,意思是在保留原有所属组的基础上追加新组。如果漏了-a,会把用户从现有组里挪出来,导致权限变化。可以用id zhangwei查看用户当前的组信息。
真正的权限控制体现在数据目录上。比如 /data/project1 这个目录要允许 bioinfo 组成员读写,那就:
$ sudo chown -R root:bioinfo /data/project1 $ sudo chmod -R 775 /data/project1775 的意思是 owner 和 group 都有读写执行权限,其他人只有读和执行。这个组策略在生信场景下的意义很直接:同一个分析项目的成员可以互相写对方的临时文件,其他组的人看不了你的数据,不同项目之间的数据是隔离的。
3.3 root 用户与 sudo:该给还是不该给
Ubuntu 默认 root 用户是带随机密码锁定的,也就是说安装时创建的初始用户承担了管理员角色。网上很多教程教你怎么给 root 设置密码并直接登录 root,我强烈不建议这么做,尤其对多用户服务器来说,root 密码一旦泄露,整个服务器等于裸奔。
合理的管理员分配方案是:只给真正需要做系统维护的人 sudo 权限。Ubuntu 里 sudo 权限的组叫 sudo(RHEL 系叫 wheel),把用户加到 sudo 组就行:
$ sudo usermod -aG sudo wangli注意,sudo 权限不是一次性给的,我个人的习惯是尽量少开 sudo,需要装软件时临时加,装完移除。更新系统这类操作由主管理员统一处理。
另外,Ubuntu 的 sudo 默认会运行env_reset,也就是把当前用户的 PATH 清掉,再用安全路径重新加载。这意味着普通用户通过 sudo 执行 root 环境的软件时,可能遇到 “command not found”。解决方式不是去改 sudoers,而是用sudo -i切换到 root 环境,或者用绝对路径调用。
3.4 密码策略:让用户不能改密码、密码永不过期
多用户环境有个非常常见的需求:服务器创建的是服务账号或者公共账号,不希望用户自己修改密码,也不想密码定期过期(比如像 MySQL 的专用部署账号)。这正好对应了几个热搜词里提到的点。
修改 /etc/shadow 中对应用户的字段,或者用chage命令:
# 密码永不过期 $ sudo chage -M -1 zhangwei # 禁止用户主动修改密码 $ sudo passwd -l zhangwei但是passwd -l会把用户锁定,导致无法登录,这不是我们想要的效果。真正实现“用户不能改密码”的方式是给 passwd 命令加约束,或者修改 /etc/shadow 中的用户字段:
$ sudo passwd -n 99999 zhangwei这表示密码最小使用期限是 99999 天,用户想改也改不了。但这跟“永不过期”是两个维度。综合设置,比较标准的做法是把密码过期时间设置为无限远:
$ sudo chage -M 99999 zhangwei $ sudo chage -m 99999 zhangwei这样用户既不能自己改密码,密码也不会过期。业务上如果遇到审计要求比较高的情况,这组命令是非常常见的答案。
3.5 SSH 免密登录配置:公钥放对位置很重要
创建完用户之后,需要让用户能通过 SSH 从自己的电脑登录服务器。比较规范的做法是配置公钥登入,而不是用密码。
$ sudo mkdir -p /home/zhangwei/.ssh $ sudo chmod 700 /home/zhangwei/.ssh # 把用户自己的公钥内容写入 authorized_keys $ sudo vim /home/zhangwei/.ssh/authorized_keys $ sudo chmod 600 /home/zhangwei/.ssh/authorized_keys $ sudo chown -R zhangwei:zhangwei /home/zhangwei/.ssh.ssh目录权限是 700,authorized_keys 是 600,如果这两个权限设置得比这宽松,sshd 会为了安全直接拒绝使用该公钥文件,导致免密登录无效。这是新手最容易忽略的权限坑之一。
如果希望某些用户只能通过密钥登录、不能密码登录,可以修改 /etc/ssh/sshd_config:
PasswordAuthentication no建议先把所有用户的公钥都配置好,确认免密登录没问题之后,再关密码登录,防止自己把自己锁在外面。服务器端 sshd 配置修改完要重启服务:sudo systemctl restart sshd。注意 Ubuntu 的服务名是 ssh(openssh-server),RHEL 系叫 sshd,命令不完全一样,别记混了。
4. 生信分析环境配置:从软件源到 Python/R 的完整搭建
4.1 更换 apt 软件源,以及基础依赖安装
Ubuntu 默认的 apt 源是官方源,国内访问网速不太稳定,装大软件包时经常卡住。建议换成阿里云或清华镜像源,阿里云源的速度和兼容性我个人体验是最好的。
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak $ sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list $ sudo apt update先备份原文件是个好习惯,改坏了还能回滚。Ubuntu 24.04 的 apt 源默认走的是 /etc/apt/sources.list.d/ubuntu.sources 这种新的 deb822 格式,如果发现 sources.list 文件是空的,需要去那个目录改。sed 的替换逻辑可能不适用,遇到这种情况直接编辑 ubuntu.sources 文件,把 URL 替换成https://mirrors.aliyun.com/ubuntu/。
基础依赖是后面装软件的前提,直接一条命令装齐:
$ sudo apt install -y build-essential gcc g++ make cmake \ zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libncursesw5-dev \ libcurl4-openssl-dev libssl-dev libxml2-dev \ unzip zip git wget curl \ libopenblas-dev liblapack-dev这里面 zlib、bzip2、lzma 这三个开发库做生信的人一定不陌生,samtools、bcftools 这类工具编译的时候依赖它们。libcurl、libxml2 是 R 包安装是经常需要的。装这些基础依赖的功夫,够你泡杯咖啡了。
4.2 Miniconda 安装与 conda 镜像源配置
生信领域的软件管理,Miniconda 基本是标配。它的意义在于隔离环境——每个项目用一套独立的软件版本,避免 A 项目升级了某个工具导致 B 项目跑不了。这在重跑已发表分析流程时尤其重要。
安装 Miniconda 的步骤:
$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh $ bash Miniconda3-latest-Linux-x86_64.sh安装过程中会提示是否运行 conda init,建议选 yes,这样会把 conda 初始化代码加进自己的 .bashrc,重开终端就能直接用 conda 命令了。如果想对所有用户生效,可以把 Miniconda 装到 /opt/miniconda3,然后给每个用户的 PATH 里加上 /opt/miniconda3/bin。
conda 默认源在国外,安装软件时经常卡住。我习惯在安装完成之后立刻换成清华源:
$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ $ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ $ conda config --set show_channel_urls yes这里有个重要的知识点:conda-forge 和 bioconda 是两个最常用的 channel。bioconda 是生信软件的集中地,绝大多数生信工具都能直接用 conda 装。建议按这个顺序配置 channel:
conda config --add channels defaults conda config --add channels bioconda conda config --add channels conda-forge优先级从低到高,conda-forge 在最上面,这样依赖解析时优先从 conda-forge 拉,能少很多冲突。
4.3 用 conda 创建生信分析环境
有了 conda,创建环境就是一行命令的事。比如要建一个做 RNA-seq 分析的环境,可以这样:
$ conda create -n rnaseq -y python=3.10 $ conda activate rnaseq $ conda install -y -c bioconda fastqc fastp hisat2 subread stringtie samtools $ conda install -y -c bioconda -c conda-forge multiqc核心思想是:环境隔离 + 工具联合安装。为什么要单独建环境?因为不同项目的软件版本可能冲突。比如项目 A 要用 hisat2 2.2.1,项目 B 要用 2.1.0,如果都装在 base 环境里,改来改去会非常痛苦。分开环境之后,激活哪个环境就用哪个版本的软件,互不干扰。
我一般会固定工具的版本号,比如conda install -y -c bioconda fastqc=0.12.1,这样更利于重现。等别人要复现你的分析流程时,版本信息是必须交代清楚的,这部分信息其实应该跟着环境走。建议建完环境后把环境的导出信息保存下来:
$ conda env export -n rnaseq > rnaseq_env.yml这个 yml 文件是环境配置的完整快照,后面在新的机器上恢复环境时,执行conda env create -f rnaseq_env.yml就行。这个习惯强烈建议养成。
4.4 Python 与 R:生信分析的两大支柱语言
Python 和 R 是生信分析最核心的两门语言。Python 做流程调度、数据清洗、机器学习模型,R 做统计分析和可视化。配置的时候有几个常见的坑需要注意。
先说 Python。Ubuntu 系统自带的 python3 是系统级的,不要手动给它装包,因为系统工具可能依赖特定版本的库,装坏了可能导致整个系统出问题。正确做法是用 conda 环境里的 Python。创建环境时指定python=3.10或者 3.11,然后装包就用 pip:
$ conda activate rnaseq $ pip install pandas numpy scikit-learn matplotlib seaborn如果用 pip 装包时遇到编码问题报错,可以设置环境变量export PYTHONUTF8=1。如果遇到缺少编译依赖的情况,比如装某些带 C 扩展的包,用到上面装好的 build-essential 就不会卡在这一步。
R 的安装稍微复杂一点。Ubuntu 的 apt 仓库里 R 版本偏老,建议用 CRAN 源安装最新稳定版:
$ sudo apt install r-base r-base-dev $ sudo apt install libcurl4-openssl-dev libssl-dev libxml2-dev装好之后,进入 R 环境安装 BiocManager 和常用包:
install.packages("BiocManager") BiocManager::install(c("DESeq2", "edgeR", "limma", "clusterProfiler", "ggplot2", "dplyr", "tidyr"))R 包安装经常需要编译,如果报缺失某个系统库,可以根据提示用 apt 安装。比如安装 curl 相关包报configure: error: libcurl >= 7.28.0 required,就是 libcurl4-openssl-dev 没装。
不过要提醒一下,如果 conda 装了 R,跟系统 R 可能会有冲突。conda 里也有 r-base、r-essentials,用 conda 装 R 的好处是依赖管理更方便,坏处是有些 R 包没有 conda 包,还是要走 install.packages 编译,而且 conda 环境内编译状态下不一定找得到系统头文件。我现在的习惯是系统级 R 管 Bioconductor 包,conda 环境专注 Python 和生信工具,两者不混用,省心。如果你用 conda 装 R,记得保证 conda 环境里已经装了 r-base-dev 的对应包,别交叉混着用。
4.5 项目目录规划:给每个分析项目一个干净的家
生信分析项目有一个很典型的目录结构要求——原始数据、中间结果、最终结果、脚本、文档要分清楚。我在服务器上一般给每个项目建一套固定模板:
/data/project1/ ├── raw_data/ # 原始数据,只读 ├── scripts/ # 分析脚本 ├── results/ # 最终结果 ├── temp/ # 中间临时文件 └── docs/ # 分析文档和报告创建之后,把 raw_data 目录的权限收紧,只允许项目组成员读:
$ sudo chown -R root:bioinfo /data/project1/raw_data $ sudo chmod -R 750 /data/project1/raw_data这样设置的好处是,避免有人误删或者覆盖原始测序数据。原始数据是整个分析的基础,丢了就真的找不回来了,权限收紧是最基础的保护。
5. 常见问题与排查技巧实录
5.1 系统启动后停留在 initramfs 或者直接 grub 提示符
这个场景大多发生在改完 fstab 之后。启动时系统要挂载一个不存在的分区或者文件系统类型写错了,就会卡住。如果你按我前面说的,在 fstab 里加了nofail参数,开机至少能起来;如果没有,卡住时输入 root 密码进修复模式,然后执行mount -a看是哪一行报错,或者直接注释掉错误行。
5.2 创建的用户无法 sudo
用户执行 sudo 提示 “user is not in the sudoers file”,大概率是只用了 useradd 没加组。解决方式是用一个有 sudo 权限的账号执行:
$ sudo usermod -aG sudo zhangweiUbuntu 只认 sudo 组,不认 wheel 组。如果你是从 RHEL 转过来的,这点最容易踩坑。
5.3 conda 安装速度慢或者软件包冲突
conda 安装慢基本是源的问题,检查 .condarc 配置文件,确认 channels 指向的是国内镜像。如果有冲突,比如提示 packages conflict,建议先创建新环境再装,不要尝试在已有环境里反复求解依赖,conda 的 solver 在依赖复杂时会非常慢。或者用 mamba 替代 conda,mamba 用 C++ 重写了依赖求解逻辑,速度能快一个数量级:
$ conda install -n base mamba -c conda-forge $ mamba install -y -c bioconda fastqcmamba 装软件的命令和 conda 完全一样,只是把 conda 换成 mamba,上手零成本,但对速度的提升非常明显。生信环境依赖一多,conda 求解可能要几分钟,mamba 十几秒就搞定了。
5.4 SSH 登录慢或免密登录失效
登录慢通常是因为 sshd 在做 DNS 反查,可以修改 /etc/ssh/sshd_config 里UseDNS no,重启 sshd 立刻生效。免密登录失效有几种可能:公钥内容不对、权限错误、或者目标用户的 home 目录权限太开放。sshd 要求家目录和 .ssh 不能对其他用户可写,否则拒绝加载公钥。执行chmod 700 /home/zhangwei就能解决。
5.5 挂载 NTFS 或 exFAT 格式数据盘
很多个人工作站会用移动硬盘拷贝数据,移动硬盘默认是 NTFS 或 exFAT。Ubuntu 默认没装对应驱动,直接 mount 会报 unknown filesystem type。解决办法:
$ sudo apt install ntfs-3g exfat-fuse装完重新 mount 就行。生信实验室里经常有同事从 Windows 机器拷贝测序数据到服务器,这个坑非常常见。
6. 一些额外的运维建议
系统安装和环境配置只是第一步,服务器是要长期运行的,我在这里补充几个实际运维中很有用的习惯。
6.1 定期更新系统安全补丁
Ubuntu 的自动安全更新默认是开启的,但是只覆盖安全补丁,不会做大版本升级。建议每周手动执行一次:
$ sudo apt update && sudo apt upgrade -y升级完如果提示需要重启服务(比如内核更新),可以用sudo reboot重启。重启前记得检查有没有正在跑的分析任务,awk 或者截断到结果的重定向通常都有 24 小时以上的任务,别手贱在任务没完成时重启服务器。
6.2 监控磁盘空间和内存
生信数据增长非常快,一个 WGS 的原始数据就有上百 GB,不及时清理很容易把磁盘塞满。建议用 ncdu 查看目录大小分布:
$ sudo apt install ncdu $ ncdu /datancdu 是交互式的磁盘占用分析工具,进入界面后用方向键浏览,d 键删除文件,速度很快。服务器内存监控的话,htop或者free -h都够用了。
6.3 关键数据备份
生信服务器最怕的是磁盘损坏。数据盘如果存储的是原始测序数据或者重要的分析结果,一定要做备份。条件有限的实验室至少要做到:
- 原始数据双份拷贝,放在两块不同的物理盘上
- 中间结果定期清理,保留代码和最终结果即可
- 重做分析的能力远比堆数据重要,确保环境配置文件和脚本别丢
6.4 记录环境变更
强烈建议在服务器上放一个运维日志,记下自己做了什么操作、装了什么软件、改了什么配置。可以是简单的 Markdown 文件,比如 /data/ops_log.md,每次操作加一条时间戳记录。几个月后排查问题时,你会感谢当时的自己。
我个人在实际操作中的体会是:Linux 服务器的搭建不是一次性的任务,而是一个持续调整的过程。第一次给新机器装环境,可能从早忙到晚;跑了几个项目、踩了几次坑之后,你会逐渐形成自己顺手的配置模板,以后再装新机器就快多了。这套流程我前前后后执行了几十次,把每一步遇到的问题都记下来,慢慢沉淀成了自己的一套标准作业流程。这篇文章就是基于这套流程写出来的,希望对你有帮助。