cp正在写入文件导致文件内容不一致

每天在用cp,mv有没想过他们底层是在执行什么?执行完放心吗?
我最近在项目实践中证实了cp,mv是不能满足所有业务场景的,如对一个正在写入的文件执行mv和cp操作,最终目标文件是否与原文件保持一致?心里有没有底?
答案是: 1 mv正在写入的文件,写入停止后目标文件和原文件一致
2 cp正在写入的文件,写入停止后目标文件和原文件
不一致

原理分析:
文件存储磁盘中操作系统的文件系统是通过innode节点来操作管理文件的,inode简单理解是操作系统给存在磁盘上文件的编号,通过这个编号查到文件基础信息(包括name,size,修改时间,所属组,所属用户,link数,存储位置指针等)再去查文件。
1 mv操作实际上给存储在磁盘上的文件修改了硬链接信息吗,是重命名的过程,调用操作系统rename方法, inode编号是不变的。
实例:mv test.pcap aaa.pcap #底层调用过程,1可以发现调用了rename方法, 2 inode编号是不变的都是1572876

[root@dev02 ~]# ll -i test.pcap 
1572876 -rw-r--r-- 1 tcpdump tcpdump 725 May 29 19:01 test.pcap
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# strace mv test.pcap aaa.pcap 
execve("/bin/mv", ["mv", "test.pcap", "aaa.pcap"], [/* 25 vars */]) = 0
brk(0)                                  = 0x1508000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e617f000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=40339, ...}) = 0
mmap(NULL, 40339, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b47e6180000
close(3)                                = 0
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320i\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=155784, ...}) = 0
mmap(NULL, 2255184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e6381000
mprotect(0x2b47e63a5000, 2093056, PROT_NONE) = 0
mmap(0x2b47e65a4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23000) = 0x2b47e65a4000
mmap(0x2b47e65a6000, 6480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b47e65a6000
close(3)                                = 0
open("/lib64/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\37\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=37056, ...}) = 0
mmap(NULL, 2130560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e65a8000
mprotect(0x2b47e65af000, 2097152, PROT_NONE) = 0
mmap(0x2b47e67af000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x2b47e67af000
close(3)                                = 0
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\23\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=19888, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e618a000
mmap(NULL, 2113904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e67b1000
mprotect(0x2b47e67b5000, 2093056, PROT_NONE) = 0
mmap(0x2b47e69b4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x2b47e69b4000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2116736, ...}) = 0
mmap(NULL, 3932672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e69b6000
mprotect(0x2b47e6b6c000, 2097152, PROT_NONE) = 0
mmap(0x2b47e6d6c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x2b47e6d6c000
mmap(0x2b47e6d72000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b47e6d72000
close(3)                                = 0
open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\25\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=402384, ...}) = 0
mmap(NULL, 2494984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e6d77000
mprotect(0x2b47e6dd7000, 2097152, PROT_NONE) = 0
mmap(0x2b47e6fd7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x60000) = 0x2b47e6fd7000
close(3)                                = 0
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=19344, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e618b000
mmap(NULL, 2109744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e6fd9000
mprotect(0x2b47e6fdb000, 2097152, PROT_NONE) = 0
mmap(0x2b47e71db000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x2b47e71db000
close(3)                                = 0
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240l\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=143352, ...}) = 0
mmap(NULL, 2208864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b47e71dd000
mprotect(0x2b47e71f4000, 2093056, PROT_NONE) = 0
mmap(0x2b47e73f3000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x2b47e73f3000
mmap(0x2b47e73f5000, 13408, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b47e73f5000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e618c000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e618d000
arch_prctl(ARCH_SET_FS, 0x2b47e618d040) = 0
mprotect(0x2b47e6d6c000, 16384, PROT_READ) = 0
mprotect(0x2b47e73f3000, 4096, PROT_READ) = 0
mprotect(0x2b47e71db000, 4096, PROT_READ) = 0
mprotect(0x2b47e6fd7000, 4096, PROT_READ) = 0
mprotect(0x2b47e69b4000, 4096, PROT_READ) = 0
mprotect(0x2b47e67af000, 4096, PROT_READ) = 0
mprotect(0x2b47e65a4000, 4096, PROT_READ) = 0
mprotect(0x61d000, 4096, PROT_READ)     = 0
mprotect(0x2b47e637e000, 4096, PROT_READ) = 0
munmap(0x2b47e6180000, 40339)           = 0
set_tid_address(0x2b47e618d310)         = 7136
set_robust_list(0x2b47e618d320, 24)     = 0
rt_sigaction(SIGRTMIN, {0x2b47e71e3780, [], SA_RESTORER|SA_SIGINFO, 0x2b47e71ec370}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x2b47e71e3810, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x2b47e71ec370}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", 0x7ffc274ea2d0) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7ffc274ea2d0)      = -1 ENOENT (No such file or directory)
brk(0)                                  = 0x1508000
brk(0x1529000)                          = 0x1529000
open("/proc/filesystems", O_RDONLY)     = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b47e6180000
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 306
stat("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned", 0x7ffc274ea1b0) = -1 ENOENT (No such file or directory)
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0x2b47e6180000, 4096)            = 0
access("/etc/selinux/config", F_OK)     = 0
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b47e73f9000
close(3)                                = 0
geteuid()                               = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
stat("aaa.pcap", 0x7ffc274ea280)        = -1 ENOENT (No such file or directory)
lstat("test.pcap", {st_mode=S_IFREG|0644, st_size=725, ...}) = 0
lstat("aaa.pcap", 0x7ffc274e9f30)       = -1 ENOENT (No such file or directory)
rename("test.pcap", "aaa.pcap")         = 0
lseek(0, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# stat aaa.pcap 
  File: ‘aaa.pcap’
  Size: 725       	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 1572876     Links: 1
Access: (0644/-rw-r--r--)  Uid: (   72/ tcpdump)   Gid: (   72/ tcpdump)
Access: 2019-05-29 19:01:40.243637117 +0800
Modify: 2019-05-29 19:01:33.687362104 +0800
Change: 2019-07-17 21:01:31.781640173 +0800
 Birth: -
[root@dev02 ~]# 
[root@dev02 ~]# ll -i aaa.pcap 
1572876 -rw-r--r-- 1 tcpdump tcpdump 725 May 29 19:01 aaa.pcap
[root@dev02 ~]# 

2 cp实际是调用了,open文件的方法,先open原文件读文件,然后open目标文件写入读到的内容,两个文件在磁盘上存储的innode号是不一样的。

cp 实例 aaa.pcap bbb.pcap # 1 open方法, 2 inode编号不一样

[root@dev02 ~]# strace cp aaa.pcap bbb.pcap 
execve("/bin/cp", ["cp", "aaa.pcap", "bbb.pcap"], [/* 25 vars */]) = 0
brk(0)                                  = 0x94d000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbed000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=40339, ...}) = 0
mmap(NULL, 40339, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2af7dbbee000
close(3)                                = 0
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320i\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=155784, ...}) = 0
mmap(NULL, 2255184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dbdef000
mprotect(0x2af7dbe13000, 2093056, PROT_NONE) = 0
mmap(0x2af7dc012000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23000) = 0x2af7dc012000
mmap(0x2af7dc014000, 6480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2af7dc014000
close(3)                                = 0
open("/lib64/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\37\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=37056, ...}) = 0
mmap(NULL, 2130560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dc016000
mprotect(0x2af7dc01d000, 2097152, PROT_NONE) = 0
mmap(0x2af7dc21d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x2af7dc21d000
close(3)                                = 0
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\23\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=19888, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbf8000
mmap(NULL, 2113904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dc21f000
mprotect(0x2af7dc223000, 2093056, PROT_NONE) = 0
mmap(0x2af7dc422000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x2af7dc422000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2116736, ...}) = 0
mmap(NULL, 3932672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dc424000
mprotect(0x2af7dc5da000, 2097152, PROT_NONE) = 0
mmap(0x2af7dc7da000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x2af7dc7da000
mmap(0x2af7dc7e0000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2af7dc7e0000
close(3)                                = 0
open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\25\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=402384, ...}) = 0
mmap(NULL, 2494984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dc7e5000
mprotect(0x2af7dc845000, 2097152, PROT_NONE) = 0
mmap(0x2af7dca45000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x60000) = 0x2af7dca45000
close(3)                                = 0
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=19344, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbf9000
mmap(NULL, 2109744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dca47000
mprotect(0x2af7dca49000, 2097152, PROT_NONE) = 0
mmap(0x2af7dcc49000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x2af7dcc49000
close(3)                                = 0
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240l\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=143352, ...}) = 0
mmap(NULL, 2208864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2af7dcc4b000
mprotect(0x2af7dcc62000, 2093056, PROT_NONE) = 0
mmap(0x2af7dce61000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x2af7dce61000
mmap(0x2af7dce63000, 13408, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2af7dce63000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbfa000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbfb000
arch_prctl(ARCH_SET_FS, 0x2af7dbbfb040) = 0
mprotect(0x2af7dc7da000, 16384, PROT_READ) = 0
mprotect(0x2af7dce61000, 4096, PROT_READ) = 0
mprotect(0x2af7dcc49000, 4096, PROT_READ) = 0
mprotect(0x2af7dca45000, 4096, PROT_READ) = 0
mprotect(0x2af7dc422000, 4096, PROT_READ) = 0
mprotect(0x2af7dc21d000, 4096, PROT_READ) = 0
mprotect(0x2af7dc012000, 4096, PROT_READ) = 0
mprotect(0x623000, 4096, PROT_READ)     = 0
mprotect(0x2af7dbdec000, 4096, PROT_READ) = 0
munmap(0x2af7dbbee000, 40339)           = 0
set_tid_address(0x2af7dbbfb310)         = 4997
set_robust_list(0x2af7dbbfb320, 24)     = 0
rt_sigaction(SIGRTMIN, {0x2af7dcc51780, [], SA_RESTORER|SA_SIGINFO, 0x2af7dcc5a370}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x2af7dcc51810, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x2af7dcc5a370}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", 0x7fff243ee480) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7fff243ee480)      = -1 ENOENT (No such file or directory)
brk(0)                                  = 0x94d000
brk(0x96e000)                           = 0x96e000
open("/proc/filesystems", O_RDONLY)     = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7dbbee000
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 306
stat("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned", 0x7fff243ee360) = -1 ENOENT (No such file or directory)
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0x2af7dbbee000, 4096)            = 0
access("/etc/selinux/config", F_OK)     = 0
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2af7dce67000
close(3)                                = 0
geteuid()                               = 0
stat("bbb.pcap", 0x7fff243ee2b0)        = -1 ENOENT (No such file or directory)
stat("aaa.pcap", {st_mode=S_IFREG|0644, st_size=725, ...}) = 0
stat("bbb.pcap", 0x7fff243ee010)        = -1 ENOENT (No such file or directory)
open("aaa.pcap", O_RDONLY)              = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=725, ...}) = 0
open("bbb.pcap", O_WRONLY|O_CREAT|O_EXCL, 0644) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, "\324\303\262\241\2\0\4\0\0\0\0\0\0\0\0\0\377\377\0\0\1\0\0\0\212f\356\\\\C\r\0"..., 65536) = 725
write(4, "\324\303\262\241\2\0\4\0\0\0\0\0\0\0\0\0\377\377\0\0\1\0\0\0\212f\356\\\\C\r\0"..., 725) = 725
read(3, "", 65536)                      = 0
close(4)                                = 0
close(3)                                = 0
lseek(0, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
[root@dev02 ~]# 

[root@dev02 ~]# ll -i bbb.pcap 
1572878 -rw-r--r-- 1 root root 725 Jul 17 21:17 bbb.pcap
[root@dev02 ~]# 
[root@dev02 ~]# 
[root@dev02 ~]# ll -i aaa.pcap 
1572876 -rw-r--r-- 1 tcpdump tcpdump 725 May 29 19:01 aaa.pcap
[root@dev02 ~]#

测试方法:
可以用scp命令限速写入一个文件,在没写完的过程中操作cp、mv命令,
1 如
scp -P 22 -l 200 xxx.json develop@10.x.x.x:/home/develop
2 cp xxx.json a.txt
3 mv xxx.json b.txt
在这里插入图片描述

解决方案:
cp正在写入文件应该加参数,只用cp命令会造成数据不一致问题
cp -l #给文件创建硬链接,所有内容可保持一致
cp -s #软连接

思考:以上操作是在服务器本地存储磁盘上完成的,如果本服务器挂在了其他网络存储设备(如smb)将会是什么结果?

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值