[Colletcion]上亿个小文件如何备份或拷贝?
CCF的讨论,有参考价值,转过来研究一下
服务器上有上亿的25k~40k小文件约4T左右(每天还在不停增加),但磁盘马上要满了
磁盘结构NTFS
用treesize 列目录用了一个晚上,大概8小时
用killcopy拷贝到NAS,在收集信息时就崩溃了
现在还没有好的方法处理这些文件
打开磁盘并不慢,因为这些文件被分在不同的目录下,目录也很多
CCF的讨论,有参考价值,转过来研究一下
服务器上有上亿的25k~40k小文件约4T左右(每天还在不停增加),但磁盘马上要满了
磁盘结构NTFS
用treesize 列目录用了一个晚上,大概8小时
用killcopy拷贝到NAS,在收集信息时就崩溃了
现在还没有好的方法处理这些文件
打开磁盘并不慢,因为这些文件被分在不同的目录下,目录也很多
原文版权归 大包子@CCF 所有,原文链接 http://baoz.net/hacker-owned-apache-official-server/
Apache是全球使用最多的Web Server之一,近期Apache的官网被黑客入侵了,素包子根据apache网站的描述,分析了下黑客的思路。大概包含5个过程,虽然道路曲折,但黑客快速通关,一步一步的接近目标,有很多可圈可点的地方,还是相当精彩的。可惜最后people.apache.org没搞下来,否则可以写小说拍电影了,不过男女主角不能是aXi和aJiao。
故障现象
访问页面出现(502)bad gateway,或者(403)Access Forbid错误.
部分错误日志
Apr 15 00:30:41 sqweb2 kernel: lockd: server 192.168.96.50 not responding, timed out
Apr 15 00:31:21 sqweb2 last message repeated 10 times
Apr 15 00:32:31 sqweb2 last message repeated 21 times
Apr 15 00:33:41 sqweb2 last message repeated 17 times
主交换 CPU在10%左右,MEM在20-30%之间波动
1.在本地主机生成SSH公钥和私钥(这里是用Mac OS X的”终端”工具,其他*Nix以及SSH Client步骤类似)
lin-pooplematoMacBook:~ linpoople$ ssh-keygen
lin-pooplematoMacBook:~ linpoople$ cd .ssh
lin-pooplematoMacBook:.ssh linpoople$ ls
id_rsa id_rsa.pub known_hosts #id_rsa为私钥,留在客户端;id_rsa为公钥,传至服务器端
2.利用U盘或者FTP等方式,把公钥传至服务器,存放位置为服务器用户的.ssh目录(如果没有该目录,请创建)
前几天通宵做完,已经投入使用了。还来不及做下总结,先Mark一下,占个位置,有空再编辑。
几个参考链接
http://subversion.tigris.org/ds/viewMessage.do?dsMessageId=2364143&dsForumId=445
http://blog.csdn.net/mynamesucks/archive/2007/12/03/1913835.aspx
http://blog.csdn.net/jlnuboy/archive/2009/10/25/4725140.aspx
■禁止用户登录shell
在添加用户时,指定shell为/sbin/nlogin即可。经常错误地指为/bin/false,留个记号吧。
对于Ubuntu Server,vsftpd在验证用户阶段,会检查用户的shell是否已经在系统中注册。默认的,/sbin/nologin在系统变量找不到的。需要我们手工添加
Ubuntu(我想应该包括debian)和RHEL的细微区别体现出来了,以下脚本在RHEL上执行没问题,
11 0 * * * tar -g /data0/snapshot_data_www -p cvzf /data1/backup_zone/data_www/data_www_`date ‘+%Y%m%d’`.tar.gz /data0/data_www #backup the data_www directory
在Ubuntu上,就屡次调试不过。经过调试,认为存在以下差异
1.Ubuntu的tar -g 不支持完整路径名;可以用变量取代之
2.Ubuntu的tar在cron中,不支持v(可视化)参数;可以不用,对备份没有影响
3.Ubuntu的tar在cron中,%符号有其他意义,代表命令换行;可以在前面加个\符号,将其变为转义字符。
最后的方案如下(已调试成功)
2009-12-15 update
之前的定期计划放到crongtab,会产生错误,可以查看/var/log/syslog
#grep -i CMD /var/log/syslog.0
Dec 25 00:11:01 krc /USR/SBIN/CRON[4273]: (root) CMD (tar -g /data0/snapshot_data_www -p -cvzf /data1/backup_zone/data_www/da
ta_www_`date ‘+)
Dec 25 00:11:30 krc Transfer: Get GETCMD error.Dec 25 01:01:01 krc /USR/SBIN/CRON[12617]: (root) CMD (tar -cvzf /data1/backup_zone/data_conf/usr_local_webserve_`date ‘+)
Dec 25 01:01:33 krc Transfer: Get GETCMD error.
查看以上的日志,不难发现,备份语句被截断了,在换行的时候。因此,可以有以下2种修补方案
1.手工把语句截断,利用分行符%
2.把语句放到sh脚本里,使用bash /root/scriptname.sh这样的方式执行(推荐,因为看起来更简洁)
附注:备份任务最好以高权限用户执行,因为要备份的内容文件权限各不一样,其他用户不能保证都有权限。因此,建议用root权限执行。鉴于root权限的高风险,请编辑crontab之前,先在试验环境全部run过。
最近评论