技术笔记

用 Debian 12 从零自建 NAS:命令行路线的完整实践

yaobingbin yaobingbin · · 约 14 分钟 · 0 条评论

一、为什么要自己搭

看到这里你可能会问:既然有 Unraid、TrueNAS、OMV 这些现成方案,为什么要自己从命令行搭?

自建的价值在于:

  • 完全可控。每一个组件是什么、怎么跑的,你都清楚
  • 资源占用最低。没有 Web 界面、没有后台服务,2GB 内存的老机器也能跑得飞快
  • 学到真东西。出了问题知道去哪查,而不是对着图形界面干瞪眼
  • 想加什么加什么。不受限于任何系统的插件生态

代价是没有图形界面,全程命令行,而且所有维护工作都要自己来。

如果你愿意花两小时动手,换来的是一台完全属于自己的、能跑五年不用操心的存储服务器。

用 Debian 12 从零自建 NAS:命令行路线的完整实践

二、安装 Debian 12

下载

去 Debian 官网下载 netinst(网络安装)镜像,只有几百 MB。

安装

U 盘启动,选 Install(文本模式,不要图形安装)。

关键步骤:

1. 语言:English(控制台中文显示会有问题) 2. 地区:Other → Asia → China 3. 软件源:选国内镜像(清华、阿里云都行),速度会快很多 4. root 密码:设置一个强密码 5. 新建用户:创建一个普通用户,用于日常 SSH 登录 6. 分区

  • 新手选 Guided - use entire disk
  • 想手动控制:分 /(30GB)、swap(内存 1-2 倍)、/home(剩余)
  • 只选系统盘

7. 软件选择全部取消勾选,只保留「standard system utilities」和「SSH server」。不要装桌面环境,服务器不需要

装完重启,拔掉 U 盘。

三、基础配置

登录并更新

用普通用户 SSH 登录,切到 root:

su -

更新系统:

apt update && apt upgrade -y

配置静态 IP

编辑 /etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug enp1s0
iface enp1s0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    dns-nameservers 192.168.1.1 223.5.5.5

enp1s0 换成你的网卡名(用 ip a 查),改成你自己的 IP。

重启网络:

systemctl restart networking

注意:改静态 IP 时如果配错,可能会失联。建议在本地显示器上操作,或者确保还有别的接入方式。

安装常用工具

apt install -y vim htop curl wget git sudo net-tools smartmontools lm-sensors

把普通用户加入 sudo

usermod -aG sudo 你的用户名

登出重新登录生效。

加固 SSH

编辑 /etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication yes
Port 22

至少把 root 登录关掉。改完重启服务:

systemctl restart sshd

更安全的做法是用密钥登录、禁用密码,但家庭环境密码登录也够用(前提是密码够强)。

四、挂载数据盘

查看硬盘

lsblk -f

假设数据盘是 /dev/sdb,还没有分区。

分区与格式化

用 parted(支持 GPT,适合大容量盘):

parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary ext4 0% 100%
(parted) quit

格式化:

mkfs.ext4 /dev/sdb1 -L data1

-L data1 是给分区打标签,方便识别。

创建挂载点并挂载

mkdir -p /mnt/data1
mount /dev/sdb1 /mnt/data1

设置开机自动挂载

一定要用 UUID,不要用 /dev/sdb1,设备名可能会变。

查 UUID:

blkid /dev/sdb1

编辑 /etc/fstab,加一行:

UUID=查到的UUID  /mnt/data1  ext4  defaults,noatime,nofail  0  2

nofail 很重要 —— 硬盘不在时系统照样能启动,不会因为一块盘没插就进不了系统。

测试配置是否正确:

mount -a
echo $?

返回 0 说明没问题。

创建目录结构

mkdir -p /mnt/data1/{media,backup,download,docker}

五、配置 Samba 共享

安装

apt install -y samba

创建用户

Samba 用独立的用户数据库,但用户必须是系统已存在的用户。

先建系统用户(如果还没有):

useradd -m -s /bin/bash nasuser

设置 Samba 密码:

smbpasswd -a nasuser

配置共享

编辑 /etc/samba/smb.conf,在文件末尾加:

[media]
   comment = Media Files
   path = /mnt/data1/media
   browseable = yes
   read only = no
   guest ok = no
   valid users = nasuser
   create mask = 0664
   directory mask = 0775

[backup]
   comment = Backup
   path = /mnt/data1/backup
   browseable = yes
   read only = no
   guest ok = no
   valid users = nasuser

设置目录权限

chown -R nasuser:nasuser /mnt/data1/media
chmod -R 775 /mnt/data1/media

重启服务

systemctl restart smbd nmbd
systemctl enable smbd nmbd

从客户端访问

  • Windows:文件资源管理器输入 \192.168.1.10
  • macOS:访达 → 前往 → 连接服务器 → smb://192.168.1.10
  • Linuxsmbclient -L 192.168.1.10 -U nasuser

开启 macOS 兼容性(可选)

如果 Mac 访问有问题,在 smb.conf 的 global 段加:

vfs objects = fruit streams_xattr
fruit:metadata = stream

六、配置备份

rsync 本地备份

把重要数据同步到另一块盘或者外接硬盘:

rsync -av --delete /mnt/data1/media/ /mnt/backup/media/

定时自动备份

用 cron。执行 crontab -e,加入:

0 3 * * * rsync -av --delete /mnt/data1/media/ /mnt/backup/media/ >> /var/log/rsync.log 2>&1

