Linux

TrueNAS NFS 共享配置与排障

在 TrueNAS 上配置 NFS 共享时,遇到 mount.nfs: access denied by server while mounting 报错,本文记录排查过程及解决方法。

遇到的问题

挂载时报错:

sudo mount -t nfs tnas:/mnt/pool/share /mnt
# mount.nfs: access denied by server while mounting tnas:/mnt/pool/share

排查过程

检查导出列表

在 TrueNAS 主机上执行:

sudo exportfs -v

输出如下:

/mnt/pool/share
        192.168.1.0/24(sync,wdelay,hide,no_subtree_check,anonuid=3000,anongid=3000,sec=sys,rw,secure,root_squash,all_squash)

注意到导出选项中包含 secure 标志,这是关键。

Linux 下 Claude Code 安装与更新指南

Claude Code 简介

Claude Code 是 Anthropic 推出的命令行 AI 编程助手,基于 Claude 大模型,能在终端中直接进行代码编写、调试、重构等操作。支持多文件编辑、Git 集成、Shell 命令执行,是开发者的效率利器。

官方推荐通过 npm 安装,但国内网络环境下 npm 下载 GitHub 资源经常超时。本文介绍一种更可靠的方式:通过淘宝 npm 镜像下载预编译包,绕过网络限制,实现快速安装与更新。

firewalld 配置 internal 到 public 区域的流量转发

firewalld 支持通过 Policy 对象实现跨区域流量转发。本文介绍如何配置策略,允许 internal 区域的流量转发到 public 区域,使内网主机可以通过防火墙访问外部网络。

前提条件

  • firewalld 已安装并运行(systemctl status firewalld)
  • 有 root 或 sudo 权限
  • 了解 firewalld 的 Zone 和 Policy 概念

使用 resolvectl 临时指定 DNS 服务器

在日常运维中,我们经常需要临时切换 DNS 服务器来排查域名解析问题。传统做法是修改 /etc/resolv.conf,但在使用 systemd-resolved 的现代 Linux 发行版中,resolvectl 提供了更优雅的解决方案。

为什么用 resolvectl

传统的修改 /etc/resolv.conf 方式有几个痛点:

  • systemd-resolved 管理下会被覆盖:直接编辑 /etc/resolv.conf 可能无效,因为该文件是一个指向 /run/systemd/resolve/stub-resolv.conf 的符号链接
  • 需要 root 权限:编辑系统文件必须 sudo
  • 容易忘记还原:排查完问题后忘记改回来,可能影响业务

而 resolvectl 的优势:

特性 传统方式 resolvectl
修改配置文件 ✅ ❌
需要 root ✅ ❌(per-link)
重启后恢复 需手动还原 ✅ 自动恢复
影响范围 全局 可按网卡控制

查看当前 DNS 状态

# 查看全局 DNS 配置
resolvectl status

# 查看指定网卡
resolvectl status eth0

# 查看当前生效的 DNS 服务器
resolvectl dns

输出示例:

Global
         Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Resolving DNS Servers: 192.168.1.1
Fallback DNS Servers: 8.8.8.8

Link 2 (eth0)
    Current Scopes: DNS
         Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
Resolving DNS Servers: 192.168.1.1
    DNS Domain: lan

修改 SSH 监听端口与 SELinux 配置

概述

出于安全考虑,修改 SSH 默认端口(22)是一个常见的安全加固措施。本文介绍如何修改 SSH 监听端口,并正确配置 SELinux 以允许新端口的访问。

修改 SSH 监听端口

1. 编辑 SSH 配置文件

sudo vi /etc/ssh/sshd_config

找到 #Port 22 这一行,取消注释并修改为需要的端口:

Port 22
Port 2222

建议同时保留默认端口和自定义端口,便于测试。确认新端口正常工作后,再删除默认端口配置。

2. 重启 SSH 服务

sudo systemctl restart sshd

3. 验证新端口

# 检查 SSH 服务监听端口
sudo ss -tlnp | grep sshd

# 或使用 netstat
sudo netstat -tlnp | grep sshd

应该看到新端口(如 2222)已开始监听。

扩展LVM磁盘空间

在虚拟化环境中,随着业务增长,磁盘空间不足是常见问题。本文记录在 CentOS 7/8 环境下扩展 LVM 磁盘空间的完整流程。

扩展虚拟机磁盘

