问题描述:
近期有个3T硬盘总是连接电脑上自动断电重启,重启的时间大概2分钟。为了将里面的数据备份出,想了很多办法,最后利用Linux提供的计划任务解决。
解决的大体思路:
利用计划任务crontab检测是否cp进程存在,如果不存在,表明移动硬盘已经断掉,应该重新mount,并启动cp程序。
在Ubuntu中实现的具体方法:
1、首先将移动硬盘的UUID添加到/etc/fstab中,以便自动mount
#USB
UUID=2069549f-8984-4556-8f03-da2e76376059 /media/USB/ ext4 defaults 00
2、编写自动mount并重新启动cp的shell脚本,在/software目录下新件一个文本test.sh,并添加下面的内容:
#test.sh
#!/bin/sh
pid=`ps -ef | grep -v grep | grep -v "test.sh" | grep 1 | sed -n '1P' | awk '{print2}'`
if[-z $pid ];then
date
echo "Reload USB"
umount /media/USB/
mount -a
echo "Start new cp"
cp -Rvun/media/USB/mysql /media/SeagateBackupDrive/pub3/;cp -Rvun/media/USB/gbdb_Bei /media/SeagateBackupDrive/pub3/
fi
其中grep行用于检测当前是否正在运行某进程(如cp -Rvun ....),如果没有该进程,则重新mount硬盘到/media/USB,并启动新的cp程序
3、添加crontab计划任务(参考http://blog.csdn.net/richerg85/article/details/17887879)
启动crontab文本
crontab -e添加一行,每两分钟判断因此程序是否还在运行cp进程(由于包含cp的进程较多,采用Rvun代替)
*/2 * * * * /software/test.sh Rvun>>/software/time.log重新启动crontab任务
service cron restart此时,即可看到/software/time.log文件中输出了数据拷贝的信息以及中间重启加载硬盘的信息
可以利用tail命令查看程序的进程:
tail --lines=100-f /software/time.log输出如下:
2015年02月06日星期五23:04:01 CST
Reload USB
Startnew cp
........
至此,解决了困扰了很久的难题。
欢迎关注刘洪波老师科学网博客
欢迎关注生信人。