К основному содержанию
скилл CX Codex

nfs-storage — скилл для Claude Code: NFS-серверы и клиенты

Скилл для настройки NFS: экспорт каталогов на сервере, монтирование на клиентах, autofs и правка параметров.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill nfs-storage -a claude-code
Открыть на GitHub

Что делает nfs-storage

Скилл ведёт агента по настройке NFS-сервера и клиентов на Linux. Внутри — установка nfs-kernel-server или nfs-utils, правка /etc/exports, применение изменений через exportfs -ra, правила фаервола для UFW и firewalld. Для клиента описаны ручное монтирование, записи в /etc/fstab и autofs с картами /etc/auto.master и /etc/auto.nfs.

Отдельные разделы посвящены опциям экспорта и монтирования: rw и ro, sync и async, root_squash, no_root_squash, fsid=0 для псевдокорня NFSv4, а на клиенте — hard, intr, размеры буферов rsize и wsize, nconnect. Есть разбор безопасности через Kerberos и интеграции с Kubernetes для ReadWriteMany.

Заранее понадобится сеть между машинами и открытый порт 2049 для NFSv4. Для Kerberos нужны krb5-user и работающий KDC — без него этот блок не проверить. Опция no_root_squash даёт удалённому root права root на сервере, так что её стоит включать только там, где вы контролируете всех клиентов.

Какие задачи решает

  • открыть общий каталог между несколькими Linux-серверами
  • подключить NFS-шару к контейнерам в Kubernetes
  • свести домашние каталоги на один сервер
  • настроить монтирование по требованию через autofs
  • проверить и применить изменения в /etc/exports

Примеры запросов агенту

  • настрой NFS-сервер и открой /data для подсети 10.0.0.0/24
  • добавь монтирование шары в /etc/fstab с опциями hard,intr
  • сделай autofs-карту для /mnt/nfs с таймаутом 300

Как установить nfs-storage

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill nfs-storage -a claude-code

2Вручную: положить файлы

~/.claude/skills/nfs-storage/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nfs-storage/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о nfs-storage

Как установить nfs-storage в Claude?

Выполните npx skills add BagelHole/DevOps-Security-Agent-Skills --skill nfs-storage -a claude-code. После этого файл скилла окажется в ~/.claude/skills/nfs-storage/SKILL.md.

Что делает nfs-storage?

Помогает агенту настроить NFS-сервер и клиентов: экспорт каталогов, монтирование, autofs, Kerberos и подключение шары к Kubernetes.

Что нужно для работы скилла?

Сетевой доступ между сервером и клиентами и открытый порт 2049 для NFSv4. Для раздела с Kerberos понадобятся krb5-user и работающий KDC.

Исходный текст

SKILL.md · MIT
---
name: nfs-storage
description: Configure NFS servers and clients. Implement network file sharing for Linux systems. Use when setting up shared storage.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# NFS Storage

Configure NFS servers and clients for network file sharing across Linux systems. Covers NFSv4 server setup, export options, client mounting, autofs for on-demand mounts, Kerberos security, performance tuning, and Kubernetes integration.

## When to Use

- Sharing directories between multiple Linux servers (web farms, build clusters)
- Providing shared storage for containerized workloads (Kubernetes ReadWriteMany)
- Centralizing home directories or application data across a fleet
- Setting up a development environment with shared project files
- Migrating from local storage to network-attached storage

## Prerequisites

- NFS server: `nfs-kernel-server` (Debian/Ubuntu) or `nfs-utils` (RHEL/CentOS)
- NFS client: `nfs-common` (Debian/Ubuntu) or `nfs-utils` (RHEL/CentOS)
- Network connectivity between server and clients (TCP/UDP 2049 for NFSv4)
- Firewall rules allowing NFS traffic
- For NFSv4 Kerberos: `krb5-user` and a functioning KDC

## NFS Server Setup

### Installation

```bash
# Debian / Ubuntu
apt update && apt install -y nfs-kernel-server

# RHEL / CentOS
dnf install -y nfs-utils

# Enable and start the NFS server
systemctl enable --now nfs-server

# Verify NFS is running
systemctl status nfs-server
rpcinfo -p | grep nfs
```

### Export Configuration (/etc/exports)

