日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 文件 重命名 缓存,linux – rename()原子性和NFS?

發布時間:2023/12/9 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 文件 重命名 缓存,linux – rename()原子性和NFS? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:

Is rename() atomic?

我問的是類似的東西,但不完全相同,因為我想知道的是在使用NFS時依賴于rename()的原子性是否安全?

這是我正在處理的一個場景 – 我有一個必須始終存在的’索引’文件.

所以:

>客戶端創建一個新文件

>客戶端通過“舊”索引文件重命名新文件.

獨立客戶:

>讀取索引文件

>指基于索引的磁盤結構.

這假設rename()是原子意味著 – 總會有一個’索引’文件(盡管它可能是一個過時的版本,因為緩存和時間)

但是我遇到的問題是 – 這發生在NFS上 – 并且正在工作 – 但我的幾個NFS客戶端偶爾會報告“ENOENT” – 沒有這樣的文件或目錄. (例如,在每隔5米發生的數百次操作中,我們每隔幾天就會收到此錯誤).

所以我希望是否有人能夠啟發我 – 在這種情況下,實際上是否真的不可能獲得’ENOENT’?

我問的原因是RFC 3530這個條目:

The RENAME operation must be atomic to the client.

我想知道這是否只是發出重命名的客戶端,而不是查看目錄的客戶端? (我對緩存/過時的目錄結構沒問題,但是這個操作的重點是這個文件總是以某種形式“存在”)

操作順序(來自執行寫操作的客戶端)是:

21401 14:58:11 open("fleeg.ext", O_RDWR|O_CREAT|O_EXCL, 0666) = -1 EEXIST (File exists) <0.000443>

21401 14:58:11 open("fleeg.ext", O_RDWR) = 3 <0.000547>

21401 14:58:11 fstat(3, {st_mode=S_IFREG|0600, st_size=572, ...}) = 0 <0.000012>

21401 14:58:11 fadvise64(3, 0, 572, POSIX_FADV_RANDOM) = 0 <0.000008>

21401 14:58:11 fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=1, len=1}) = 0 <0.001994>

21401 14:58:11 open("fleeg.ext.i", O_RDWR|O_CREAT, 0666) = 4 <0.000538>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000008>

21401 14:58:11 fadvise64(4, 0, 42, POSIX_FADV_RANDOM) = 0 <0.000006>

21401 14:58:11 close(4) = 0 <0.000011>

21401 14:58:11 fstat(3, {st_mode=S_IFREG|0600, st_size=572, ...}) = 0 <0.000007>

21401 14:58:11 open("fleeg.ext.i", O_RDONLY) = 4 <0.000577>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000007>

21401 14:58:11 fadvise64(4, 0, 42, POSIX_FADV_RANDOM) = 0 <0.000006>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000007>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000007>

21401 14:58:11 read(4, "\3PAX\1\0\0O}\270\370\206\20\225\24\22\t\2\0\203RD\0\0\0\0\17\r\0\2\0\n"..., 42) = 42 <0.000552>

21401 14:58:11 close(4) = 0 <0.000013>

21401 14:58:11 fcntl(3, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=466, len=68}) = 0 <0.001418>

21401 14:58:11 pread(3, "\21@\203\244I\240\333\272\252d\316\261\3770\361#\222\200\313\224&J\253\5\354\217-\256LA\345\253"..., 38, 534) = 38 <0.000010>

21401 14:58:11 pread(3, "\21@\203\244I\240\333\272\252d\316\261\3770\361#\222\200\313\224&J\253\5\354\217-\256LA\345\253"..., 38, 534) = 38 <0.000010>

21401 14:58:11 pread(3, "\21\"\30\361\241\223\271\256\317\302\363\262F\276]\260\241-x\227b\377\205\356\252\236\211\37\17.\216\364"..., 68, 466) = 68 <0.000010>

21401 14:58:11 pread(3, "\21\302d\344\327O\207C]M\10xxM\377\2340\0319\206k\201N\372\332\265R\242\313S\24H"..., 62, 300) = 62 <0.000011>

21401 14:58:11 pread(3, "\21\362cv'\37\204]\377q\362N\302/\212\255\255\370\200\236\350\2237>7i`\346\271Cy\370"..., 104, 362) = 104 <0.000010>

21401 14:58:11 pwrite(3, "\21\302\3174\252\273.\17\v\247\313\324\267C\222P\303\n~\341F\24oh/\300a\315\n\321\31\256"..., 127, 572) = 127 <0.000012>

21401 14:58:11 pwrite(3, "\21\212Q\325\371\223\235\256\245\247\\WT$\4\227\375[\\\3263\222\0305\0\34\2049A;2U"..., 68, 699) = 68 <0.000009>

21401 14:58:11 pwrite(3, "\21\262\20Kc(!.\350\367i\253hkl~\254\335H\250.d\0036\r\342\v\242\7\255\214\31"..., 38, 767) = 38 <0.000009>

21401 14:58:11 fsync(3) = 0 <0.001007>

21401 14:58:11 fstat(3, {st_mode=S_IFREG|0600, st_size=805, ...}) = 0 <0.000009>

21401 14:58:11 open("fleeg.ext.i.tmp", O_RDWR|O_CREAT|O_TRUNC, 0666) = 4 <0.001813>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0 <0.000007>

21401 14:58:11 fadvise64(4, 0, 0, POSIX_FADV_RANDOM) = 0 <0.000007>

21401 14:58:11 write(4, "\3PAX\1\0\0qT2\225\226\20\225\24\22\t\2\0\205;D\0\0\0\0\17\r\0\2\0\n"..., 42) = 42 <0.000012>

21401 14:58:11 stat("fleeg.ext.i", {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000011>

21401 14:58:11 fchmod(4, 0100600) = 0 <0.002517>

21401 14:58:11 fstat(4, {st_mode=S_IFREG|0600, st_size=42, ...}) = 0 <0.000008>

21401 14:58:11 close(4) = 0 <0.000011>

21401 14:58:11 rename("fleeg.ext.i.tmp", "fleeg.pax.i") = 0 <0.001201>

21401 14:58:11 close(3) = 0 <0.000795>

21401 14:58:11 munmap(0x7f1475cce000, 4198400) = 0 <0.000177>

21401 14:58:11 munmap(0x7f14760cf000, 4198400) = 0 <0.000173>

21401 14:58:11 futex(0x7f147cbcb908, FUTEX_WAKE_PRIVATE, 2147483647) = 0 <0.000010>

21401 14:58:11 exit_group(0) = ?

21401 14:58:11 +++ exited with 0 +++

注意 – 上面重命名的路徑和文件是為了保持一致性. fleeg.ext是數據文件,fleeg.ext.i是索引.在此過程中 – fleeg.ext.i文件被覆蓋(由.tmp文件),這就是為什么相信該路徑上應該始終存在一個文件(舊文件或剛被覆蓋的新文件)它).

在閱讀客戶端上,PCAP看起來像LOOKUP NFS調用是失敗的:

124 1.375777 10.10.41.35 -> 10.10.41.9 NFS 226 LOOKUP fleeg.ext.i V3 LOOKUP Call, DH: 0x6fbbff3a/fleeg.ext.i

125 1.375951 10.10.41.9 -> 10.10.41.35 NFS 186 5347 LOOKUP 0775 Directory V3 LOOKUP Reply (Call In 124) Error: NFS3ERR_NOENT

126 1.375975 10.10.41.35 -> 10.10.41.9 NFS 226 LOOKUP fleeg.ext.i V3 LOOKUP Call, DH: 0x6fbbff3a/fleeg.ext.i

127 1.376142 10.10.41.9 -> 10.10.41.35 NFS 186 5347 LOOKUP 0775 Directory V3 LOOKUP Reply (Call In 126) Error: NFS3ERR_NOENT

總結

以上是生活随笔為你收集整理的linux 文件 重命名 缓存,linux – rename()原子性和NFS?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。