目录

基于Ubuntu/Debian Server定制自己的nas系统【一】

关键字 nas,ubuntu,linux,debian,samba,netatalk

使用 ubuntu server 做 NAS 有好几年了,在这里记录一下经验,debian 也适用, 。我的 NAS 主要部署了samba, netatalk, aria2, qbittorrent, frp这些服务,其他的比如 seafile 之类的一般使用 docker 部署。 此博文主要面向习惯使用命令行且有一定 linux 使用经验的用户,适用于 ubuntu/debian 系统(其他发行版也可以参考),x86 和 arm 架构。

磁盘相关

我习惯使用 lvm 管理分区,lvm 卷操作起来与磁盘物理分区类似,只不过使用 lvm 挂载时可以不使用 UUID 标记磁盘分区,直接使用 lvm 标记分区,此处不过多介绍。

我的 fstab 中数据磁盘分区设置如下

1
2
/dev/lomotNasVg0/lomotNasLv0 /storage/pool0 ext4 defaults,nofail,noatime 0 1
/dev/lomotNasVg0/lomotNasLv1 /storage/pool1 ext4 defaults,nofail,noatime 0 1

文件结构

从上面的 fstab 可以看到我把两个分区挂载在/storage/pool0, /storage/pool1上面,此外我还新建了一个目录/nas,将/storage/pool*/...中的项目链接进来

1
2
3
4
5
6
7
8
lomot-nas /nas ᐅ ls -Alh
lrwxrwxrwx 1 root root 21 Apr 18 20:48 backup -> /storage/pool0/backup
lrwxrwxrwx 1 root root 20 Apr 18 20:48 iscsi -> /storage/pool0/iscsi
lrwxrwxrwx 1 root root 21 Apr 18 20:48 script -> /storage/pool0/script
lrwxrwxrwx 1 root root 27 Apr 18 20:48 seafile-data -> /storage/pool0/seafile-data
lrwxrwxrwx 1 root root 23 Apr 18 21:49 sp-lomot -> /storage/pool0/sp-lomot
lrwxrwxrwx 1 root root 23 Apr 18 21:50 sp-share -> /storage/pool0/sp-share
lrwxrwxrwx 1 root root 27 Apr 18 20:48 timeCapsule -> /storage/pool1/timeCapsule/
1
2
# 链接命令 示例
ln -s /storage/pool0/sp-lomot /nas/sp-lomot/

用户

大部分专用 NAS 系统都有完善的用户权限分离管理方案,但是手动管理太多用户会比较麻烦,我的 NAS 上主要分了三个用户

1
2
3
4
lomot -- 自己(这个是我的网名),有sudo权限
share -- 分享文件给别人使用时使用的用户
www-data -- nginx, php等web服务使用的用户
# 考虑到安全性,不推荐使用root用户做文件共享

Samba

samba 算是个人 NAS 必装服务了,甚至有时候只有个 samba 也够用了。

安装

1
apt install samba

配置

1
2
3
4
# 添加samba用户,此用户在系统中也必须存在
smbpasswd -a lomot
smbpasswd -a share
# 这里分了两个用户,主要考虑到可能给别人使用的情况,自己专用的时候不需要share用户

编辑/etc/samba/smb.conf 文件,在尾部添加下面内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[lomot]
    path = /nas/sp-lomot
    read only = no
    public    = no
    create mode = 0640
    force create mode = 0640
    directory mode = 0750
    force directory mode = 0750
    valid users = lomot

[share]
    path = /nas/sp-share
    public = yes
    writable = yes
    available = yes
    browseable = yes
    valid users = share, lomot
    create mode = 0664
    force create mode = 0664
    directory mode = 0775
    force directory mode = 0775

上面的设置开了两个共享文件夹,第一个文件夹只允许用户 lomot 访问,第二个文件夹允许 share 和 lomot 访问。配置文件经供参考。

1
2
3
4
# 重启samba
systemctl restart smbd.service
# 允许开机自启
systemctl enable smbd.service

Netatalk

netatalk 主要用做 time machine 备份 mac 设备

安装

ubuntu18.04 提供的是 2.x 版本,而 debian 提供的是 3.x 的版本,这两个版本配置文件不通用。建议使用 3.x 版本,我在 ubuntu 上使用的是自己编译的 netatalk3.1.11,我之前写过一篇博客有相关介绍如何编译安装 netatalk3 , 实在不行使用 netatalk2 也可以

1
2
3
4
5
6
ubuntu ~ ᐅ sudo apt search netatalk
Sorting... Done
Full Text Search... Done

netatalk/bionic-security,bionic-updates 2.2.6-1ubuntu0.18.04.2 amd64
  AppleTalk user binaries
1
2
3
debian /nas ᐅ sudo apt info netatalk
Package: netatalk
Version: 3.1.12~ds-3
1
2
# 安装netatalk
sudo apt install netatalk

配置

debian buster 使用 apt 安装的 netatalk3 配置文件为/etc/netatalk/afp.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Global]
  mimic model = TimeCapsule6,106
  log level = default:warn
  log file = /var/log/afpd.log
  spotlight = no

[TimeMachine]
  path = /nas/timeCapsule #目录
  valid users = lomot #用户
  time machine = yes
  vol size limit = 3000000 # 限制大小300G

ubuntu 上的 netatalk2 我在很早以前用过,配置文件为/etc/netatalk/AppleVolumes.default

1
2
3
4
## 注释掉这行
# ~/    "Home Directory"
## 添加下面这行
/nas/timeCapsule "TimeCapsule" options:tm
1
2
3
4
# 重启netatalk
systemctl restart netatalk.service
# 允许开机自启
systemctl enable netatalk.service

Avahi

还是 mac 用户需要使用的服务,Avahi 主要起局域网广播作用,让 mac 能自动搜索到 samba 和 netatalk 服务

安装

1
apt install avahi-daemon

配置

/etc/avahi/services下添加服务对应的文件即可 netatalk afp: /etc/avahi/services/afpd.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">TimeCapsule</name>
    <service>
        <type>_afpovertcp._tcp</type>
        <port>548</port>
    </service>
    <service>
        <type>_device-info._tcp</type>
        <port>0</port>
        <txt-record>model=Xserve</txt-record>
    </service>
</service-group>

samba: /etc/avahi/services/smbd.service

1
2
3
4
5
6
7
8
9
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">%h</name>
    <service>
        <type>_smb._tcp</type>
        <port>445</port>
    </service>
</service-group>
1
2
3
4
# 重启avahi
systemctl restart avahi-daemon.service
# 允许开机自启
systemctl enable avahi-daemon.service

相关系列