Aracılığıyla paylaş


Linux'ta (SMB) Azure Dosyalar sorunlarını giderme

Bu makalede, Linux istemcileriyle SMB Azure dosya paylaşımları kullanılırken oluşabilecek yaygın sorunlar listelenir. Ayrıca bu sorunların olası nedenleri ve çözümleri de sağlanır.

Belirti algılamayı otomatikleştirmek ve Linux istemcisinin doğru önkoşullara sahip olduğundan emin olmak için AzFileDiagnostics kullanabilirsiniz. En iyi performansı elde etmek için ortamınızı ayarlamanıza yardımcı olur. Bu bilgileri Azure dosya paylaşımları sorun gidericisinde de bulabilirsiniz.

Önemli

Bu makale yalnızca SMB paylaşımları için geçerlidir. NFS paylaşımlarıyla ilgili ayrıntılar için bkz . NFS Azure dosya paylaşımlarında sorun giderme.

Şunlara uygulanır

Dosya paylaşımı türü SMB NFS
Standart dosya paylaşımları (GPv2), LRS/ZRS
Standart dosya paylaşımları (GPv2), GRS/GZRS
Premium dosya paylaşımları (filestorage), LRS/ZRS

Dosyaları kopyalarken zaman damgaları kayboldu

Linux/Unix platformlarında, cp -p farklı kullanıcıların dosya 1 ve dosya 2'ye sahip olduğu durumlarda komut başarısız olur.

Neden

COPYFILE içindeki zorlama bayrağı f Unix üzerinde yürütülür cp -p -f . Bu komut, sahip olmadığınız dosyanın zaman damgasını koruyamaz.

Geçici çözüm

Dosyaları kopyalamak için depolama hesabı kullanıcısını kullanın:

  • str_acc_name=[storage account name]
  • sudo useradd $str_acc_name
  • sudo passwd $str_acc_name
  • su $str_acc_name
  • cp -p filename.txt /share

ls: '<path>' erişilemiyor: Giriş/çıkış hatası

Komutunu kullanarak bir Azure dosya paylaşımındaki dosyaları listelemeye ls çalıştığınızda, dosyalar listelenirken komut yanıt vermemeye başlar. Aşağıdaki hatayı alıyorsunuz:

ls: access'path<>': Giriş/çıkış hatası

Çözüm

Linux çekirdeğini bu soruna yönelik bir düzeltmesi olan aşağıdaki sürümlere yükseltin:

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • 4.13'ten büyük veya buna eşit tüm sürümler

Neden

Varsayılan olarak, SMB kullanarak Linux'ta Azure dosya paylaşımlarının bağlanması sembolik bağlantılar (ortak bağlantılar) desteğini etkinleştirmez. Aşağıdaki gibi bir hata görebilirsiniz:

sudo ln -s linked -n t
ln: failed to create symbolic link 't': Operation not supported

Çözüm

Linux SMB istemcisi, SMB 2 veya 3 protokolü üzerinden Windows stili sembolik bağlantılar oluşturmayı desteklemez. Linux istemcisi şu anda hem oluşturma hem de takip işlemleri için Minshall+Fransızca simlink olarak adlandırılan sembolik bağlantıların başka bir stilini desteklemektedir . Sembolik bağlantılara ihtiyaç duyan müşteriler "mfsymlinks" bağlama seçeneğini kullanabilir. Mac'lerin de kullandığı biçim olduğundan "mfsymlinks" önerilir.

Symlink'leri kullanmak için SMB bağlama komutunuzun sonuna aşağıdakileri ekleyin:

,mfsymlinks

Bu nedenle komut aşağıdaki gibi görünür:

sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<share-name> <mount-point> -o vers=<smb-version>,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino,mfsymlinks

Daha sonra wiki'de önerilen şekilde symlink'ler oluşturabilirsiniz.

Adında boşluk veya nokta bulunan klasörlere veya dosyalara erişilemiyor

Linux'a bağlıyken Azure dosya paylaşımından klasörlere veya dosyalara erişemezsiniz. Du ve ls ve/veya üçüncü taraf uygulamalar gibi komutlar paylaşıma erişirken "Böyle bir dosya veya dizin yok" hatasıyla başarısız olabilir; ancak Azure portalı aracılığıyla bu klasörlere dosya yükleyebilirsiniz.

Neden