首先在虚拟化平台(VMware / KVM / Proxmox 等)上扩大虚拟磁盘容量。以 VMware 为例:

  1. 关闭虚拟机(部分平台支持在线扩容)
  2. 编辑虚拟机设置,将磁盘容量从原来的 50GB 扩展到 100GB
  3. 启动虚拟机

扩展后,操作系统层面不会自动识别新增的空间,需要手动操作。

确认当前磁盘状态

# 查看块设备信息
lsblk

# 查看磁盘分区表
fdisk -l /dev/sda

# 查看PV/VG/LV状态
pvdisplay
vgdisplay
lvdisplay

假设当前磁盘 /dev/sda 有一个分区 /dev/sda1,PV 为 /dev/sda1,VG 名为 centos,LV 名为 root,挂载点为 /。

如何查看 Red Hat 和 Debian 服务器的 crontab 日志

定时任务跑没跑、有没有报错,第一件事就是翻日志。但 Red Hat 和 Debian 两家的 cron 日志不在同一个位置,刚接触服务器的人很容易找不到。这篇文章把两边的查看方法、日志格式、和日志为空时的排查步骤都列出来。

Red Hat 系列(RHEL / CentOS / Fedora)

Red Hat 系的 cron 守护进程叫 crond(来自 cronie 包),日志默认写在 /var/log/cron。

直接看:

tail -f /var/log/cron

每条记录长这样:

Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)

CRON[12345] 是 cron 分配的进程 PID,(alice) 是执行任务的用户,CMD (...) 后面就是 crontab 里写的命令。命令执行成功、失败,都会原样记在这里,输出也会一并追加。

如果 /var/log/cron 看不到内容,去系统日志里找:

grep CRON /var/log/messages

Red Hat 系的 rsyslog 会把 cron 消息同时写到 /var/log/messages,两个文件内容基本一致。

systemd 发行版(RHEL 7+、CentOS 7+、Fedora)还可以用 journalctl:

journalctl -u crond --since "1 hour ago"

Debian 系列(Debian / Ubuntu)

Debian 系的 cron 守护进程叫 cron,日志默认写在 /var/log/syslog,不单独存一个 cron 文件。

看 cron 相关的记录:

grep CRON /var/log/syslog

条目格式和 Red Hat 一样,只是容器换成了 syslog:

Mar 21 10:00:01 hostname CRON[12345]: (alice) CMD (/home/alice/backup.sh)

有些 Debian/Ubuntu 系统会把 cron 单独写到 /var/log/cron,取决于 /etc/rsyslog.d/50-default.conf 里 #cron.* /var/log/cron 这行有没有被注释掉。如果注释掉了,cron 消息就只走 syslog;取消注释并重启 rsyslog,就会多出一个独立的 cron 日志文件。

journalctl 同样可用:

journalctl -u cron --since "1 hour ago"

Linux 上添加自定义 CA 证书

当使用内部 CA 签发的证书时,需要将 CA 根证书添加到系统信任存储中,否则 curl、wget、openssl 等工具会报证书错误。

假设证书文件为 my-ca.crt(PEM 格式),以下按发行版说明操作方法。

Linux 笔记本电脑合上盖子不休眠设置

概述

默认情况下,Linux 笔记本电脑在合上盖子时会进入休眠/挂起状态。但在某些场景下,我们希望合上盖子后系统继续运行,例如:

  • 连接外接显示器使用笔记本作为主机
  • 运行下载任务或服务器服务
  • 合盖后继续编译或渲染任务
  • 作为家庭服务器使用

解决方法

通过修改 systemd-logind 配置文件即可实现合盖不休眠。

步骤

1. 编辑配置文件

sudo vi /etc/systemd/logind.conf

2. 修改配置项

找到以下行:

#HandleLidSwitch=suspend

取消注释并修改为:

HandleLidSwitch=ignore

3. 可选:同时配置其他相关选项

# 合上盖子时忽略(不休眠)
HandleLidSwitch=ignore

# 合上盖子并连接电源时忽略
HandleLidSwitchExternalPower=ignore

# 合上盖子并仅使用电池时忽略
HandleLidSwitchDocked=ignore

4. 重启系统或重启 systemd-logind 服务

# 方法一:重启系统
sudo reboot

# 方法二:重启 systemd-logind 服务(无需重启)
sudo systemctl restart systemd-logind