意思是每天凌晨 3 点同步一次。

远程备份

如果要备份到另一台机器(异地备份):

rsync -avz -e ssh /mnt/data1/media/ user@远程IP:/backup/media/

配合 SSH 密钥免密登录,可以做成全自动。

快照式备份(推荐)

普通 rsync 会覆盖旧文件,如果源文件被误删或加密,备份也跟着没了。推荐用 rsync 的 --link-dest 做增量快照:

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_ROOT=/mnt/backup/snapshots
TARGET=$BACKUP_ROOT/$DATE
LAST=$(ls -1d $BACKUP_ROOT/* 2>/dev/null | tail -1)

mkdir -p $TARGET

if [ -n "$LAST" ]; then
    rsync -av --delete --link-dest=$LAST /mnt/data1/media/ $TARGET/
else
    rsync -av /mnt/data1/media/ $TARGET/
fi

--link-dest 让没变化的文件硬链接到上一次的备份,几乎不占额外空间,但每次备份都是一个完整可访问的目录。存到脚本里,加到 crontab,就是一个简易版 Time Machine。

七、安装 Cockpit(可选的可视化)

命令行虽然高效,但看个系统状态还要敲命令确实麻烦。Cockpit 是个轻量的 Web 管理界面,占用很低。

apt install -y cockpit
systemctl enable --now cockpit.socket

浏览器访问 https://IP:9090,用系统账号登录。

能看到:CPU、内存、磁盘、网络实时状态、系统日志、服务管理、终端。

装个硬盘监控插件:

apt install -y cockpit-storaged

八、安装 Docker

用官方源安装

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

配置用户权限

usermod -aG docker 你的用户名

配置镜像加速

国内拉镜像慢,编辑 /etc/docker/daemon.json

{
  "registry-mirrors": ["https://你的镜像加速地址"]
}

重启 Docker:

systemctl restart docker

跑第一个容器

创建 /mnt/data1/docker/jellyfin/docker-compose.yml

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/data1/media:/media
    restart: unless-stopped

启动:

cd /mnt/data1/docker/jellyfin
docker compose up -d

九、监控与维护

硬盘健康检查

安装 smartmontools 后,手动检查:

smartctl -a /dev/sdb

关注 Reallocated_Sector_CtCurrent_Pending_SectorUDMA_CRC_Error_Count 这几个指标,有增长就说明硬盘在出问题。

设置定期检查,编辑 /etc/smartd.conf 或者用 cron:

echo "0 4 * * 0 /usr/sbin/smartctl -t short /dev/sdb" | crontab -

温度监控

apt install -y lm-sensors
sensors-detect
sensors

自动安全更新

apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

选择 Yes,系统会自动安装安全补丁。

查看磁盘使用

df -h
du -sh /mnt/data1/*

十、长期维护要点

1. 定期检查日志

journalctl -p err -b

看本次启动的错误日志。

2. 监控磁盘空间

快满时提前处理。可以装 ncdu 找出占空间的大文件:

apt install -y ncdu
ncdu /mnt/data1

3. 测试备份能不能恢复

没验证过的备份等于没有备份。每隔几个月,随机抽几个文件从备份里恢复一次,确认流程走得通。

4. 记录你的配置

把关键配置文件(fstab、smb.conf、crontab、docker-compose.yml)备份到一起,最好写成文档。半年后你要改配置时,会感谢现在的自己。

5. 保持系统精简

不要装一堆用不上的服务。每多一个服务,就多一个需要维护和关注安全更新的东西。

十一、常见问题

Q:SSH 连不上?

确认 SSH 服务是否运行(systemctl status sshd);确认防火墙;确认 IP 是否变化(如果没配静态 IP)。

Q:Samba 访问被拒绝?

检查三处:smb.conf 里的 valid users;Samba 用户是否创建(smbpasswd -a);目录的 Linux 权限是否正确。

Q:硬盘挂载后重启失效?

fstab 配置有问题。用 blkid 确认 UUID 是否正确,执行 mount -a 看有没有报错。

Q:Docker 容器访问不了硬盘?

检查卷映射路径是否正确;检查目录权限(容器内的用户 ID 可能和你宿主机不一致)。

Q:系统越来越慢?

看内存和 swap 使用情况(htop)。如果 swap 一直在用,说明内存不够。检查是不是有服务在大量读写硬盘。

Q:想加 RAID 怎么办?

Debian 上用 mdadm。但自建 NAS 一般建议:单盘 + 严格备份,比软 RAID 更省心。真要冗余,考虑从一开始就上 TrueNAS 或 Unraid。

十二、小结

自建 NAS 的过程,本质上就是把「文件服务」这件事拆成几个独立的小问题,然后一个个解决:怎么挂盘、怎么共享、怎么备份、怎么监控。

这套方案的优势是透明和可控 —— 没有黑盒,每个环节你都知道它在做什么。一台装好的 Debian NAS,资源占用极低,稳定性极好,可以连续运行几年不用重启。

它不适合所有人。如果你想要开箱即用的图形界面和插件生态,前面介绍的 Unraid、OMV、飞牛 OS 会更省事。但如果你想真正理解 NAS 是怎么工作的,或者手上有一台性能羸弱的老机器想榨干它的价值,命令行自建是最扎实的一条路。

评论经后台审核通过后显示 · 请勿发布广告、外链或无关内容

发表评论

邮箱地址不会被公开。填写昵称与邮箱后方可评论。