Bagaimana saya bisa mengecek apakah mv
atom di fs (ext4) saya?
OS adalah Red Hat Enterprise Linux Server rilis 6.8.
Secara umum, bagaimana saya bisa memeriksanya? Saya telah melihat sekeliling, dan tidak menemukan apakah OS saya adalah POSIX standar.
strace
?unlink
atau mudahrename
dibawa dan secara atomis membuatlink
kegagalan?Jawaban:
Cukup menarik, sepertinya jawabannya mungkin, "Itu tergantung".
Agar jelas,
mv
ditentukan untukThe fungsi rename spesifikasi negara:
Tetapi spesifikasi ISO C terbaru untuk
rename()
negara:Anehnya, perhatikan bahwa tidak ada persyaratan eksplisit untuk atomisitas. Mungkin diperlukan di tempat lain dalam Standar C terbaru yang tersedia untuk umum, tetapi saya belum dapat menemukannya. Jika ada yang dapat menemukan persyaratan seperti itu, suntingan dan komentar lebih dari diterima.
Lihat juga Apakah ganti nama () atomik?
Per halaman manual Linux :
Halaman manual Linux mengklaim bahwa penggantian file tersebut adalah atom.
Menguji dan memverifikasi bahwa atomisitas mungkin sangat sulit, jika itu sejauh yang Anda butuhkan. Anda tidak jelas apa yang Anda maksudkan dalam penggunaan "Bagaimana saya bisa memeriksa apakah mv adalah atom". Apakah Anda ingin persyaratan / spesifikasi / dokumentasi yang atomik, atau Anda perlu benar-benar mengujinya ?
Catatan juga, di atas mengasumsikan dua nama file operan berada di sistem file yang sama. Saya tidak dapat menemukan batasan standar pada
mv
utilitas untuk menegakkan itu.sumber
rename
atomicity./
ext4 fs dan/tmp
sebagai ext4 fs yang berbeda maka Anda tidak dapat secara atom mv dari satu ke yang lain.mv
didasarkan padarename
panggilan sistem danrename()
atom. Anda bisa melihat halaman manualnyarename(2)
.Anda dapat menemukan jawabannya di Is rename () atomic? pada stackoverflow.
Jenis fs apa, yang Anda gunakan?
sumber
Selain memeriksa panggilan sistem dan atomisitasnya, mungkin
inotify-tools
dapat berfungsi sebagai tes, meskipun saya tidak yakin apakah itu merupakan bukti jaminan atomisitas.Buka 2 kerang. Tonton direktori target perpindahan di salah satunya:
Pindahkan file ke direktori yang lain:
The
inotifywait
harus menunjukkan hanya satu baris:Tampaknya atom dibandingkan dengan respons terhadap
ls target/
dantouch target/a
, yang menghasilkan pesan multiline seperti:PS
Saya pikir, setidaknya itu menunjukkan bahwa kerja sama multi-proses asinkron pada file aman dengan
inotify
(praktis atom): dalam hal apapun Anda akan merespons hanya setelahinotify
memberikan sinyal terakhir setelah operasi. Misalnya, pengaturan produsen-konsumen dapat diimplementasikan dengan mudah dan aman bersamainotify
.sumber