Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒

一、准备树莓派

  1. 准备系统
    在这里下载最新的镜像,或者在这里下载历史镜像。
    可以选择不带桌面最精简的Lite,这里使用最新的带桌面的with desktop版本。
    建议下载种子,然后使用迅雷等下载工具下载。
    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第1张图片
    下载 Win32 Disk Imager,直接下载即可,安装。
    将SD卡通过读卡器连接到电脑,从下载的文件(.zip)解压出系统(.img),选择后写入,等待5分钟左右。
    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第2张图片
    写入完成后,在boot盘里新建空白文件ssh,不需要后缀,后续SSH连接时使用。
    可以直接右键新建一个TXT文件,重命名为ssh
    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第3张图片
    安全弹出SD卡,将SD卡插到树莓派上。
    插上网线连接到路由器,使用5V 2.5A适配器供电。

  2. 配置网络
    登录路由器管理界面,查看树莓派IP地址。
    在这里插入图片描述
    使用SSH工具连接到树莓派,这里使用MobaXterm。
    默认账户名:pi,密码:raspberry

    pi@raspberrypi:~ $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.103  netmask 255.255.255.0  broadcast 192.168.0.255
            inet6 fe80::d8e:4f58:5590:c47c  prefixlen 64  scopeid 0x20<link>
            ether b8:27:eb:22:30:9f  txqueuelen 1000  (Ethernet)
            RX packets 514  bytes 45984 (44.9 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 198  bytes 36548 (35.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    默认没有打开无线网卡,使用rfkill unblock

    pi@raspberrypi:~ $ rfkill list
    0: phy0: Wireless LAN
            Soft blocked: yes
            Hard blocked: no
    1: hci0: Bluetooth
            Soft blocked: no
            Hard blocked: no
    pi@raspberrypi:~ $ rfkill unblock 0
    pi@raspberrypi:~ $ rfkill list
    0: phy0: Wireless LAN
            Soft blocked: no
            Hard blocked: no
    1: hci0: Bluetooth
            Soft blocked: no
            Hard blocked: no
    pi@raspberrypi:~ $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.103  netmask 255.255.255.0  broadcast 192.168.0.255
            inet6 fe80::d8e:4f58:5590:c47c  prefixlen 64  scopeid 0x20<link>
            ether b8:27:eb:22:30:9f  txqueuelen 1000  (Ethernet)
            RX packets 779  bytes 64604 (63.0 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 284  bytes 45312 (44.2 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether b8:27:eb:77:65:ca  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    修改网络接口配置文件/etc/network/interfaces。设置为动态IP,配置无线网络的SSID和密码。

    pi@raspberrypi:~ $ sudo vi /etc/network/interfaces
    
    # 在最后添加
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet dhcp
    wpa-ssid "IoT"
    wpa-psk "12345678"
    

    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第4张图片
    重启树莓派sudo reboot now
    可以在路由器管理界面看到树莓派的无线网卡连接上了。
    在这里插入图片描述
    使用路由器DHCP服务器的静态地址分配功能,为树莓派固定IP地址。
    在这里插入图片描述
    树莓派的网络名称默认是raspberrypi,可以修改以便更好地辨识。
    需要改两个地方,/etc/hostname/etc/hosts
    首先,hostname文件里直接编辑替换掉文件内容即可,必须是一个单词,不能包含任何标点符号和特殊字符(包括下划线_)。

    pi@raspberrypi:~ $ sudo vi /etc/hostname 
    

    其次,在hosts中最后一行,将raspberrypi替换成与前面一致的单词。

    pi@raspberrypi:~ $ sudo vi /etc/hosts
    

    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第5张图片
    配置完成后重启树莓派。路由器管理页可以看到两个静态IP,分别是有线网卡和无线网卡的。此时可以拔下网线,使用SSH登录无线网卡对应的IP地址。
    在这里插入图片描述

  3. 更新源
    将软件源更改为国内的清华源 ,提高软件的下载的稳定性和速度。

pi@nas:~ $ sudo vi  /etc/apt/sources.list
# 注释掉原内容
# 添加以下内容
# 注意,如果系统是stretch的,要将buster改为stretch。
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

pi@nas:~ $ sudo vi /etc/apt/sources.list.d/raspi.list
# 注释掉原内容
# 添加以下内容
# 注意,如果系统是stretch的,要将buster改为stretch。
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

# 最后,更新软件源列表
pi@nas:~ $ sudo apt-get update
  1. 远程桌面
    这里安装带有图形化界面的系统,可以使用RDP(Remote Desktop Protocol,远程桌面协议)登录树莓派,需要安装xrdp软件。
pi@nas:~ $ sudo apt-get install xrdp

xrdp是一个 守护进程,安装完后和树莓派启动时,xrdp服务会自动启动。
在Windows中,按住WIN+R,弹出运行窗口, 输入mstsc,启动远程桌面连接
账户信息和登录树莓派是使用的一样,默认帐号pi,密码raspberry
Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第6张图片
Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第7张图片
6. 修改密码
出于安全考虑,通过passwd修改用户piroot密码。

pi@nas:~ $ sudo passwd pi
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
pi@nas:~ $ sudo passwd root
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

注意RDP登录的密码也受此影响。

二、初始化存储设备

  1. 分区及格式化
    在树莓派USB口插入两个U盘,使用sudo fdisk -l可以看到连接的U盘。
pi@nas:~ $ sudo fdisk -l
# 此处省略其他磁盘信息
Disk /dev/sda: 28.9 GiB, 31029460992 bytes, 60604416 sectors
Disk model: DataTraveler 3.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4512774c

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *    109824 60604415 60494592 28.9G  c W95 FAT32 (LBA)


Disk /dev/sdb: 28.9 GiB, 31029460992 bytes, 60604416 sectors
Disk model: DataTraveler 3.0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd6f680e7

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sdb1  *    109824 60604415 60494592 28.9G  c W95 FAT32 (LBA)

删除原有的分区表,创建只包含一个分区的分区表,并格式化为ext4文件系统。

pi@nas:~ $ sudo fdisk /dev/sda1

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): o # o是创建一个空的分区表
Created a new DOS disklabel with disk identifier 0xdda30595.

Command (m for help): n # n是添加新的分区
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): # 直接回车,默认创建主分区

Using default response p.
Partition number (1-4, default 1): # 直接回车,默认值
First sector (2048-60494591, default 2048): # 直接回车,默认值
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-60494591, default 60494591): # 直接回车,默认值

Created a new partition 1 of type 'Linux' and of size 28.9 GiB.

Command (m for help): p # p是打印分区表
Disk /dev/sda1: 28.9 GiB, 30973231104 bytes, 60494592 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdda30595

Device      Boot Start      End  Sectors  Size Id Type
/dev/sda1p1       2048 60494591 60492544 28.9G 83 Linux

Command (m for help): w # w是将分区表写入磁盘并退出
The partition table has been altered.
Syncing disks.

# 格式化U盘,需要等待几分钟,需要先卸载了再格式化
pi@nas:~ $ sudo mkfs.ext4 /dev/sda1 # 挂载时格式化报错
mke2fs 1.44.5 (15-Dec-2018)
Found a dos partition table in /dev/sda1
Proceed anyway? (y,N) y # 输入y
/dev/sda1 is mounted; will not make a filesystem here!
pi@nas:~ $ umount /dev/sda1 # 先卸载U盘
pi@nas:~ $  sudo mkfs.ext4 /dev/sda1 # 格式化
mke2fs 1.44.5 (15-Dec-2018)
Found a dos partition table in /dev/sda1
Proceed anyway? (y,N) y # 输入y
Creating filesystem with 7561824 4k blocks and 1892352 inodes
Filesystem UUID: 0024c9ea-4959-44d7-aece-9465c84dc085
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

对第二个U盘/dev/sdb1也是同样的操作,将以上命令里的/dev/sda1更换为/dev/sdb1就可以。

pi@nas:~ $ sudo fdisk /dev/sdb1
pi@nas:~ $ umount /dev/sdb1
pi@nas:~ $ sudo mkfs.ext4 /dev/sdb1

为方便后续的磁盘管理,使用e2label为磁盘指定卷标。这样就可以通过卷标挂载磁盘,即使磁盘更换了接口。

pi@nas:~ $ sudo e2label /dev/sda1 data
pi@nas:~ $ sudo e2label /dev/sdb1 backup
pi@nas:~ $ sudo e2label /dev/sda1
data
pi@nas:~ $ sudo e2label /dev/sdb1
backup

格式化和建立卷标也可以合为一条命令,但还是建议先全部格式化后再统一指定卷标。

pi@nas:~ $ sudo mke2fs -t ext4 /dev/sda1 -L data
pi@nas:~ $ sudo mke2fs -t ext4 /dev/sdb1 -L backup
  1. 自动挂载
    autofs服务程序是一种Linux系统守护进程,在用户需要使用该文件系统时才会动态挂载,从而节约了网络资源和服务器硬件资源,也避免了在范围磁盘时设备没有挂载的问题。
# 安装 autofs
pi@nas:~ $ sudo apt install autofs
# 创建挂载点 /nas
pi@nas:~ $ sudo mkdir /nas

# 设置使用时自动挂载设备
# 修改 /etc/auto.master
pi@nas:~ $ sudo vi /etc/auto.master
# 在文件最后添加
/nas /etc/auto.misc
# 修改 /etc/auto.misc
pi@nas:~ $ sudo vi /etc/auto.misc
# 在文件最后添加
data -fstype=ext4,rw :/dev/disk/by-label/data
backup -fstype=ext4,rw :/dev/disk/by-label/backup
# 重新启动autofs服务
pi@nas:~ $ sudo service autofs restart

Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第8张图片
Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第9张图片

pi@nas:~ $ ls /nas/ # 此时没有挂载U盘
pi@nas:~ $ cd /nas/data # 使用时自动挂载data
pi@nas:/nas/data $ ls /nas/
data
pi@nas:/nas/data $ cd /nas/backup # 使用时自动挂载backup
pi@nas:/nas/backup $ ls /nas
backup  data

三、NFS服务器

  1. 配置NFS
# 安装NFS服务器
pi@nas:~ $ sudo apt install nfs-kernel-server
# 公开/nas/data目录
pi@nas:~ $ sudo vi /etc/exports
# 在文件最后添加
/nas/data 192.168.0.*(rw,sync,no_subtree_check,no_root_squash)
# 重新启动NFS服务
pi@nas:~ $ sudo systemctl restart nfs-server.service
# 设置NFS服务开机自启动
pi@nas:~ $ sudo systemctl enable nfs-server


# 启动和停止命令
pi@nas:~ $ sudo systemctl start nfs-server.service
pi@nas:~ $ sudo systemctl stop nfs-server.service
# 查询NFS服务状态
pi@nas:~ $ sudo systemctl status  nfs-server.service                            

Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第10张图片

  1. Windows下使用
    启动或关闭Windows功能中,启用NFS服务
    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第11张图片
    按住WIN+R,弹出运行窗口, 输入regedit,启动注册表编辑器
    找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default,添加两项AnonymousUidAnonymousGid,值为0,否则对NFS服务器的文件只有读权限。
    重启Windows系统。
    Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第12张图片
    按住WIN+R,弹出运行窗口, 输入cmd,启动命令行窗口
    C:\Users\LCH>showmount -e \\192.168.0.121
    导出列表在 192.168.0.121:
    /nas/data                          192.168.0.*
    
    C:\Users\LCH>mount \\192.168.0.121\nas\data X:\
    X: 现已成功连接到 \\192.168.0.121\nas\data
    
    命令已成功完成。
    
    C:\Users\LCH>umount X:\
    
    正在断开连接            X:      \\192.168.0.121\nas\data
    命令已成功完成。
    

也可以通过映射网络驱动器进行连接。
Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第13张图片
Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第14张图片

  1. Linux下使用
pi@NAS:~ $ sudo apt-get install nfs-common portmap
pi@NAS:~ $ sudo mkdir /mnt/data
pi@NAS:~ $ sudo mount -t nfs 192.168.0.121:/nas/data /mnt/data
pi@NAS:~ $ ls /mnt/data/
lost+found
pi@NAS:~ $
  1. Mac下使用

四、数据备份

  1. 增量备份
    rsync是远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的rsync算法来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
    rsync有六种不同的工作模式,这里使用的是拷贝本地文件的模式,将/nas/data的数据拷贝到/nas/backup里。
    /nas/backup里初始化一个完整的备份。
pi@nas:~ $ sudo rsync -a /nas/data/ /nas/backup/2020-04-19

这里,新建了一个初始化脚本InitializeBackup.sh用于初始化完整备份。

	#!/bin/bash
	# InitializeBackup.sh
	
	DATADIR=/nas/data/
	BACKUPDIR=/nas/backup/
	
	TODAY=$(date +%Y-%m-%d)
	TODAYPATH=${BACKUPDIR}/${TODAY}/
	LASTDAY=$(ls ${BACKUPDIR} | tail -n 1)
	LASTDAYPATH=${BACKUPDIR}/${LASTDAY}/
	
	# echo "${TODAYPATH}"
	# echo "${LASTDAYPATH}"
	
	if [[ ! -n "${LASTDAY}" ]]; then
	    echo "Initialization:${TODAYPATH}"
	    if [[ ! -e ${TODAYPATH} ]]; then
	        mkdir -p ${TODAYPATH}
	    fi
	    rsync -a ${DATADIR} ${TODAYPATH}
	elif [[ "${LASTDAYPATH}" == "${TODAYPATH}" ]]; then
	    echo "Reinitialization:${TODAYPATH}"
	    rm -rf ${TODAYPATH}
	    rsync -a ${DATADIR} ${TODAYPATH}
	else
	    echo "Not clean:${BACKUPDIR}"
	fi

在后续的备份中,使用--link-dest=DIR参数,当文件未改变时,基于DIR创建硬链接文件。
比如,基于初始化的完整备份,新建增量备份2020-04-20

pi@nas:~ $ sudo rsync -a --link-dest /nas/backup/2020-04-19/ /nas/data/ /nas/backup/2020-04-20/
# 可以看到测试文件2020-4-19.txt的文件ID是一样
pi@nas:~ $ ls -i /nas/backup/2020-04-19
262147 2020-4-19.txt  262146 lost+found
pi@nas:~ $ ls -i /nas/backup/2020-04-20
262147 2020-4-19.txt  1048579 2020-4-20.txt  1048578 lost+found

这里,新建了一个日常备份脚本DailyBackup.sh,用于后续新建日常任务时进行调用。

	#!/bin/bash
	# DailyBackup.sh
	
	DATADIR=/nas/data/
	BACKUPDIR=/nas/backup/
	SCRIPTDIR=/nas/data/backup_scripts
	
	TODAY=$(date +%Y-%m-%d)
	TODAYPATH=${BACKUPDIR}/${TODAY}/
	LASTDAY=$(ls ${BACKUPDIR} | grep -v -e log | tail -n 1)
	LASTDAYPATH=${BACKUPDIR}/${LASTDAY}/
	
	echo "Incremental backup: ${TODAYPATH}"
	rsync -a --link-dest ${LASTDAYPATH} ${DATADIR} ${TODAYPATH}
  1. 删除历史备份
    备份的保留策略是,保留过去5年每年的1月1日,过去12个月每月的1号,过去的4周每个周日,以及过去的7天的备份。
    除了保留的备份,其他备份都删除。
#!/bin/bash
# DeleteOldBackup.sh

BACKUPDIR=/nas/backup/
# backups of January 1st for the last 5 years
function listYearlyBackups() {
        for i in {0..4}
        do 
                ls ${BACKUPDIR} | egrep "$(date +%Y -d "${i} year ago")-01-01"
                # ls用于列出备份目录下的所有备份,目录名格式是yyyy-mm-dd,如2020-04-19,然后通过管道连接egrep
                # egrep通过模式匹配,查找yyyy-01-01的目录,也就是每年1月1日的目录,其中,yyyy通过date命令和for循环获取当年以及往前4年的年份
        done
}
# backups of the 1st of the last 12 months
function listMonthlyBackups() {
        for i in {0..11}
        do
                ls ${BACKUPDIR} | egrep "$(date +%Y-%m -d "${i} month ago")-01"
                # 原理同上,匹配当年当月以及往前11个月的1号
        done
}
# backups of the last 4 Sundays
function listWeeklyBackups() {
        for i in {0..3}
        do
                ls ${BACKUPDIR} | grep "$(date +%Y-%m-%d -d "-$(($(date +%u) + 7*${i})) day")"
                # 原理同上,匹配当年当周以及往前3周的周日
        done
}
# backups of the last 7 days
function listDailyBackups() {
        for i in {0..6}
        do
                ls ${BACKUPDIR} | grep "$(date +%Y-%m-%d -d "-${i} day")"
                # 原理同上,匹配当年当月当日以及往前6天
        done
}
# get all reserved backups
function getAllBackups() {
        listYearlyBackups
        listMonthlyBackups
        listWeeklyBackups
        listDailyBackups
}
# remove duplicates
function listUniqueBackups() {
        getAllBackups | sort -u
        # sort -u 用于删除重复目录
}
# filter out backups for deletion
function listBackupsToDelete() {
        ls ${BACKUPDIR} | grep -v -e "$(echo -n $(listUniqueBackups) |sed "s/ /\\\|/g")"
        # grep -v 反转查找,即出列后面列出的保留的目录外,其他目录均删除
        # grep -e 进行模式匹配
        # sed命令对字符串进行字符替换,\\\|是\|的转义,s/ /\\\|/g是将空格替换为\|
}

cd ${BACKUPDIR}
echo "Reserved backups: $(listUniqueBackups | xargs)"
echo "Deleted backups: $(listBackupsToDelete | xargs)"
listBackupsToDelete | xargs rm -rf # 通过管道和xargs命令将要删除的目录传给rm命令
  1. 恢复数据
    简单恢复数据的话,只需要挑选备份的目录,将其内容复制回/nas/data/便可以了。

五、邮件提醒

  1. 安装配置
    发送邮件使用heirloom-mailx
# 安装 heirloom-mailx
pi@nas:~ $ sudo apt-get install heirloom-mailx
# 修改配置
pi@nas:~ $ sudo vi /etc/s-nail.rc
# 在最后添加
set from="[email protected]"
set smtp="smtps://smtp.163.com:465"
set smtp-auth-user="[email protected]" # 这里我发送和接收用同一个邮箱,不然可能会被认为是垃圾邮件
set smtp-auth-password="your_password" # 网易邮箱使用的是授权码,在网页邮箱里设置
set smtp-auth=login
  1. 发送邮件
    测试配置是否成功。
pi@nas:~ $ echo "test" | heirloom-mailx -s "TEST" "[email protected]"

六、定时执行

  1. 执行脚本
    新建了一个脚本DailyRun.sh,调用备份DailyBackup.sh、删除备份DeleteOldBackup.sh、检查磁盘容量CheckDiskRemain.sh,并将log以邮件形式发送出去。
#!/bin/bash
# CheckDiskRemain.sh

DATADIR=/nas/data
BACKUPDIR=/nas/backup
# 简单地使用df显示磁盘空间并匹配出/nas/data和/nas/backup
df -h | grep -e 'Filesystem' -e ${DATADIR} -e ${BACKUPDIR}
#!/bin/bash
# DailyRun.sh

DATADIR=/nas/data/
BACKUPDIR=/nas/backup/
SCRIPTDIR=/nas/data/backup_scripts/

TODAY=$(date +%Y-%m-%d)
LOGFILE=${BACKUPDIR}/${TODAY}.log
EMAIL="[email protected]"

if [[ -f ${LOGFILE} ]];then
    rm ${LOGFILE}
fi

# 暂存标准输出和错误输出
exec 3>&1
exec 4>&2

# 将标准输出和错误输出重定向到log文件
exec 1>>${LOGFILE}
exec 2>>${LOGFILE}

# 调用相关脚本并将打印信息输出到log文件
echo "**********DAILYBACKUP**********"
${SCRIPTDIR}/DailyBackup.sh
echo -e "\n**********DELETEBACKUP**********"
${SCRIPTDIR}/DeleteOldBackup.sh
echo -e "\n***********DISKREMAIN***********"
${SCRIPTDIR}/CheckDiskRemain.sh
echo -e "\n"

# 恢复标准输出和错误输出
exec 1>&3
exec 2>&4

# cat ${LOGFILE}

# 发送邮件并且将错误输出到log文件
heirloom-mailx -s "Raspberry Pi NAS Log - ${TODAY}" ${EMAIL} < ${LOGFILE} 2>>${LOGFILE}

先测试运行下脚本。

pi@nas:~ $ sudo /nas_backup_scripts/DailyRun.sh
pi@nas:~ $ cat /nas/backup/2020-04-19.log
**********DAILYBACKUP**********
Incremental backup: /nas/backup//2020-04-19/

**********DELETEBACKUP**********
Reserved backups: 2020-04-19 2020-04-19.log
Deleted backups:

***********DISKREMAIN***********
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        29G   45M   27G   1% /nas/data
/dev/sda1        29G   45M   27G   1% /nas/backup

Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第15张图片

  1. 校正时间
    从上面的邮件接收时间和备份日期可以看出,树莓派系统的时间与北京时间是不一致的。
pi@nas:~ $ date
Sun 19 Apr 18:16:57 BST 2020

可以直接通过raspi-config-4 Localisation Options-I2 Change Timezone-Asia-Shanghai设置。

pi@nas:~ $ sudo raspi-config

Current default time zone: 'Asia/Shanghai'
Local time is now:      Mon Apr 20 01:18:51 CST 2020.
Universal Time is now:  Sun Apr 19 17:18:51 UTC 2020.

pi@nas:~ $ date
Mon 20 Apr 01:18:58 CST 2020

再运行一次脚本。

pi@nas:sudo /nas_backup_scripts/DailyRun.sh
pi@nas:~ $ cat /nas/backup/2020-04-20.log
**********DAILYBACKUP**********
Incremental backup: /nas/backup//2020-04-20/

**********DELETEBACKUP**********
Reserved backups: 2020-04-19 2020-04-19.log 2020-04-20 2020-04-20.log
Deleted backups:

***********DISKREMAIN***********
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        29G   45M   27G   1% /nas/data
/dev/sda1        29G   45M   27G   1% /nas/backup

Raspberry Pi 3 B+ NAS以及自动备份和邮件提醒_第16张图片

  1. 定时任务
    crontab是用来提交和管理用户需要周期性执行的任务。
pi@nas:~ $ sudo crontab -e # -e表示编辑用户的计时器设置
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 2
crontab: installing new crontab
# 这里会打开文件,在文件最后添加
0 2 * * * /nas_backup_scripts/DailyRun.sh
# 顺序是分、时、日、月、周、命令
# 这里表示的是每天2点执行DailyRun.sh
# 直接查看或者修改文件
pi@nas:~ $ sudo cat /var/spool/cron/crontabs/root

你可能感兴趣的:(#,Linux)