我的目标是有一个特定的目录作为tmpfs可用。 在这个目录的服务器正常运行时间里会有一些修改,这些修改必须通过rsync同步到硬盘上的非tmpfs持久目录。
服务器启动后,非tmpfs持久目录的最新版本必须移动到tmpfs和rsync同步启动。
恐怕如果tmpfs目录将是空的,rsync将擦除非tmpfs备份。
我现在正在这样做:
cat /etc/rc.local(伪代码)
如果有的话,从/ var / spool / cron / crontabs删除“tmpfs rsync”cronjob
cp -r / path / to / non-tmpfs-backup / path / to / tmpfs / dir
用“tmpfs rsync”cronjob追加/ var / spool / cron / crontabs
你怎么看?
在non-tmpfs目录下创build一些种子文件,如果存在(也就是说“boot”拷贝工作),只有rsync回到非tmpfs,所以类似:
BOOT
mount /path/tmpfs rsync -aq --delete /path/non-tmpfs/ /path/tmpfs/
科雷
if [ -f /path/tmpfs/some/deep/location/filesgood.txt ]; then rsync -aq --delete /path/tmpfs/ /path/non-tmpfs/ fi
这不是完美的,但是,如果你提高了(如果你想在不同的目录中,在cron期间查找5个“cookie”文件),它应该是非常安全的。
我只想对troyengel上面的优秀回答发表评论,但缺lessserverfault的代表来这样做。
一个解决办法是在-aq和–delete之间应该有一个空格。
另外,我创build了一个镜像脚本来检查/ tmpfs驱动器中的inited file lock,并在第一次运行时从磁盘镜像到RAM,然后从RAM镜像到磁盘:
#!/bin/sh if [ -f /workspace/z/some/deep/location/inited ]; then ionice -c2 -n7 nice -n 19 rsync -aq --delete /workspace/* $HOME/workspace 1>/dev/null else ionice -c2 -n0 nice -n 19 rsync -aq --delete $HOME/workspace/* /workspace 1>/dev/null fi
请注意,您的锁应位于/ z / deep /位置,因此它始终是最后一个同步的文件,以防数据丢失。
我还包括nice和ionice参数,所以初始镜像是高优先级的,从RAM镜像到磁盘的优先级较低。
如果你很勇敢,可以使用-c1 -n7来进行实时初始镜像,如果你需要频繁的空闲时间,可以使用带有-c3和no -n标志的ionice在磁盘不用的时候只镜像回来。
我把这个脚本保存到/ usr / bin / Mirror,每隔五分钟用cron运行一次。
crontab -e
*/5 * * * * /usr/bin/Mirror
如果要将工作文件存储在encryption的硬盘上,但在RAM中进行工作,这一点尤其有用。
如果您希望在系统启动和closures时运行镜像,则可以使用/ etc / inittab
id0:26:once:/usr/bin/Mirror