Skip to main content

用于树莓派的简单 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"
    }
}

安装

  1. 先决条件
    • 安装了 pi OS 的树莓派 pi4(应该与 pi3 一起使用)
    • 2 个 USB3 磁盘(可能需要电源,因为 Pi 无法启动 2 * 2.5 个磁盘)
    • 在 /etc/fstab 中安装磁盘并配置挂载点
    • 具有管理员访问权限的 AWS 账户
  2. 安装
    • 从 Pypi 安装 naspi:
      pip3 install 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 查看哈希

已上传 source

内置分布

naspi-0.1.9.3-py3-none-any.whl (10.3 kB 查看哈希

已上传 py3