用 Debian 12 从零自建 NAS:命令行路线的完整实践
一、为什么要自己搭
看到这里你可能会问:既然有 Unraid、TrueNAS、OMV 这些现成方案,为什么要自己从命令行搭?
自建的价值在于:
- 完全可控。每一个组件是什么、怎么跑的,你都清楚
- 资源占用最低。没有 Web 界面、没有后台服务,2GB 内存的老机器也能跑得飞快
- 学到真东西。出了问题知道去哪查,而不是对着图形界面干瞪眼
- 想加什么加什么。不受限于任何系统的插件生态
代价是没有图形界面,全程命令行,而且所有维护工作都要自己来。
如果你愿意花两小时动手,换来的是一台完全属于自己的、能跑五年不用操心的存储服务器。

二、安装 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 - Linux:
smbclient -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_Ct、Current_Pending_Sector、UDMA_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 是怎么工作的,或者手上有一台性能羸弱的老机器想榨干它的价值,命令行自建是最扎实的一条路。