关键字 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
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
|
相关系列