0.2 秒居然复制了 100G 文件?
cp 引发的思考
今天同事用
cp
命令,把他给惊到了!
背景是这样的:他用
cp
拷贝了一个 100 G的文件,竟然一秒不到就拷贝完成了!
用
ls
看一把文件,显示文件确实是 100 G。
sh-4.4# ls -lh
-rw-r--r-- 1 root root 100G Mar 6 12:22 test.txt
但是copy起来为什么会这么快呢?
sh-4.4# time cp ./test.txt ./test.txt.cp
real 0m0.107s
user 0m0.008s
sys 0m0.085s
一个 SATA 机械盘的写能力能到 150 M/s (大部分的机械盘都是到不了这个值的)就算非常不错了,正常情况下,copy 一个 100G 的文件至少要 682 秒 ( 100 G/ 150 M/s ),也就是 11 分钟。
实际情况却是
cp
一秒没到就完成了工作,惊呆了,为啥呢?
更诡异的是:他的文件系统只有 40 G,为啥里面会有一个 100 G的文件呢?
同事把我找来,看看这个诡异的问题。
分析文件
我让他先用
du
命令看一下,却只有 2M ,根本不是100G,这是怎么回事?
sh-4.4# du -sh ./test.txt
2.0M ./test.txt
再看
stat
命令显示的信息:
sh-4.4# stat ./test.txt
File: ./test.txt
Size: 107374182400 Blocks: 4096 IO Block: 4096 regular file
Device: 78h/120d Inode: 3148347 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-13 12:22:00.888871000 +0000