Mengelola kunci file
Azure Files menyediakan akses ke berbagi file cloud melalui protokol berikut:
- Server Message Block (SMB)
- Sistem File Jaringan (NFS)
- FileREST (HTTPS)
Topik ini menjelaskan cara mengelola interaksi penguncian file antara SMB dan FileREST. Berbagi file NFS memiliki semantik penguncian yang berbeda, dan mendukung subset API FileREST. Topik ini tidak berlaku untuk berbagi file NFS.
Penguncian file SMB
Klien SMB yang memasang berbagi file dapat menggunakan mekanisme penguncian sistem file untuk mengelola akses ke file bersama. Ini termasuk:
- Seluruh berbagi akses file untuk dibaca, ditulis, dan dihapus.
- Kunci rentang byte untuk mengelola akses baca dan tulis ke wilayah dalam satu file.
Saat klien SMB membuka file, klien menentukan akses file dan mode berbagi. Opsi akses file berikut biasanya digunakan oleh klien SMB, meskipun semua kombinasi diizinkan:
- Tidak: Membuka file untuk akses atribut kueri saja.
- Membaca: Membuka file untuk akses baca saja.
- Menulis: Membuka file untuk akses tulis saja.
- Baca/Tulis: Membuka file dengan izin baca/tulis.
- Menghapus: Membuka file hanya untuk menghapus akses.
Mode berbagi file berikut biasanya digunakan oleh klien SMB:
- Tidak: Menolak berbagi berkas saat ini. Setiap permintaan untuk membuka file dengan akses baca, tulis, atau hapus akan gagal, hingga file ditutup.
- Baca Bersama: Memungkinkan pembukaan file berikutnya untuk dibaca. Jika bendera ini tidak ditentukan, permintaan apa pun untuk membuka file untuk dibaca akan gagal, hingga file ditutup.
- Tulis Bersama: Memungkinkan pembukaan file berikutnya untuk ditulis. Jika bendera ini tidak ditentukan, permintaan apa pun untuk membuka file untuk penulisan akan gagal, sampai file ditutup.
- Baca/Tulis Bersama: Memungkinkan pembukaan file berikutnya untuk membaca atau menulis. Jika bendera ini tidak ditentukan, permintaan apa pun untuk membuka file untuk dibaca atau ditulis akan gagal, sampai file ditutup.
- Hapus Bersama: Memungkinkan penghapusan file berikutnya. Jika bendera ini tidak ditentukan, permintaan apa pun untuk menghapus file akan gagal, hingga file ditutup.
Contoh file terbuka klien SMB
Pertimbangkan contoh file terbuka berikut:
File terbuka tanpa pelanggaran berbagi
- Klien A membuka file dengan
FileAccess.Read
dan FileShare.Write (menolak Baca/Hapus berikutnya saat terbuka). - Klien B kemudian membuka file dengan
FileAccess.Write
FileShare.Read (menolak Tulis/Hapus berikutnya saat terbuka). - Hasil: Ini diperbolehkan, karena tidak ada konflik antara akses file dan mode berbagi file.
- Klien A membuka file dengan
Pelanggaran berbagi karena akses file
- Klien A membuka file dengan
FileAccess.Write
dan FileShare.Read (menolak Tulis/Hapus berikutnya saat terbuka). - Klien B kemudian membuka file dengan
FileAccess.Write
FileShare.Write (menolak Baca/Hapus berikutnya saat terbuka). - Hasil: Klien B mengalami pelanggaran berbagi. Klien menentukan akses file yang ditolak oleh mode berbagi yang ditentukan sebelumnya oleh Klien A.
- Klien A membuka file dengan
Pelanggaran berbagi karena mode berbagi
- Klien A membuka file dengan
FileAccess.Write
dan FileShare.Write (menolak Baca/Hapus berikutnya saat terbuka). - Klien B kemudian membuka file dengan
FileAccess.Write
FileShare.Read (menolak Tulis/Hapus berikutnya saat terbuka). - Hasil: Klien B mengalami pelanggaran berbagi. Klien menentukan mode berbagi yang menolak akses tulis ke file yang masih terbuka untuk akses tulis.
- Klien A membuka file dengan
Akses file FileREST
Saat Anda melakukan operasi FileREST, operasi ini harus mematuhi mode berbagi yang ditentukan untuk setiap file yang terbuka pada klien SMB. Gunakan mode akses file berikut untuk menentukan apakah operasi dapat diselesaikan:
Operasi FileREST | Akses file setara |
---|---|
Daftar Direktori dan File | T/A. |
Buat File | Tulis, Hapus. |
Dapatkan File | Baca. |
Atur Properti File | Tulis. |
Dapatkan Properti File | T/A. |
Atur Metadata File | Tulis. |
Dapatkan Metadata File | T/A. |
Hapus File | Hapus. |
Letakkan Rentang | Tulis. |
Rentang Daftar | Baca. |
File Sewa | Tulis, Hapus, dan Baca Bersama selama durasi sewa. |
Daftar Direktori dan File, Dapatkan Properti File, dan Dapatkan Metadata File tidak beroperasi pada konten file. Operasi ini tidak memerlukan akses baca ke file (artinya, operasi ini berhasil bahkan jika klien SMB membuka file untuk akses baca eksklusif).
Berikut ini adalah contoh permintaan FileREST yang berinteraksi dengan mode berbagi SMB:
Pelanggaran Berbagi FileREST Get File
- Klien SMB membuka file dengan
FileAccess.Read
dan FileShare.Write (menolak Baca/Hapus berikutnya saat terbuka). - Klien REST kemudian melakukan operasi Dapatkan File pada file (dengan demikian menggunakan
FileAccess.Read
seperti yang ditentukan dalam tabel sebelumnya). -
Hasil: Permintaan klien REST gagal dengan kode status 409 (Konflik), dan kode
SharingViolation
kesalahan . Klien SMB masih membuka file, dan menolak akses Baca/Hapus.
- Klien SMB membuka file dengan
Pelanggaran berbagi FileREST Put Range
- Klien SMB membuka file dengan
FileAccess.Write
dan FileShare.Read (menolak Tulis/Hapus berikutnya saat terbuka). - Klien REST kemudian melakukan operasi Put Range pada file (sehingga menggunakan
FileAccess.Write
seperti yang ditentukan dalam tabel sebelumnya). -
Hasil: Permintaan klien REST gagal dengan kode status 409 (Konflik), dan kode
SharingViolation
kesalahan . Klien SMB masih membuka file, dan menolak akses Tulis/Hapus.
- Klien SMB membuka file dengan
Bagian berikutnya mencakup tabel komprehensif skenario pelanggaran berbagi FileREST API.
Implikasi mode berbagi klien SMB pada FileREST
Bergantung pada mode berbagi yang Anda tentukan ketika klien SMB membuka file, FileREST dapat mengembalikan kode status 409 (Konflik) dengan kode SharingViolation
kesalahan . Tabel berikut ini mencantumkan sejumlah skenario.
Mode berbagi file klien SMB | Operasi FileREST gagal dengan pelanggaran berbagi |
---|---|
None (Deny Read, Write, Delete) |
Operasi baca, tulis, sewa, dan hapus berikut pada file akan gagal:
|
Shared Read Deny Write, Delete) |
Operasi tulis, sewa, dan hapus berikut pada file akan gagal:
|
Shared Write (Deny Read, Delete) |
Operasi baca, sewa, dan hapus berikut pada file akan gagal:
|
Shared Delete (Deny Read, Write) |
Operasi baca, tulis, dan sewa berikut pada file akan gagal:
|
Shared Read/Write (Deny Delete) |
Operasi sewa dan penghapusan berikut pada file akan gagal:
|
Shared Read/Delete (Deny Write) |
Operasi tulis, sewa, dan hapus berikut pada file akan gagal:
|
Shared Write/Delete (Deny Read) |
Operasi baca dan sewa berikut pada file akan gagal:
|
Shared Read/Write/Delete (Deny Nothing) |
Hapus File |
Azure Files mengembalikan pelanggaran berbagi hanya ketika file terbuka pada klien SMB. Agar operasi FileREST Delete File berhasil, tidak boleh ada klien SMB dengan handel yang terbuka terhadap file tersebut. Untuk informasi selengkapnya, lihat operasi Hapus File dan Interaksi antara Kunci oportunistik FileREST dan SMB.
Implikasi penguncian file SMB pada FileREST Lease File API
Bergantung pada opsi akses file yang Anda tentukan ketika klien SMB membuka file, dimungkinkan bagi FileREST Lease File API untuk mengembalikan kode status 409 (Konflik), dengan kode SharingViolation
kesalahan . Tabel berikut ini menyediakan informasi lebih lanjut:
Opsi akses file klien SMB | Memperoleh sewa pada file tanpa sewa aktif dengan LEASE File API |
---|---|
Tidak ada | Berhasil |
Read | Berhasil |
Write | Gagal karena SharingViolation |
Hapus | Gagal karena SharingViolation |
Baca|Menulis | Gagal karena SharingViolation |
Baca|Menghapus | Gagal karena SharingViolation |
Tulis|Menghapus | Gagal karena SharingViolation |
Baca|Tulis|Menghapus | Gagal karena SharingViolation |
Azure Files mengembalikan pelanggaran berbagi hanya ketika file terbuka pada klien SMB. Perhatikan bahwa agar operasi File Sewa FileREST berhasil, tidak boleh ada klien SMB dengan handel Tulis atau Hapus yang terbuka terhadap file tersebut. Untuk informasi selengkapnya, lihat operasi Sewa File dan Interaksi antara FileREST dan kunci oportunistik SMB.
Implikasi File Sewa FileREST untuk penguncian file SMB
Sewa pada file menyediakan akses tulis dan hapus eksklusif ke file. Ketika klien SMB membuka file, klien harus menghormati kunci untuk file apa pun yang disewa oleh operasi File Sewa FileREST. Anda dapat menggunakan tabel berikut untuk menentukan apakah operasi file terbuka SMB dapat diselesaikan:
Status sewa file FileREST | Operasi SMB gagal dengan pelanggaran berbagi |
---|---|
Disewakan | Klien SMB yang membuka file dengan akses file berikut akan gagal:
|
Tersedia | Tidak ada |
Rusak | Tidak ada |
Implikasi penghapusan SMB pada FileREST
Ketika klien SMB membuka file untuk dihapus, ia menandai file sebagai penghapusan yang tertunda, hingga semua handel terbuka klien SMB lainnya pada file tersebut ditutup. Meskipun file ditandai sebagai penghapusan tertunda, operasi FileREST apa pun pada file tersebut akan mengembalikan kode status 409 (Konflik), dengan kode SMBDeletePending
kesalahan . Kode status 404 (Tidak Ditemukan) tidak dikembalikan, karena klien SMB dapat menghapus bendera penghapusan yang tertunda sebelum menutup file. Dengan kata lain, kode status 404 (Tidak Ditemukan) hanya diharapkan ketika file telah dihapus.
Saat file berada dalam status penghapusan tertunda SMB, file tidak akan disertakan dalam hasil List Files
.
Perhatikan juga bahwa FileREST Delete File
dan Delete Directory
operasi diterapkan secara atomik, dan tidak mengakibatkan status penghapusan tertunda.
Implikasi atribut file pada FileREST
Klien SMB dapat membaca dan mengatur atribut file, termasuk:
- Arsipkan
- Baca-saja
- Tersembunyi
- Sistem
Jika file atau direktori ditandai baca-saja, maka setiap operasi FileREST yang mencoba menulis ke file akan gagal dengan kode status 412 (Prasyarat Gagal), dan kode ReadOnlyAttribute
kesalahan . Operasi ini meliputi:
Create File
Set File Properties
Set File Metadata
Put Range
Atribut file ini tidak dapat diatur atau dibaca dari klien REST. Setelah file dibuat baca-saja, klien REST tidak dapat menulis ke file sampai klien SMB menghapus atribut baca-saja.
Interaksi antara kunci oportunistik FileREST dan SMB
Kunci oportunistik SMB (oplock) adalah mekanisme penembolokan yang diminta klien SMB untuk meningkatkan performa dan mengurangi transfer jaringan. Klien SMB dapat menyimpan cache status terbaru dari file atau direktori tertentu. Ada beberapa jenis kunci oportunistik, yang disebut sebagai jenis sewa SMB:
- Baca (R): Klien SMB dapat membaca dari cache lokal.
- Tulis (W): Klien SMB dapat menulis secara lokal, tanpa perlu menghapus data kembali ke berbagi file Azure.
- Handel (H): Klien SMB tidak diperlukan untuk segera memberi tahu berbagi file Azure saat handel ditutup. Jenis kunci ini berguna ketika aplikasi terus membuka dan menutup file dengan mode akses dan berbagi yang sama.
Jenis sewa ini tidak bergantung pada mode akses dan berbagi yang ditentukan. Biasanya, klien SMB mencoba memperoleh semua jenis sewa setiap kali membuka handel baru terhadap file, terlepas dari mode akses dan berbagi.
Bergantung pada operasi FileREST yang dipanggil, Anda mungkin perlu meminta untuk merusak kunci oportunistik yang ada. Dalam kasus oplock tulis, klien SMB harus menghapus perubahan cache pada berbagi file Azure. Berikut adalah beberapa kasus di mana setiap jenis oplock perlu dipecah:
Oplock Baca (R) perlu dipecah setiap kali operasi tulis dikeluarkan, seperti
Put Range
.Oplock Tulis (W) perlu dipecah setiap kali operasi baca dikeluarkan, seperti
Get File
.Oplock Handel (H) perlu dipecah setiap kali klien mengeluarkan operasi penghapusan. Azure Files mengharuskan tidak ada handel yang dapat dibuka jika operasi penghapusan berhasil.
Menangani oplock juga rusak ketika operasi FileREST menghadapi pelanggaran berbagi dengan handel SMB yang ada. Ini terjadi untuk memverifikasi bahwa handel masih dibuka oleh aplikasi yang berjalan pada klien.
Melanggar oplock mungkin memerlukan pembuangan perubahan klien SMB yang di-cache, yang dapat menyebabkan penundaan waktu respons operasi. Pembersihan juga dapat menyebabkan operasi gagal dengan kode status 408 (Waktu Permintaan Habis), dan kode ClientCacheFlushDelay
kesalahan .
Bagian berikut membahas skenario di mana oplock rusak.
Pembobolan oplock dan flush klien SMB diperlukan, dan klien REST mengalami penundaan
Pertimbangkan contoh berikut:
Klien SMB membuka file, memperoleh oplock RWH, dan menulis data secara lokal.
Klien REST mengirimkan
Get File
permintaan.- Berbagi file Azure merusak oplock tulis (W), meninggalkan klien dengan RH oplock.
- Klien SMB menghapus data cache-nya terhadap berbagi file Azure, dan mengakui jeda oplock.
- Berbagi file Azure memproses
Get File
permintaan dan merespons kembali dengan data yang diminta.
Dalam contoh ini, klien REST mengalami penundaan. Situasi ini disebabkan oleh jeda oplock, dan waktu yang dibutuhkan oleh klien SMB untuk membersihkan datanya terhadap berbagi file Azure.
Panggilan berikutnya untuk Get File
tidak mengalami penundaan tambahan, karena oplock tulis (W) telah rusak.
Diperlukan jeda oplock, tetapi klien REST tidak akan mengalami penundaan
Pertimbangkan contoh berikut:
Klien SMB telah memperoleh RH oplock.
Klien REST mengirimkan
Put Range
permintaan.- Berbagi file Azure mengirimkan permintaan jeda oplock ke klien SMB, dan tidak menunggu respons.
- Berbagi file Azure memproses
Put Range
permintaan.
Dalam contoh ini, pemutusan oplock diperlukan, tetapi Put Range
permintaan tidak mengalami penundaan tambahan. Respons tidak diperlukan saat melanggar oplock baca.
perilaku Azure Files
Tabel berikut ini meringkas perilaku Azure Files untuk setiap operasi FileREST. Perilaku ini didasarkan pada status oplock klien SMB yang telah memperoleh handel pada file yang sama. Selain itu, perilaku mengasumsikan bahwa SMB menangani akses dan berbagi tidak bertentangan dengan operasi FileREST.
Jika ada konflik, handel oplock juga rusak untuk memastikan bahwa handel masih terbuka pada klien. Dalam kasus pemblokiran oplock break, Azure Files harus menunggu pengakuan bahwa jeda berhasil. Dalam kasus jeda oplock yang tidak memblokir, Azure Files tidak perlu menunggu.
Operasi FileREST | Jenis oplock saat ini | Oplock break dilakukan | Oplock yang dihasilkan |
---|---|---|---|
Dapatkan File | RWH | Ya (Pemblokiran) | RH |
Dapatkan File | RH | Tidak | RH |
Dapatkan File | RW | Ya (Pemblokiran) | R |
Dapatkan Properti File | RWH | Ya (Pemblokiran) | RH |
Dapatkan Properti File | RH | Tidak | RH |
Dapatkan Properti File | RW | Ya (Pemblokiran) | R |
Rentang Daftar | RWH | Ya (Pemblokiran) | RH |
Rentang Daftar | RH | Tidak | RH |
Rentang Daftar | RW | Ya (Pemblokiran) | R |
Dapatkan Metadata File | RWH | Ya (Pemblokiran) | RH |
Dapatkan Metadata File | RH | Tidak | RH |
Dapatkan Metadata File | RW | Ya (Pemblokiran) | R |
Cantumkan File | RWH | Tidak | RWH |
Cantumkan File | RH | Tidak | RH |
Cantumkan File | RW | Tidak | RW |
Letakkan Rentang | RWH | Ya (Pemblokiran) | Tidak ada |
Letakkan Rentang | RH | Ya (Non-Pemblokiran) | Tidak ada |
Letakkan Rentang | RW | Ya (Pemblokiran) | Tidak ada |
Atur Properti File | RWH | Ya (Pemblokiran) | Tidak ada |
Atur Properti File | RH | Ya (Non-Pemblokiran) | Tidak ada |
Atur Properti File | RW | Ya (Pemblokiran) | Tidak ada |
Atur Metadata File | RWH | Ya (Pemblokiran) | Tidak ada |
Atur Metadata File | RH | Ya (Non-Pemblokiran) | Tidak ada |
Atur Metadata File | RW | Ya (Pemblokiran) | Tidak ada |
Hapus File | RWH | Ya (Pemblokiran) | RW |
Hapus File | RH | Ya (Pemblokiran) | R |
Hapus File | RW | Tidak | RW |
Dalam kasus di mana pemblokiran oplock break diperlukan, dalam kondisi tertentu, operasi FileREST gagal. Jika jeda tidak berhasil dalam batas waktu permintaan yang ditentukan, atau dalam 30 detik, mana pun yang selesai terlebih dahulu, layanan mengembalikan kode status 408 (Batas Waktu Permintaan), dan kode ClientCacheFlushDelay
kesalahan .
Permintaan ini Delete File
juga memerlukan pemecahan sewa handel oplock (H). Melanggar handel memastikan bahwa tidak ada handel file yang masih dibuka oleh aplikasi klien SMB saat klien REST memanggil Delete File
. Jika ada pelanggaran berbagi, permintaan gagal dengan kode status 409 (Konflik), dan kode SharingViolation
kesalahan .