linux拷贝大量文件时有什么方法可以效验文件有没有损坏,使用linux的cp命令复制文件后验证文件是否一致的方法...
說(shuō)明:
因?yàn)槟硞€(gè)磁盤(pán)滿了,需要將原始文件拷貝到新磁盤(pán)。數(shù)據(jù)非常重要,需要保證拷貝數(shù)據(jù)與原始數(shù)據(jù)一致。用cp拷貝完成后,發(fā)現(xiàn)文件大小不一致。原始文件夾5.8G(du –max-depth=1查看),拷貝文件夾5.9G,差別相當(dāng)明顯。
實(shí)現(xiàn):
1.最初懷疑是因?yàn)椴煌疟P(pán)的最小計(jì)量單位不同導(dǎo)致,以為最小計(jì)算單位是sector(其實(shí)是錯(cuò)的)。
因此fdisk -l /dev/sda查看了下
發(fā)現(xiàn)兩者的扇區(qū)是一樣的,郁悶。
2.接著懷疑拷貝的文件數(shù),文件大小不一致。于是自己寫(xiě)了個(gè)簡(jiǎn)單的shell腳本,查看每個(gè)文件具體大小,不一致的會(huì)輸出!=
[root@xm101 2012]# cat test.sh
#!/bin/bash
path1=/opt/a/2012/01/20
path2=/opt/b/2012/01/20
for i in `ls $path2`;
do
a=`/bin/ls -l $path1/$i|awk '{print $5}'`
b=`/bin/ls -l $path2/$i|awk '{print $5}'`
sum=`[ "$a" != "$b" ] && echo "!="`
echo $i path1:$a path2:$b $sum >> hello.txt
done
結(jié)果發(fā)現(xiàn)每個(gè)文件大小完全一致,用md5確認(rèn)(cat * | md5sum),發(fā)現(xiàn)原始文件,拷貝文件也是一致的
3.這就納悶了,突然想起磁盤(pán)的最小計(jì)量單位應(yīng)該是block才對(duì),因此。。。。
tune2fs -l /dev/sda1
tune2fs -l /dev/sdb1
發(fā)現(xiàn)確實(shí)是因?yàn)檫@個(gè),繞了一圈又回來(lái)了,看來(lái)專(zhuān)業(yè)水平還要提高
附注:
在查看答案過(guò)程中,聽(tīng)說(shuō)du是按inode來(lái)計(jì)算文件大小的,因此顯示文件大小時(shí)速度較快。inode記錄了一個(gè)文件的起始block,結(jié)束block。因此即使文件沒(méi)有完整占用1個(gè)block時(shí),也算1個(gè)。也會(huì)導(dǎo)致文件大小不一致。
而ls是根據(jù)block來(lái)計(jì)算文件大小的
轉(zhuǎn)載自:linux cp文件大小不一致:http://coolnull.com/443.html
總結(jié)
以上是生活随笔為你收集整理的linux拷贝大量文件时有什么方法可以效验文件有没有损坏,使用linux的cp命令复制文件后验证文件是否一致的方法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux动态路由rip配置,配置 动态
- 下一篇: github上的linux项目,克隆Gi