Raspberry Pi 3 B+ NAS以及自動備份和郵件提醒

一、準備樹莓派

  1. 準備系統
    這裏下載最新的鏡像,或者在這裏下載歷史鏡像。
    可以選擇不帶桌面最精簡的Lite,這裏使用最新的帶桌面的with desktop版本。
    建議下載種子,然後使用迅雷等下載工具下載。
    在這裏插入圖片描述
    下載 Win32 Disk Imager,直接下載即可,安裝。
    將SD卡通過讀卡器連接到電腦,從下載的文件(.zip)解壓出系統(.img),選擇後寫入,等待5分鐘左右。
    在這裏插入圖片描述
    寫入完成後,在boot盤裏新建空白文件ssh,不需要後綴,後續SSH連接時使用。
    可以直接右鍵新建一個TXT文件,重命名爲ssh
    在這裏插入圖片描述
    安全彈出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"
    

    在這裏插入圖片描述
    重啓樹莓派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
    

    在這裏插入圖片描述
    配置完成後重啓樹莓派。路由器管理頁可以看到兩個靜態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
在這裏插入圖片描述
在這裏插入圖片描述
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

在這裏插入圖片描述
在這裏插入圖片描述

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                            

在這裏插入圖片描述

  1. Windows下使用
    啓動或關閉Windows功能中,啓用NFS服務
    在這裏插入圖片描述
    按住WIN+R,彈出運行窗口, 輸入regedit,啓動註冊表編輯器
    找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default,添加兩項AnonymousUidAnonymousGid,值爲0,否則對NFS服務器的文件只有讀權限。
    重啓Windows系統。
    在這裏插入圖片描述
    按住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
    命令已成功完成。
    

也可以通過映射網絡驅動器進行連接。
在這裏插入圖片描述
在這裏插入圖片描述

  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

在這裏插入圖片描述

  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

在這裏插入圖片描述

  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章