用于树莓派的简单 NAS
项目描述
简单的 nas-pi
介绍
在具有磁盘冗余 + S3 冰川备份的树莓派上简单实现 NAS。
优点
- 简单:只使用简单的工具,如 rsync
- 可靠性:每个目录使用 rsync 进行本地复制。用于创建场外安全档案的 AWS S3 备份
- 成本:便宜的硬件,s3 glacier deep archive 的成本是每 100GB 每月 0.3 美元
- 易于维护:使用商品硬件:树莓派、USB3 硬盘。发生故障时可轻松更换
- 根据您的需要与您喜欢的工具关联:Plex 媒体服务器、Nextcloud、Samba 共享等...
建筑学
用法
模式
Cli 的不同模式是:
- naspi -c /path/to/conf.json -m init_config
- 初始化一个配置文件
- naspi -c /path/to/conf.json -m synclocal
- 根据本地文件夹配置同步本地文件夹
- naspi -c /path/to/conf.json -m syncs3
- 将本地文件夹同步到 s3 glacier 深度存档
- naspi -c /path/to/conf.json -m 分析
- 提供本地和 s3 复制状态
- naspi -c /path/to/conf.json -m 系统
- 返回系统信息 cpu, ram, temp
- naspi -c /path/to/conf.json -m 备份
- 备份配置文件的备份部分中设置的特定文件或文件夹
- naspi -c /path/to/conf.json -m osbackup
- 将整个 sd 卡备份到 .img.gz 存档文件
状态文件
CLI 的每次运行都会更新您将在工具工作目录中找到的状态文件。它提供有关同步状态、服务器指标、磁盘运行状况和使用情况等的信息。这些文件会定期发送到 AWS,因此可以在出现问题时触发邮件警报。如果未收到文件,也会发送电子邮件警报,这可能意味着 NAS 无法访问。
示例状态文件:
{
"disks": {
"disk-list": [
{
"name": "/disks/disk2",
"occupied_%": "13% ",
"present": true
},
{
"name": "/disks/disk1",
"occupied_%": "13% ",
"present": true
},
{
"name": " /",
"occupied_%": " 46%",
"present": true
}
],
"all_disks_ok": true,
"last_run": "2021-02-10 23:50:01"
},
"local_sync": {
"success": true,
"files_source": 101255,
"files_dest": 101257,
"files_delta": -2,
"locked": false,
"last_started": "2021-02-10 23:14:17",
"last_run": "2021-02-10 23:21:02"
},
"s3_sync": {
"success": true,
"files_source": 23105,
"files_dest": 23105,
"files_delta": 0,
"locked": false,
"last_started": "2021-02-10 17:32:35",
"last_run": "2021-02-10 17:33:25"
},
"server": {
"cpu_%": " 1,4 ",
"ram_Mo": " 508 ",
"temp_c": "50.6'C",
"last_run": "2021-02-10 23:50:02"
}
}
安装
- 先决条件
- 安装了 pi OS 的树莓派 pi4(应该与 pi3 一起使用)
- 2 个 USB3 磁盘(可能需要电源,因为 Pi 无法启动 2 * 2.5 个磁盘)
- 在 /etc/fstab 中安装磁盘并配置挂载点
- 具有管理员访问权限的 AWS 账户
- 安装
- 从 Pypi 安装 naspi:
pip3 install naspi
- 从 Pypi 安装 naspi:
配置 Naspi
- 初始化一个新的配置文件
naspi -c ./naspi_config.json -m init_config
- 配置工具
vi ./naspi_config.json
最初的配置文件是:
{
"disks_list": [],
"folder_to_sync_locally": [],
"folders_to_sync_s3": [],
"naspi_configuration": {
"working_dir": "",
"NUMBER_DAYS_RETENTION": 7,
"MIN_DELAY_BETWEEN_SYNCS_SECONDS": 14400,
"backup": {
"files_to_backup": [],
"backup_location": "",
"os_backup_location": ""
}
}
}
-
将“working_dir”设置为存储 naspi 文件(日志、配置、状态文件)的目录
-
设置“disks_list”:存储数据的磁盘的挂载点,以便对其进行监控
"disks_list": [
"/disks/disk1",
"/disks/disk2"
]
- 按照以下示例设置“folder_to_sync_locally” 。“删除”选项意味着删除也被复制。
"folder_to_sync_locally": [
{
"source_folder": "/disks/disk1/media/photos/",
"dest_folder": "/disks/disk2/media/photos/",
"delete": false
},
{
"source_folder": "/disks/disk1/media/download/",
"dest_folder": "/disks/disk2/media/download/",
"delete": true
}
]
- 设置“folders_to_sync_s3”。删除选项尚未实现
"folders_to_sync_s3": [
{
"source_folder": "/disks/disk1/media/photos/",
"dest_folder": "s3://<bucket-name>/photos",
"exclude": [
"folder-to-exclude"
],
"delete": false
},
{
"source_folder": "/disks/disk1/media/download",
"dest_folder": "s3://<bucket-name>/download",
"delete": false
}
]
- 使用需要备份的文件设置“naspi_configuration”块
"naspi_configuration": {
"working_dir": "/home/pi/naspi",
"NUMBER_DAYS_RETENTION": 7,
"MIN_DELAY_BETWEEN_SYNCS_SECONDS": 14400,
"backup": {
"files_to_backup": [
"/etc/fstab",
"/home/pi",
"/etc/samba/smb.conf"
],
"backup_location": "/disks/disk1/backups/",
"os_backup_location": "/disks/disk1/osbackups/"
}
}
- 设置 crons:naspi CLI 将根据 cron 计划被调用。使用本地用户导出路径以使 naspi 命令可用
crontab -e
11 01 * * * export PATH=/home/pi/.local/bin:$PATH && naspi -c /home/pi/naspi/naspi_config.json -m backup 32 17 * * * export PATH=/home/pi/.local/bin:$PATH && naspi -c /home/pi/naspi/naspi_config.json -m syncs3 06 * * * * export PATH=/home/pi/.local/bin:$PATH && naspi -c /home/pi/naspi/naspi_config.json -m synclocal */10 * * * * export PATH=/home/pi/.local/bin:$PATH && naspi -c /home/pi/naspi/naspi_config.json -m system 11 3 * * 2 export PATH=/home/pi/.local/bin:$PATH && naspi -c /home/pi/nas_monitor/naspi_config.json -m osbackup
在 AWS 账户中部署资源
AWS 中部署了几个资源:S3 存储桶、用户、监控 lambda 函数、用于电子邮件通知的 SNS 主题。
- 在您的 AWS 账户中,具有管理员访问权限:转到cloudformation服务
- 使用模板 aws/deply-naspi.yml 创建一个新堆栈
- 堆栈的参数是:
- NaspiBucketName(必需):存储从 NAS 备份的内容的存储桶名称
- EmailForReceivingAlerts (REQUIRED) : 接收 NAS 警报的电子邮件地址
- MonitoringSchedule :这定义了触发 Naspi 监控功能的时间表。默认值:cron(0 15 ? * * *)
生成访问密钥
AWS 访问密钥将授予 NAS 访问 AWS 账户(S3 存储桶)的权限
- 在您的 AWS 账户中,具有管理员访问权限:转到IAM服务
- 查找用户NasPiUser
- 转到安全凭证,生成访问密钥/密钥对
配置 AWS CLI
- 在∼/.aws/credentials文件
中插入之前获得的访问密钥/密钥:
[default] aws_access_key_id = AKIAJXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXX
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
naspi-0.1.9.3.tar.gz
(12.5 kB
查看哈希)
内置分布
naspi-0.1.9.3-py3-none-any.whl
(10.3 kB
查看哈希)