```bash
# /etc/exports
# Syntax: <directory> <client-spec>(options)

# Share /data to a specific subnet with read-write access
/data 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)

# Share /shared read-only to everyone
/shared *(ro,sync,no_subtree_check)

# Share /home to specific hosts
/home server01.example.com(rw,sync,no_subtree_check)
/home server02.example.com(rw,sync,no_subtree_check)

# Share /var/nfs/projects with root squash (default, map root to nobody)
/var/nfs/projects 10.0.0.0/24(rw,sync,no_subtree_check,root_squash)

# NFSv4 pseudo-root export (recommended for NFSv4)
/srv/nfs 10.0.0.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
/srv/nfs/data 10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs/shared 10.0.0.0/24(ro,sync,no_subtree_check)
```

### Export Options Explained

| Option | Description |
|---|---|
| `rw` | Read-write access |
| `ro` | Read-only access |
| `sync` | Write data to disk before replying (safe, slower) |
| `async` | Reply before data is written to disk (fast, risk of corruption) |
| `no_subtree_check` | Disable subtree checking (improves reliability) |
| `root_squash` | Map remote root (UID 0) to `nobody` (default, more secure) |
| `no_root_squash` | Allow remote root to act as root on the server (use cautiously) |
| `all_squash` | Map all remote UIDs/GIDs to `nobody` |
| `anonuid=1000` | Map anonymous users to a specific UID |
| `anongid=1000` | Map anonymous groups to a specific GID |
| `crossmnt` | Allow clients to traverse into sub-mounts |
| `fsid=0` | Mark as the NFSv4 pseudo-root |

### Applying Export Changes

```bash
# Apply changes to exports (no server restart needed)
exportfs -ra

# Show current exports
exportfs -v

# Export a new directory on the fly (temporary, not persistent)
exportfs -o rw,sync,no_subtree_check 10.0.0.0/24:/tmp/share

# Unexport a directory
exportfs -u 10.0.0.0/24:/tmp/share
```

### Server Firewall Configuration

```bash
# UFW (Ubuntu)
ufw allow from 10.0.0.0/24 to any port nfs
ufw allow from 10.0.0.0/24 to any port 111   # rpcbind (NFSv3)

# firewalld (RHEL/CentOS)
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload

# NFSv4 only needs TCP 2049 (no rpcbind or mountd)
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --reload
```

## NFS Client Configuration

### Manual Mounting

```bash
# Install NFS client
apt install -y nfs-common        # Debian/Ubuntu
dnf install -y nfs-utils         # RHEL/CentOS

# Discover exports from the server
showmount -e nfs-server.example.com

# Mount an NFS share manually
mkdir -p /mnt/data
mount -t nfs nfs-server.example.com:/data /mnt/data

# Mount with specific NFS version and options
mount -t nfs -o vers=4.2,tcp,hard,intr nfs-server.example.com:/data /mnt/data

# Verify the mount
mount | grep nfs
df -hT /mnt/data

# Unmount
umount /mnt/data
```

### Persistent Mounts via /etc/fstab

```bash
# /etc/fstab entries for NFS

# Basic NFSv4 mount
nfs-server.example.com:/data  /mnt/data  nfs4  defaults,_netdev  0  0

# Mount with performance and reliability options
nfs-server.example.com:/data  /mnt/data  nfs4  hard,intr,rsize=1048576,wsize=1048576,timeo=600,retrans=3,_netdev  0  0

# Read-only mount
nfs-server.example.com:/shared  /mnt/shared  nfs4  ro,_netdev  0  0

# Mount with specific UID/GID mapping (useful for containers)
nfs-server.example.com:/data  /mnt/data  nfs4  defaults,_netdev,uid=1000,gid=1000  0  0
```

```bash
# Mount all fstab entries
mount -a

# Test fstab entry without actually mounting
mount --fake -a -v
```

### Mount Options Explained

