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 listelenmektedir. Ayrıca bu sorunların olası nedenlerini ve çözümlerini sağlar.
Belirti algılamayı otomatikleştirmek ve Linux istemcisinin doğru önkoşullara sahip olduğundan emin olmak için AzFileDiagnostics'i 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.
Uygulandığı öğe
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 kopyalandığında zaman damgaları kayboldu
Linux/Unix platformlarında, cp -p
dosya 1 ve dosya 2 farklı kullanıcılara aitse 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'a> erişilemiyor: Giriş/çıkış hatası
Komutunu kullanarak ls
bir Azure dosya paylaşımındaki dosyaları listelemeye çalıştığınızda, dosyalar listelenirken komut askıda kalıyor. 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
Sembolik bağlantılar oluşturulamıyor - ln: 't' sembolik bağlantısı oluşturulamadı: İşlem desteklenmiyor
Neden
Varsayılan olarak, SMB kullanarak Linux'ta Azure dosya paylaşımlarının bağlanması sembolik bağlantılar (symlink) için destek sağlamaz. 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ü üzerinde 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. Aynı zamanda Mac'lerin 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 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:
Onun yerine:
sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino
Kullanmak:
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 şu anda bağlı olduğundan farklı bir IP adresine çözümlendiğini de göreceksiniz.
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 etmek üzere güncelleştirerek Azure Dosyalar trafiğinin kaynak kümeden hedef kümeye yeniden yönlendirilmesini tetikler. Bu, söz konusu hesaptan kaynak kümeye gelen tüm trafiği engeller. SMB istemcisinin DNS güncelleştirmelerini alması ve trafiği hedef kümeye yeniden yönlendirmesi beklenir. Ancak, Linux SMB çekirdek istemcisindeki bir hata nedeniyle bu yeniden yönlendirme geçerli olmaz. Sonuç olarak, veri trafiği kaynak kümeye gelmeye devam eder ve geçiş sonrasında bu hesabın sunulması durdurulur.
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 Linux dağıtım sürümüne yükseltmezseniz sorunla yeniden karşılaşabilirsiniz.
Paylaşımın çıkarılıp yeniden bağlanması 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 atlayıp 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:
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
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\ ) ))
Ç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 belirten komut çıkışını görmeniz gerekir:
132b6bbf I------ 1 perm 1f030000 0 0 keyring .dns_resolver: empty
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 düzeltme 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 çeşitli düzeltmeler ana linux çekirdeğine gönderilmiştir. Çekirdek sürüm 5.15+ ve Keyutils-1.6.2+ düzeltmelere sahiptir. Bazı dağıtımlar bu düzeltmeleri geri aktardı ve kullandığınız dağıtım sürümünde aşağıdaki düzeltmelerin mevcut olup olmadığını kontrol edebilirsiniz:
cifs: sonraki çözümlemeyi zamanlamak için dns_query süre sonu çıkışını kullanın
cifs: Dosya sunucularını eşleştirmek için sunucu ana bilgisayar adının eşleştiğinden emin olun
cifs: smb3_fs_context_dup bellek sızıntısını düzeltme::server_hostname
dns: getaddrinfo() kaynağından alınan kayıtlara varsayılan TTL uygulama
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 etkin olup olmadığını 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'sine bir SMB dosya paylaşımı bağlamak için Kerberos/Azure AD kimlik doğrulamasını kullanın. Daha fazla bilgi için bkz. Azure Dosyalara 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
içindeki sysctl değerini
crypto.fips_enabled
0 olarak/etc/sysctl.conf
değiştirin.dosyasında öğesini
GRUB_CMDLINE_LINUX_DEFAULT
/etc/default/grub
değiştirin ve parametresinifips=1
kaldırın.Grub2 yapılandırma dosyasını aşağıdaki komutla yeniden derleyin:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Aşağıdaki komutla initramfs görüntüsünü yeniden oluşturun:
sudo dracut -fv
VM'yi yeniden başlatın.
Daha fazla bilgi için Bkz. Linux dağıtımcılarından gelen aşağıdaki belgeler:
- RedHat: Çekirdekte FIPS modunun etkinleştirilmesi CIFS bağlamalarını neden bozar?
- SUSE: CIFS bağlaması "bağlama hatası(2): Böyle bir dosya veya dizin yok" hatasıyla başarısız oluyor
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.
- Azure Dosyaları sorunlarını giderme
- Azure Dosyalar performansı sorunlarını giderme
- Azure Dosyalar bağlantısı (SMB) sorunlarını giderme
- Azure Dosyalar kimlik doğrulaması ve yetkilendirme sorunlarını giderme (SMB)
- Linux'ta Azure Dosyalar genel NFS sorunlarını giderme
- Azure Dosya Eşitleme sorunlarını giderme
Yardım için bize ulaşın
Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin