上一篇文章講到了在 Linux 環境底下建立 RAM Disk 來用,如果要讓它使用上跟一般的磁碟機相似的話,還差最後一哩路,那就是「重新開機之後檔案還在
」,要做到這件事,概念上就是「關機前備份檔案
」、「開機後還原檔案
」,那我們來看一下在 CentOS 7 要怎麼做?(CentOS 8 一樣適用)
CentOS 自從 7 之後,全面改用 systemd 來管理開機時啟動的服務,捨棄了 Runlevel(但相容 Runlevel),所以本篇文章會用 systemd 的方式來設定關機前及開機後要執行的腳本,其他 Linux 發行版本的做法,就請各位朋友自行 Google 了。
備份及還原的指令
首先,是建立備份資料夾,執行下面指令,我們將備份料夾給建立起來。
sudo mkdir /mnt/tmpfs-backup
sudo chmod -R 777 /mnt/tmpfs-backup
備份跟還原就用 rsync 來做,指令就請參考下面:
# 備份
rsync -a --delete --recursive --force /mnt/tmpfs/ /mnt/tmpfs-backup/
# 還原
rsync -a --recursive --force /mnt/tmpfs-backup/ /mnt/tmpfs/
關機前執行的腳本
建立一個名稱為 shutdown-script.sh
的腳本檔案,放一些在關機前要執行的指令,那我們目前要做的也只有備份 /mnt/tmpfs 裡面的檔案而已,所以就把備份指令放進去。
#! /bin/bash
rsync -a --delete --recursive --force /mnt/tmpfs/ /mnt/tmpfs-backup/
systemd 是以 Unit 為執行單位,所以我就在 /usr/lib/systemd/system/
底下,建立一個名稱為 shutdown-script.service
的 Service Unit 檔案,把它 Install 在 shutdown.target
,執行的就是剛剛我們建立的 shutdown-script.sh 腳本。
[Unit]
Description=Run script at shutdown
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/bin/bash /usr/share/shutdown-script.sh
TimeoutStartSec=0
[Install]
WantedBy=shutdown.target
檔案建好後,我們把 shutdown-script.service 給 enable 起來。
sudo systemctl enable shutdown-script.service
開機後執行的腳本
我們依樣畫葫蘆,先建立名稱為 startup-script.sh
的腳本檔案,把檔案還原的指令放進去。
#! /bin/bash
rsync -a --recursive --force /mnt/tmpfs-backup/ /mnt/tmpfs/
在 /usr/lib/systemd/system 底下,建立名稱為 startup-script.service
的 Service Unit 檔案,把它 Install 在 basic.target
,而且要在 sysinit.target
之後執行,原因是我們得確保 RAM Disk 有被 mount 起來,還要在其他服務存取 RAM Disk 之前還原檔案。
[Unit]
Description=Run script at startup
DefaultDependencies=no
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/bash /usr/share/startup-script.sh
TimeoutStartSec=0
[Install]
WantedBy=basic.target
檔案建好後,我們把 startup-script.service 給 enable 起來。
sudo systemctl enable startup-script.service
最後,我們就隨便放幾個檔案到 /mnt/tmpfs,然後把機器重新開機。
檔案成功在關機前被備份,並且在開機前還原。