| Option | Description |
|---|---|
| `hard` | Retry NFS requests indefinitely (recommended for data integrity) |
| `soft` | Return error after `retrans` retries (risk of data corruption) |
| `intr` | Allow interruption of hard-mounted NFS requests |
| `rsize=1048576` | Read buffer size in bytes (1 MB, max for NFSv4) |
| `wsize=1048576` | Write buffer size in bytes (1 MB) |
| `timeo=600` | Timeout in tenths of a second (60 seconds) |
| `retrans=3` | Number of retries before error (soft) or message (hard) |
| `_netdev` | Wait for network before mounting (critical for boot) |
| `noatime` | Do not update access time (improves performance) |
| `nconnect=8` | Use multiple TCP connections (kernel 5.3+, improves throughput) |

## Autofs (On-Demand Mounting)

```bash
# Install autofs
apt install -y autofs        # Debian/Ubuntu
dnf install -y autofs        # RHEL/CentOS

# Configure the master map
# /etc/auto.master or /etc/auto.master.d/nfs.autofs
/mnt/nfs  /etc/auto.nfs  --timeout=300
```

### /etc/auto.nfs

```text
# Format: mount-point  options  location
# Mounts will appear under /mnt/nfs/<mount-point>

data    -rw,hard,intr,rsize=1048576,wsize=1048576    nfs-server.example.com:/data
shared  -ro,hard,intr                                  nfs-server.example.com:/shared
home    -rw,hard,intr                                  nfs-server.example.com:/home/&

# Wildcard: mount any subdirectory from the server automatically
# /etc/auto.master entry:  /mnt/nfs  /etc/auto.nfs
*       -rw,hard,intr    nfs-server.example.com:/srv/nfs/&
```

```bash
# Enable and start autofs
systemctl enable --now autofs

# Test: simply cd into the mount point and it appears
ls /mnt/nfs/data    # Triggers auto-mount
# The share unmounts automatically after the timeout (300 seconds idle)

# Check autofs status
systemctl status autofs
automount -v    # Verbose debugging mode (foreground)
```

## Performance Tuning

### Server-Side Tuning

```bash
# Increase the number of NFS daemon threads (default is 8)
# /etc/default/nfs-kernel-server (Debian) or /etc/sysconfig/nfs (RHEL)
RPCNFSDCOUNT=32

# Or set at runtime
echo 32 > /proc/fs/nfsd/threads

# Restart NFS to apply
systemctl restart nfs-server

# Tune NFS server read/write sizes in sysctl
# These are auto-negotiated but can be adjusted
echo 1048576 > /proc/fs/nfsd/max_block_size

# Kernel network buffer tuning (see performance-tuning skill)
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
```

### Client-Side Tuning

```bash
# Use large read/write buffer sizes in mount options
mount -t nfs4 -o rsize=1048576,wsize=1048576,noatime nfs-server:/data /mnt/data

# Use multiple TCP connections (Linux kernel 5.3+)
mount -t nfs4 -o nconnect=8 nfs-server:/data /mnt/data

# Check current mount options and NFS statistics
nfsstat -c                    # Client NFS statistics
nfsstat -s                    # Server NFS statistics
mountstats /mnt/data          # Detailed per-mount stats

# Test NFS throughput with dd
dd if=/dev/zero of=/mnt/data/testfile bs=1M count=1024 oflag=direct
dd if=/mnt/data/testfile of=/dev/null bs=1M iflag=direct
rm /mnt/data/testfile

# Test with fio for more realistic workloads
fio --name=nfs-test --directory=/mnt/data --ioengine=libaio --direct=1 \
  --rw=randrw --bs=4k --numjobs=4 --size=1G --runtime=60 --group_reporting
```

## Kubernetes NFS Integration

```yaml
# nfs-pv.yaml -- Static PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  nfs:
    server: nfs-server.example.com
    path: /data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  resources:
    requests:
      storage: 100Gi
```

```bash
# For dynamic provisioning, install the NFS CSI driver via Helm
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system
# Then create a StorageClass pointing to your NFS server and share path.
```

## Troubleshooting

| Symptom | Diagnostic Command | Common Fix |
|---|---|---|
| mount: access denied | `showmount -e server`, `exportfs -v` | Check /etc/exports, run `exportfs -ra`, verify subnet |
| mount hangs | `mount -v`, check network | Verify firewall allows TCP 2049; use `bg` mount option |
| Stale file handle | `ls /mnt/data` returns stale error | Unmount and remount: `umount -f /mnt/data && mount -a` |
| Permission denied on files | `ls -la`, check UID mapping | Match UIDs or use `all_squash,anonuid=1000,anongid=1000` |
| Slow NFS performance | `nfsstat -c`, `mountstats /mnt/data` | Increase rsize/wsize, add nconnect=8, tune NFS threads |
| Autofs not mounting | `systemctl status autofs`, `automount -v` | Check /etc/auto.master syntax, verify server is reachable |
| NFSv4 ID mapping wrong | `id username` on both sides | Ensure matching domain in `/etc/idmapd.conf` |
| Boot hangs waiting for NFS | Check fstab options | Add `_netdev` and `bg` options to fstab entry |
| Docker volume mount fails | `docker volume inspect`, `dmesg` | Verify NFS client packages installed on Docker host |

## Related Skills

- `linux-administration` -- Server setup and network configuration
- `block-storage` -- Underlying storage for NFS server data directories
- `performance-tuning` -- Kernel and network tuning for NFS throughput
- `backup-recovery` -- Backing up NFS-hosted data
- `object-storage` -- Alternative storage model for cloud-native workloads

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Похожие скиллы

Всё по теме «DevOps и инфраструктура» →
gke-storage официальный google Скилл помогает настраивать хранилища GKE и создавать PVC для постоянных дисков и Filestore. Пригодится для подготовки томов под stateful-нагрузки. CX Codex 6 506установок gke-storage-troubleshooting официальный google Диагностирует сбои дисков в GKE: ошибки монтирования, проблемы с емкостью узлов и OOM в Cloud Storage FUSE. Пригодится, если поды зависли в ContainerCreating. CX Codex 1 700установок container-escape-techniques yaklang Плейбук по выходу из Docker, LXC и Kubernetes-подов на хост: привилегированный режим, capabilities, docker.sock, cgroup. CX Codex +1 3 600установок troubleshooting-efs aws Скилл разбирает сбои Amazon EFS: не монтируется, таймауты NFS, отказ в доступе, низкая пропускная способность. CX Codex +1 5 900установок vercel-storage официальный Vercel Labs Подсказывает агенту, какое хранилище Vercel выбрать и как его подключить: Blob, Edge Config, Neon Postgres, Upstash Redis. CX Codex GP ChatGPT 6установок windows-app-storage-inspector-cleanup официальный Daniel Scott-Raynsford Анализирует занятое место приложениями Windows и отправляет одобренные файлы очистки в корзину. Пригодится, когда нужно безопасно освободить диск. ★ 40 418звёзд репо

Из того же набора127

gcp-compute Скилл помогает развёртывать виртуальные машины Compute Engine в Google Cloud, собирать группы инстансов и настраивать Spot VM через CLI и Terraform. CX Codex +1 328установок gpu-kubernetes-operations Скилл для работы с GPU-кластерами Kubernetes: планирование подов, MIG-разделение, автоскейлинг и мониторинг через DCGM. CX Codex +1 329установок fedramp-compliance Скилл для команд, которые готовят облачный сервис к FedRAMP: раскладывает требования по уровням воздействия и семьям контролей NIST 800-53. CX Codex +1 328установок llm-app-security Набор проверок и правил для защиты чат-ботов, RAG-систем и AI-функций от инъекций промптов, утечек данных и атак по классификации OWASP LLM Top 10. CX Codex +1 327установок model-serving-kubernetes Разворачивает ML-модели и LLM в Kubernetes через KServe или NVIDIA Triton Inference Server. Помогает настроить канареечный релиз, сплит трафика и автоскейлинг. CX Codex +1 327установок ai-sre-incident-response Скилл для SRE-практик вокруг LLM: падения провайдера, просадка качества, всплеск расходов на токены и срабатывания гардрейлов. CX Codex +1 328установок ai-security-hardening Защищает приложения на базе LLM от prompt injection, утечек данных и атак на цепочку поставок. Пригодится при выводе моделей в прод и подготовке к аудитам SOC2 или ISO 27001. CX Codex +1 326установок block-storage Скилл для работы с блочными устройствами: разметка дисков, LVM, файловые системы, снапшоты и тома AWS EBS. Пригодится, когда нужно расширить раздел на живом сервере. CX Codex +1 327установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой