Apakah atom saya ada pada fs saya?

12

Bagaimana saya bisa mengecek apakah mvatom 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.

Tizianoreica
sumber
Sudahkah Anda mencoba strace?
Wildcard

Jawaban:

8

Cukup menarik, sepertinya jawabannya mungkin, "Itu tergantung".

Agar jelas, mvditentukan untuk

The mvutilitas akan melakukan tindakan setara dengan rename() fungsi

The fungsi rename spesifikasi negara:

Ini rename()fungsi setara untuk file biasa dengan yang didefinisikan oleh standar ISO C. Dimasukkannya di sini memperluas definisi itu untuk memasukkan tindakan pada direktori dan menentukan perilaku ketika parameter baru menamai file yang sudah ada. Spesifikasi itu mensyaratkan aksi fungsi menjadi atom.

Tetapi spesifikasi ISO C terbaru untuk rename()negara:

7.21.4.2 renameFungsi

Ringkasan

#include <stdio.h>
int rename(const char *old, const char *new);

Deskripsi

The renameFungsi menyebabkan file yang namanya string ditunjukkan oleh olduntuk selanjutnya dikenal dengan nama yang diberikan oleh string ditunjukkan oleh new. File bernama oldtidak lagi dapat diakses dengan nama itu. Jika file bernama oleh string yang ditunjukkan oleh newada sebelum panggilan ke renamefungsi, perilaku didefinisikan-implementasi.

Kembali

The renamefungsi kembali nol jika operasi berhasil, nol jika gagal, dalam hal jika file ada sebelumnya itu masih dikenal dengan nama aslinya.

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 :

Jika newpathsudah ada, itu akan diganti secara atom, sehingga tidak ada titik di mana proses lain yang mencoba mengakses newpathakan menemukannya hilang. Namun, mungkin akan ada jendela di mana keduanya oldpathdan newpathmerujuk ke file yang diubah namanya.

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 mvutilitas untuk menegakkan itu.

Andrew Henle
sumber
Saya harus memastikan bahwa gerakan itu atom. Apakah Pengujian cukup untuk menerima ini? Saya tidak tahu. Ya, saya sedang mengerjakan fs yang sama (ext4 ke ext4).
Tizianoreica
1
POSIX juga tidak menjamin atomicity, tetapi Linux, seperti kebanyakan varian unix, juga, untuk sistem file "asli" seperti ext4.
Gilles 'SANGAT berhenti menjadi jahat'
1
Mengingat bahwa ISO C hanya mendefinisikan perilaku satu program dan bukan dari keseluruhan sistem, akan aneh baginya untuk mengatakan apa pun tentang renameatomicity.
Gilles 'SANGAT berhenti menjadi jahat'
3
Saya membaca "spesifikasi itu" mengacu pada kalimat sebelumnya ("Termasuk di sini ... menentukan perilaku ketika parameter baru memberi nama file yang sudah ada"), yang merujuk bagian-bagian sebelumnya dari dokumen POSIX ("tautan yang diberi nama baru harus tetap terlihat oleh utas lainnya di seluruh ... dan merujuk ke file yang dirujuk oleh baru atau lama ... "). Dengan kata lain, POSIX berjanji untuk menerapkan standar ISO C, dan membuat jaminan tambahan di luar apa yang disediakan ISO C. Apakah penafsiran itu membantu?
SimonJ
1
@Tizianoreica Saya tahu ini adalah tulisan kuno, tapi saya baru saja melihat komentar Anda dan saya pikir saya harus mengklarifikasi: Sistem file yang sebenarnya harus sama agar nama diubah menjadi atom. Bukan hanya tipe sistem file yang sama. misalnya jika Anda memiliki /ext4 fs dan /tmpsebagai ext4 fs yang berbeda maka Anda tidak dapat secara atom mv dari satu ke yang lain.
Wodin
0

mvdidasarkan pada renamepanggilan sistem dan rename()atom. Anda bisa melihat halaman manualnya rename(2).

Anda dapat menemukan jawabannya di Is rename () atomic? pada stackoverflow.

Jenis fs apa, yang Anda gunakan?

xtrmz
sumber
fs adalah ext4 - os sudah ditentukan.
Tizianoreica
-1

Selain memeriksa panggilan sistem dan atomisitasnya, mungkin inotify-toolsdapat berfungsi sebagai tes, meskipun saya tidak yakin apakah itu merupakan bukti jaminan atomisitas.

Buka 2 kerang. Tonton direktori target perpindahan di salah satunya:

inotifywait -m target/

Pindahkan file ke direktori yang lain:

mv foobar target/

The inotifywaitharus menunjukkan hanya satu baris:

target/ MOVED_TO foobar

Tampaknya atom dibandingkan dengan respons terhadap ls target/dan touch target/a, yang menghasilkan pesan multiline seperti:

# the response to ls target/
target/ OPEN,ISDIR 
target/ ACCESS,ISDIR 
target/ CLOSE_NOWRITE,CLOSE,ISDIR 

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 setelah inotifymemberikan sinyal terakhir setelah operasi. Misalnya, pengaturan produsen-konsumen dapat diimplementasikan dengan mudah dan aman bersama inotify.

xealits
sumber