整体架构
这个架构的核心思想是:MinIO 作为对象存储的“前端”,而你的 NAS 仍然是数据的“后端”物理存储。 用户和应用程序只与 MinIO 交互,完全不需要关心文件具体存放在 NAS 的哪个物理路径下。
方案优点
- 协议现代化:将传统的、基于文件系统的访问(如 NFS, SMB)升级为现代的、基于 HTTP 的 S3 API 访问。
- 无需数据迁移:数据仍然存放在 NAS 上,你不需要花费大量时间去拷贝或迁移 TB 级的海量数据。MinIO 直接在 NAS 的文件系统之上运行。
- 统一访问入口:无论你有多少个 NAS 卷或目录,都可以通过 MinIO 的 Bucket(存储桶)来组织和访问,形成一个统一的视图。
- 生态兼容性:几乎所有现代云原生应用、大数据框架、备份工具都原生支持 S3 协议,可以无缝对接。
- 高性能:MinIO 本身是为高性能而设计的,可以直接利用 NAS 的硬件性能。
第一步:准备工作
- 一台服务器/虚拟机:你需要一台 Linux 服务器来运行 MinIO。这台服务器必须能够高速挂载(mount)你的 NAS 目录。这台服务器的 CPU 和内存资源会影响 MinIO 的性能,但对于一般的文件服务,配置要求不高(例如 2核4G 内存即可起步)。我们称这台服务器为 “MinIO Server”。
- 网络连接:确保 MinIO Server 和 NAS 之间有高速、低延迟的网络连接(例如,千兆或万兆以太网)。
- NAS 目录:确定你要提供为对象存储的 NAS 上的一个或多个目录。例如,
/volume1/data
。
第二步:在 MinIO Server 上挂载 NAS 目录
这是最关键的一步。你必须将 NAS 的共享目录挂载到 MinIO Server 的本地文件系统上。
假设你的 NAS IP 是 192.168.1.100
,共享的目录是 shared_data
,你希望将它挂载到 MinIO Server 的 /mnt/nas_data
目录。
使用 NFS 挂载(推荐)
-
在 NAS 上:确保 NFS 服务已开启,并且
shared_data
目录已经通过 NFS 共享出去,同时授权 MinIO Server 的 IP (192.168.1.50
假设) 有读写权限。 -
在 MinIO Server 上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 1. 安装 NFS 客户端
sudo apt-get update
sudo apt-get install -y nfs-common
# 2. 创建本地挂载点
sudo mkdir -p /mnt/nas_data
# 3. 手动挂载进行测试
# -o nfsvers=4 指定版本,可根据你的NAS调整
sudo mount -t nfs 192.168.1.100:/shared_data /mnt/nas_data
# 4. 验证挂载是否成功
df -h
# 你应该能看到类似下面的一行
# 192.168.1.100:/shared_data 50T 10T 40T 20% /mnt/nas_data
# 5. (重要) 设置开机自动挂载,防止服务器重启后服务失效
# 编辑 /etc/fstab 文件
sudo nano /etc/fstab
# 在文件末尾添加一行 (使用 nofail 选项防止NAS故障导致服务器无法启动)
192.168.1.100:/shared_data /mnt/nas_data nfs defaults,nofail 0 0
第三步:使用 Docker Compose 部署 MinIO
使用 Docker Compose 是部署和管理 MinIO 最简单、最可靠的方式。
-
在 MinIO Server 上安装 Docker 和 Docker Compose。
1
2
3
4
5
6# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 安装 Docker Compose
sudo apt-get install -y docker-compose -
创建一个工作目录并编写
docker-compose.yml
文件。1
2
3mkdir minio-deployment
cd minio-deployment
nano docker-compose.yml -
将以下内容粘贴到
docker-compose.yml
文件中:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38version: '3.7'
services:
minio:
# 使用官方 MinIO 镜像
image: minio/minio:latest
container_name: local-oss-server
# 定义环境变量 (请务必修改密码)
environment:
# MinIO 的登录 Access Key (用户名)
MINIO_ROOT_USER: minioadmin
# MinIO 的登录 Secret Key (密码, 至少8位)
MINIO_ROOT_PASSWORD: VERY_SECRET_PASSWORD_CHANGE_ME
# volumes 卷挂载是核心
volumes:
# 将我们刚刚挂载的 NAS 目录,映射到 MinIO 容器内部的 /data 目录
- /mnt/nas_data:/data
- /mnt/nas:/data2
# ports 端口映射
ports:
# 9000 端口是 S3 API 的访问端口
- "9000:9000"
# 9001 端口是 MinIO Web 控制台的访问端口
- "9001:9001"
# command 命令
# 告诉 MinIO 启动一个服务器,并使用容器内的 /data 目录作为存储根目录
command: server /data /data2 --console-address ":9001"
# 健康检查,确保服务正常运行
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3 -
启动 MinIO 服务:
1
docker-compose up -d
第四步:验证和使用
现在,你的本地 OSS 服务已经搭建完成并开始运行了!
-
访问 Web 控制台:
- 在浏览器中打开
http://<MinIO_Server_IP>:9001
。 - 使用你在
docker-compose.yml
中设置的MINIO_ROOT_USER
(minioadmin) 和MINIO_ROOT_PASSWORD
登录。
- 在浏览器中打开
-
查看数据:
- 登录后,你会看到 MinIO 的界面。点击 “Buckets”(存储桶)。
- 你会惊喜地发现,你在 NAS 目录
/mnt/nas_data
下的所有一级子目录,都已经自动变成了 MinIO 的 Buckets! - 例如,如果你的 NAS 目录结构是:
1
2
3
4
5
6/mnt/nas_data/
├── images/
│ ├── cat.jpg
│ └── dog.png
└── videos/
└── movie.mp4 - 那么在 MinIO 控制台里,你就会看到两个 bucket:
images
和videos
。你可以直接点击进入并管理里面的文件。
-
使用 S3 API 访问:
- Endpoint (服务地址):
http://<MinIO_Server_IP>:9000
- Access Key:
minioadmin
- Secret Key:
VERY_SECRET_PASSWORD_CHANGE_ME
- 你可以使用任何支持 S3 的客户端工具(如
s3cmd
,mc
, AWS SDK)来连接和操作你的数据。
使用 MinIO Client (mc) 的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 1. 下载 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# 2. 配置一个别名,指向你的本地 OSS
mc alias set local-oss http://<MinIO_Server_IP>:9000 minioadmin VERY_SECRET_PASSWORD_CHANGE_ME
# 3. 列出所有的 bucket (即 NAS 上的一级目录)
mc ls local-oss
# 4. 列出 images bucket 里的所有文件
mc ls local-oss/images
# 5. 上传一个新文件到 videos bucket
mc cp my_new_video.mp4 local-oss/videos
# 执行后,你会在 NAS 的 /mnt/nas_data/videos/ 目录下看到 my_new_video.mp4 文件 - Endpoint (服务地址):
问题
- 重启后残留文件清理
1 | sudo rm -rf .minio.sys |
总结
通过 NAS 挂载 + MinIO Docker 部署 这个简单的两步组合,你成功地将传统的 NAS 文件存储“包装”成了一个功能强大、接口标准、易于扩展的本地对象存储服务。这个方案兼具了 NAS 的大容量存储成本优势和 OSS 的现代化接口优势,是盘活存量数据资产的绝佳实践。