Bagikan melalui


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.
  • 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.
  • 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.

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 SharingViolationkesalahan . Klien SMB masih membuka file, dan menolak akses Baca/Hapus.
  • 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 SharingViolationkesalahan . Klien SMB masih membuka file, dan menolak akses Tulis/Hapus.

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 SharingViolationkesalahan . 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:

  • Buat File
  • Dapatkan File
  • Atur Properti File
  • Atur Metadata File
  • Hapus File
  • Letakkan Rentang
  • Rentang Daftar
  • File Sewa
Shared Read

Deny Write, Delete)
Operasi tulis, sewa, dan hapus berikut pada file akan gagal:

  • Buat File
  • Atur Properti File
  • Atur Metadata File
  • Hapus File
  • Letakkan Rentang
  • File Sewa
Shared Write

(Deny Read, Delete)
Operasi baca, sewa, dan hapus berikut pada file akan gagal:

  • Buat File
  • Dapatkan File
  • Hapus File
  • Rentang Daftar
  • File Sewa
Shared Delete

(Deny Read, Write)
Operasi baca, tulis, dan sewa berikut pada file akan gagal:

  • Buat File
  • Dapatkan File
  • Atur Properti File
  • Atur Metadata File
  • Letakkan Rentang
  • Rentang Daftar
  • Hapus File
  • File Sewa
Shared Read/Write

(Deny Delete)
Operasi sewa dan penghapusan berikut pada file akan gagal:

  • Buat File
  • Hapus File
  • File Sewa
Shared Read/Delete

(Deny Write)
Operasi tulis, sewa, dan hapus berikut pada file akan gagal:

  • Buat File
  • Atur Properti File
  • Atur Metadata File
  • Letakkan Rentang
  • Hapus File
  • File Sewa
Shared Write/Delete

(Deny Read)
Operasi baca dan sewa berikut pada file akan gagal:

  • Dapatkan File
  • Rentang Daftar
  • Hapus File
  • File Sewa
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 SharingViolationkesalahan . 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:

  • FileAccess.Write
  • FileAccess.Delete
  • FileAccess.Read|FileAccess.Write
  • FileAccess.Write|FileAccess.Delete
  • FileAccess.Read|FileAccess.Write|FileAccess.Delete
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 SMBDeletePendingkesalahan . 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 ReadOnlyAttributekesalahan . 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 ClientCacheFlushDelaykesalahan .

Bagian berikut membahas skenario di mana oplock rusak.

Pembobolan oplock dan flush klien SMB diperlukan, dan klien REST mengalami penundaan

Pertimbangkan contoh berikut:

  1. Klien SMB membuka file, memperoleh oplock RWH, dan menulis data secara lokal.

  2. 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:

  1. Klien SMB telah memperoleh RH oplock.

  2. 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 ClientCacheFlushDelaykesalahan .

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 SharingViolationkesalahan .

Lihat juga

konsep Azure Files