linux拷贝大量文件时有什么方法可以效验文件有没有损坏,使用linux的cp命令复制文件后验证文件是否一致的方法...
說明:
因為某個磁盤滿了,需要將原始文件拷貝到新磁盤。數據非常重要,需要保證拷貝數據與原始數據一致。用cp拷貝完成后,發現文件大小不一致。原始文件夾5.8G(du –max-depth=1查看),拷貝文件夾5.9G,差別相當明顯。
實現:
1.最初懷疑是因為不同磁盤的最小計量單位不同導致,以為最小計算單位是sector(其實是錯的)。
因此fdisk -l /dev/sda查看了下
發現兩者的扇區是一樣的,郁悶。
2.接著懷疑拷貝的文件數,文件大小不一致。于是自己寫了個簡單的shell腳本,查看每個文件具體大小,不一致的會輸出!=
[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
結果發現每個文件大小完全一致,用md5確認(cat * | md5sum),發現原始文件,拷貝文件也是一致的
3.這就納悶了,突然想起磁盤的最小計量單位應該是block才對,因此。。。。
tune2fs -l /dev/sda1
tune2fs -l /dev/sdb1
發現確實是因為這個,繞了一圈又回來了,看來專業水平還要提高
附注:
在查看答案過程中,聽說du是按inode來計算文件大小的,因此顯示文件大小時速度較快。inode記錄了一個文件的起始block,結束block。因此即使文件沒有完整占用1個block時,也算1個。也會導致文件大小不一致。
而ls是根據block來計算文件大小的
轉載自:linux cp文件大小不一致:http://coolnull.com/443.html
總結
以上是生活随笔為你收集整理的linux拷贝大量文件时有什么方法可以效验文件有没有损坏,使用linux的cp命令复制文件后验证文件是否一致的方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux动态路由rip配置,配置 动态
- 下一篇: github上的linux项目,克隆Gi