Klasörler veya dosyalar, adın sonundaki karakterleri farklı bir karaktere kodlayan bir sistemden karşıya yüklendi. Macintosh bilgisayardan karşıya yüklenen dosyaların 0x20 (boşluk) veya 0X2E (nokta) yerine "0xF028" veya "0xF029" karakteri olabilir.

Çözüm

Paylaşımı Linux'a bağlarken paylaşımdaki mapchars seçeneğini kullanın:

Aşağıdaki değer yerine:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino

Şu değeri kullanın:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino,mapchars

Azure depolama hesaplarının dinamik geçişiyle ilgili DNS sorunları

Bağlı dosya sistemindeki dosya G/Ç'leri "Ana bilgisayar çalışmıyor" veya "İzin reddedildi" hataları vermeye başlar. İstemcideki Linux dmesg günlükleri aşağıdaki gibi yinelenen hatalar gösterir:

Status code returned 0xc000006d STATUS_LOGON_FAILURE
cifs_setup_session: 2 callbacks suppressed
CIFS VFS: \\contoso.file.core.windows.net Send error in SessSetup = -13

Ayrıca, sunucu FQDN'sinin artık bağlı olduğu ip adresinden farklı bir IP adresine çözümlendiğini göreceksiniz. Bu sorun, hesap geçişi gibi sunucu IP adresinin değişebileceği herhangi bir senaryoda oluşabilir. DNS eşlemesi değişebileceğinden, bilinen bir diğer senaryo da depolama hesabı yük devretmesidir.

Neden

Kapasite yükü dengeleme amacıyla, depolama hesapları bazen bir depolama kümesinden diğerine dinamik olarak geçirilir. Hesap geçişi, DNS eşlemelerini hedef kümeye işaret eden dns eşlemelerini güncelleştirerek trafiğin kaynak kümeden hedef kümeye yönlendirilmesini Azure Dosyalar tetikler. Bu, bu hesaptan kaynak kümeye gelen tüm trafiği engeller. SMB istemcisinin DNS güncelleştirmelerini alması ve trafiği hedef kümeye yönlendirmesi beklenir. Ancak, Linux SMB çekirdek istemcisindeki bir hata nedeniyle bu yeniden yönlendirme geçerli olmaz. Sonuç olarak veri trafiği, geçiş sonrasında bu hesabın sunulmasını durduran kaynak kümeye gidiyor.

Geçici çözüm

İstemci işletim sistemini yeniden başlatarak bu sorunu giderebilirsiniz, ancak istemci işletim sisteminizi hesap geçişi desteğiyle bir Linux dağıtım sürümüne yükseltmezseniz sorunla yeniden karşılaşabilirsiniz.

Paylaşımın çıkarılıp yeniden takılması sorunu geçici olarak çözebilecek gibi görünse de, kalıcı bir çözüm değildir. İstemci sunucuya yeniden bağlandığında, sorun yeniden oluşabilir. Geçici azaltma, yeni bir bağlama eylemi SMB çekirdek önbelleğini atladığı ve kullanıcı alanında DNS adresini çözümlediğinden oluşur. Ancak, çekirdek DNS önbelleği herhangi bir ağ bağlantısı kesilmesi kurtarması sırasında kullanılır ve bu da sorunun yeniden ortaya çıkarmasına neden olabilir. Bu davranış, depolama hesabı geçişleri dışında bile devam eder.

Bu sorunu daha iyi çözmek için çekirdek DNS çözümleyici önbelleğini temizleyin:

  1. Aşağıdaki komutu çalıştırarak çekirdek dns_resolver modülünün durumunu görüntüleyin:

    grep '.dns_resolver' /proc/keys
    

    Aşağıdaki örneğe benzer bir komut çıktısı görmeniz gerekir:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: 1
    
  2. Aşağıdaki komutu çalıştırarak çekirdek DNS çözümleyici önbelleğini temizleyin:

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. Çekirdek dns_resolver modülünün durumunu yeniden görüntüleyin:

    grep '.dns_resolver' /proc/keys
    

    Aşağıdaki örnekte olduğu gibi önbelleğin artık boş olduğunu gösteren komut çıktısını görmeniz gerekir:

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
    
  4. Sorunu azaltmak için paylaşımı çıkarın ve yeniden çıkarın.

Not

Bazı eski Linux dağıtımlarında, önceki azaltma adımları çalışmayabilir. Bu gibi durumlarda, bilinen tek azaltma istemci işletim sistemini yeniden başlatmaktır.

Çözüm

Kalıcı bir düzeltme için, hesap geçişi desteğiyle istemci işletim sisteminizi Linux dağıtım sürümüne yükseltin. Linux SMB çekirdek istemcisi için ana linux çekirdeğine çeşitli düzeltmeler gönderildi. Aşağıdaki dağıtımlarda düzeltmeler vardır:

  • Ubuntu: 20.04, 22.04, 24.04 ve AKS 22.04 (düzeltmeler çekirdek sürüm 5.15.0-1068'de kullanıma sunuldu)
  • RHEL: 8.6+
  • SLES: 15SP2, 15SP3, 15SP4 ve 15SP5
  • Azure Linux: 2.0 (düzeltmeler çekirdek sürüm 5.15.159.1'de kullanıma sunuldu) ve 3.0

Bazı dağıtımlar bu düzeltmeleri geri aktardı. Kullandığınız dağıtım sürümünde aşağıdaki düzeltmelerin mevcut olup olmadığını kontrol edebilirsiniz:

FIPS etkinleştirildiğinde SMB dosya paylaşımı bağlanamıyor

Linux VM'de Federal Bilgi İşleme Standardı (FIPS) etkinleştirildiğinde, SMB dosya paylaşımı bağlanamaz. İstemcideki Linux dmesg günlükleri aşağıdaki gibi hataları görüntüler:

kernel: CIFS: VFS: Could not allocate crypto hmac(md5)
kernel: CIFS: VFS: Error -2 during NTLMSSP authentication
kernel: CIFS: VFS: \\contoso.file.core.windows.net Send error in SessSetup = -2
kernel: CIFS: VFS: cifs_mount failed w/return code = -2

Önemli

FIPS, ABD hükümetinin bilgisayar sistemlerinin güvenliğini ve bütünlüğünü sağlamak için kullandığı bir dizi standarttır. Bir sistem FIPS modundayken, bu standartların ana hatlarıyla belirtilen belirli şifreleme gereksinimlerine uyar.

Neden

SMB dosya paylaşımının istemcisi, MD5 karma algoritması gerektiren NTLMSSP kimlik doğrulamasını kullanır. Ancak FIPS modunda, MD5 algoritması FIPS uyumlu olmadığından kısıtlanır. MD5, 128 bit karma değeri üreten yaygın olarak kullanılan bir karma işlevidir. Ancak MD5, şifreleme amacıyla güvenli değildir.

FIPS modunun etkinleştirilip etkinleştirilmediğini denetleme

İstemcide FIPS modunun etkinleştirilip etkinleştirilmediğini doğrulamak için aşağıdaki komutu çalıştırın. Değer 1 olarak ayarlanırsa FIPS etkinleştirilir.

sudo cat /proc/sys/crypto/fips_enabled

Çözüm

Bu sorunu çözmek için SMB dosya paylaşımı için Kerberos kimlik doğrulamasını etkinleştirin. FIPS istemeden etkinleştirildiyse devre dışı bırakmak için option2'ye bakın.

Seçenek 1: SMB dosya paylaşımı için Kerberos kimlik doğrulamasını etkinleştirme

FIPS'nin etkinleştirildiği Linux VM'de SMB dosya paylaşımını bağlamak için Kerberos/Azure AD kimlik doğrulamasını kullanın. Daha fazla bilgi için bkz. Azure Dosyalar erişen Linux istemcileri için SMB üzerinden Active Directory kimlik doğrulamasını etkinleştirme.

Seçenek 2: Samba paylaşımını bağlamak için FIPS'yi devre dışı bırakma

  1. içindeki sysctl değerini crypto.fips_enabled 0 olarak /etc/sysctl.confdeğiştirin.

  2. dosyasında öğesini GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub değiştirin ve parametresini fips=1kaldırın.

  3. Grub2 yapılandırma dosyasını aşağıdaki komutla yeniden oluşturun:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. Aşağıdaki komutla initramfs görüntüsünü yeniden oluşturun:

    sudo dracut -fv
    
  5. VM’yi yeniden başlatın.

Daha fazla bilgi için Bkz. Linux dağıtımcılarının aşağıdaki belgeleri:

Yardıma mı ihtiyacınız var?

Hala yardıma ihtiyacınız varsa, sorununuzun hızla çözülmesi için desteğe başvurun.

Ayrıca bkz.

Yardım için bizimle iletişim kurun

Sorularınız varsa veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteğine sorun. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.