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 [email protected]:/home/develop
2 cp xxx.json a.txt
3 mv xxx.json b.txt
在這裏插入圖片描述

解決方案:
cp正在寫入文件應該加參數,只用cp命令會造成數據不一致問題
cp -l #給文件創建硬鏈接,所有內容可保持一致
cp -s #軟連接

思考:以上操作是在服務器本地存儲磁盤上完成的,如果本服務器掛在了其他網絡存儲設備(如smb)將會是什麼結果?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章