Bu konuda, ossfs kullanırken karşılaşılan yaygın sorunlar ve çözüm önerileri açıklanmaktadır. Bir sorunla karşılaşırsanız öncelikle ossfs sürümünüzü kontrol edin. 1.80.x gibi eski bir sürüm çalıştırıyorsanız en son sürüme yükseltmenizi öneririz. Yeni sürümler yeni özellikler sunar ve daha iyi kararlılık sağlar.
Genel Bakış
Her ossfs hatası bir mesaj içerir. Soket bağlantısı hataları veya HTTP 4xx/5xx durum kodları gibi sorunların nedenini belirlemek için bu mesajları toplayın. Sorun giderme işlemlerine başlamadan önce hata ayıklama günlüklerini etkinleştirin.
403 hatası, yetersiz izinler nedeniyle isteğin reddedildiğini gösterir.
400 hatası, yanlış bir kullanıcı işlemi olduğunu gösterir.
5xx hatası genellikle ağ dalgalanmaları veya istemci tarafındaki bir sorunla ilgilidir.
ossfs'in temel özellikleri şunlardır:
ossfs, uzak bir OSS paketini yerel bir disk olarak bağlar. İş yükünüz dosya G/Ç performansına duyarlıysa ossfs kullanmamanızı öneririz.
ossfs'deki işlemler atomikliği garanti etmez. Karşılık gelen uzak OSS işlemi başarısız olsa bile yerel bir işlem başarılı olabilir.
ossfs iş gereksinimlerinizi karşılamıyorsa ossutil kullanın.
İzin sorunları
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21839][INF] curl.cpp:PutHeadRequest(2278): [tpath=/.fuse_hidden0000002700000006]
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21839][INF] curl.cpp:prepare_url(4030): URL is http://oss-cn-hangzhou-internal.aliyuncs.com/pgback/.fuse_hidden0000002700000006
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21839][INF] curl.cpp:prepare_url(4062): URL changed is http://pgback.oss-cn-hangzhou-internal.aliyuncs.com/.fuse_hidden0000002700000006
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21839][INF] curl.cpp:PutHeadRequest(2330): ...fuse_hidden0000002700000001
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21840][INF] curl.cpp:RequestPerform(63...): HTTP response code 403 was returned, returning EPERM
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21840][INF] s3fs:s3fs_flush(2127): [path=/tmp/7kAcr][fd=6]
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21840][INF] fdcache.cpp:RowFlush(1302): [path]=[path=/tmp/7kAcr][fd=6]
Dec 22 17:21:22 rerpdb1601 s3fs[21838]: [tid-21845][INF] s3fs:s3fs_release(2185): [path=/tmp/7kAcr][fd=6]
Bir dosyaya dokunulduğunda 403 hatası
Neden: 403 hatası genellikle bir izin sorunundan kaynaklanır. Aşağıdaki durumlarda touch komutunu çalıştırdığınızda 403 hatası alabilirsiniz:
Dosya, Arşiv Depolama nesnesidir. Bu tür bir nesneye dokunmak 403 hatası döndürür.
Kullandığınız AccessKey'in paketteki işlemleri gerçekleştirmek için izni yoktur.
Çözüm:
Arşiv Depolama nesneleri için: Nesneye erişmeden önce geri yükleyin veya paketteki Arşiv Depolama nesneleri için gerçek zamanlı erişimi etkinleştirin.
İzin hataları için: AccessKey'e sahip hesaba gerekli izinleri verin.
rm komutu hatası: Operation not permitted
Neden: rm komutu DeleteObject API işlemini çağırır. Paketi bir RAM kullanıcısı olarak bağladıysanız RAM kullanıcısının nesneleri silme iznine sahip olduğundan emin olun.
Çözüm: RAM kullanıcısına gerekli izinleri verin. Daha fazla bilgi için bkz. RAM ilkesine genel bakış ve RAM ilkelerinin yaygın örnekleri.
Hata: Invalid endpoint
Neden: Bu hata, uç noktanın yanlış belirtildiğini gösterir. Bu durum aşağıdaki nedenlerle oluşabilir:
Paket ve uç nokta eşleşmiyor.
Paket sahibinin UID'si, AccessKey ile ilişkili UID ile eşleşmiyor.
Çözüm: Yapılandırmanızı doğrulayın ve düzeltin.
Bağlama sorunları
Özel alan adı desteği
Hayır, ossfs özel alan adlarıyla bağlamayı desteklemez.
CentOS 7.x'te HTTPS bağlama başarısız oluyor
Çözüm:
Paketi bağlarken
-ocurldbgseçeneğini ekleyin ve günlüklerdeNSS error -8023 (SEC_ERROR_PKCS11_DEVICE_ERROR)olup olmadığını kontrol edin.-
Günlüklerde bu hata varsa yerel olarak yüklü NSS sürümünü kontrol edin.
NSS sürümü 3.36 ise NSS'yi güncellemek için
yum update nsskomutunu çalıştırın ve ardından paketi yeniden bağlamayı deneyin.
ECS RAM rolü ile bağlama başarısız oluyor
Çözüm:
Bağlantıyı kontrol etmek için
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/[your-ecs-ram-role]komutunu çalıştırın.curl komutu başarılı olursa paketi bağlarken
-o disable_imdsv2seçeneğini ekleyin.
Bağlama hatası: Transport endpoint is not connected
Neden: Belirtilen dizin mevcut değil.
Çözüm: Dizini oluşturun ve ardından bağlama işlemini gerçekleştirin.
Bağlama hatası: Permission denied
Neden: Bu, FUSE'deki bir hatadır. FUSE, geçerli kullanıcının bağlama noktası olmayan geçerli çalışma dizininde okuma iznine sahip olmasını gerektirir.
Çözüm: Okuma izniniz olan bir dizine geçmek için cd komutunu kullanın ve ardından ossfs komutunu çalıştırın.
Bağlama hatası: Mountpoint is not empty
Neden: Varsayılan olarak ossfs yalnızca boş bir dizine bağlanabilir. Bu hata, ossfs'i boş olmayan bir dizine bağlarken oluşur.
Çözüm: Boş bir dizine geçin ve yeniden bağlayın. Yine de bu dizine bağlamanız gerekiyorsa bağlarken -ononempty parametresini ekleyin.
Bağlama zaman aşımı hatası
Neden: ossfs bağlama isteği zaman aşımına uğradı.
Çözüm: ossfs, okuma ve yazma istekleri için saniye cinsinden zaman aşımı süresini ayarlamak üzere readwrite_timeout seçeneğini kullanır. Varsayılan değer 60'dır. Bu değeri iş yükünüze göre artırın.
Bağlama hatası: Yanlış kimlik bilgisi dosyası izinleri
Neden: /etc/passwd-ossfs dosyasının izinleri yanlış.
Çözüm: /etc/passwd-ossfs dosyası kimlik bilgilerini depolar; bu nedenle diğer kullanıcılar için erişimi kısıtlamanız gerekir. Dosya izinlerini değiştirmek için chmod 640 /etc/passwd-ossfs komutunu çalıştırın.
ls hatası: Operation not permitted
Neden: Paketinizde görünmez karakterler içeren adlara sahip nesneler olup olmadığını kontrol edin. Dosya sistemleri, dosya ve dizin adlarında katı sınırlamalar uygular ve bu durum bu hataya neden olabilir.
Çözüm: Bu nesneleri başka bir araç kullanarak yeniden adlandırın. Ardından, ls komutu dizin içeriğini doğru şekilde listeleyebilir.
Bağlama hatası: FUSE device not found
Neden: Bu hata genellikle bir Docker konteynerinde ortaya çıkar çünkü konteynerin FUSE çekirdek modülüne erişme veya yükleme izni yoktur.
Çözüm: Bir Docker konteynerinde çalıştırırken konteynere daha yüksek ayrıcalıklar vermek için --privileged=true parametresini ekleyebilirsiniz. Bu, konteyner içindeki işlemlerin ana makinedekine benzer işlemleri (FUSE dosya sistemi kullanımı gibi) gerçekleştirmesine olanak tanır. Aşağıda, --privileged işaretini kullanarak bir konteyner başlatmak için örnek bir komut verilmiştir:
docker run --privileged=true -d your_image
Bağlama hatası: libcrypto.so.1.1 not found
Neden: Kurulum paketi sürümü işletim sistemi sürümünüzle eşleşmiyor.
Çözüm: Bu sorunu çözmek için işletim sisteminizle eşleşen kurulum paketini indirin.
Faturalama
Arka plan dosya taramalarından kaynaklanan maliyetlerden kaçının
Neden: Bir program ossfs tarafından bağlanan bir dizini taradığında tarama OSS'ye istekler oluşturur. Yüksek istek oranı ücretlere neden olabilir.
Çözüm: Hangi işlemlerin OSS ile bağlanan dizini taradığını belirlemek için auditd aracını kullanın. Aşağıdaki adımları uygulayın:
-
auditd'yi yükleyin ve başlatın.
sudo apt-get install auditd sudo service auditd start -
OSS bağlama noktasını izleme dizini olarak ayarlayın. Örneğin, bağlama noktası /mnt/ossfs ise aşağıdaki komutu çalıştırın:
auditctl -w /mnt/ossfs -
Hangi işlemlerin dizine eriştiğini görmek için denetim günlüğünü kontrol edin.
ausearch -i | grep /mnt/ossfs -
İşlemi bağlama noktasını taramayı atlayacak şekilde yapılandırın.
Örneğin, denetim günlüğü updatedb öğesinin bağlanan dizini taradığını gösteriyorsa bunu dışlamak için /etc/updatedb.conf dosyasını değiştirin. Bunu yapmak için aşağıdaki adımları uygulayın:
RUNEFS =parametresinefuse.ossfsekleyin.PRUNEPATHS =parametresine bağlama noktasını ekleyin.
Disk ve bellek sorunları
Nov 8 02:58:28 izw9e9xgcy43hdoultcoez kernel: [30273] 0 30273 33017 827 61 0 AliYunDun
Nov 8 02:58:28 izw9e9xgcy43hdoultcoez kernel: [16398] 0 16398 1301998 317459 955 0 java
Nov 8 02:58:28 izw9e9xgcy43hdoultcoez kernel: Out of memory: Kill process 3017 (ossfs) score 58 or sacrifice child
Nov 8 02:58:28 izw9e9xgcy43hdoultcoez kernel: Killed process 3017 (ossfs) total-vm:3840372kB, anon-rss:4787892kB, file-rss:208kB, shmem-rss:0kB
Nov 8 02:58:45 izw9e9xgcy43hdoultcoez s3fs s3fs[2968]: s3fs.cpp:list_bucket(2382): list_bucket returns error(-1).
Nov 8 02:58:45 izw9e9xgcy43hdoultcoez s3fs s3fs[2968]: s3fs.cpp:list_bucket(2459): xmlReadMemory with error...
Nov 8 02:58:45 izw9e9xgcy43hdoultcoez s3fs s3fs[2968]: s3fs.cpp:list_bucket(2382): list_bucket returns error(-1).
Nov 8 02:58:47 izw9e9xgcy43hdoultcoez systemd: Started Session 4614 of user root.
ossfs ara sıra bağlantıyı kesiyor
Neden:
-
Bellek yetersizliği (OOM) hatalarını aramak için hata ayıklama günlüklerini kontrol edin. Bunu yapmak için -d -odbglevel=dbg parametresini ekleyerek hata ayıklama günlüklerini etkinleştirin. ossfs günlükleri varsayılan sistem günlük dosyasına yazar.
CentOS sistemlerinde günlükler
/var/log/messagekonumuna yazılır.Ubuntu sistemlerinde günlükler
/var/log/syslogkonumuna yazılır.
-
Günlükler, listbucket ve listobject işlemleri sırasında yüksek bellek kullanımının sistemin OOM katilini tetiklediğini ve ossfs işlemini sonlandırdığını gösterebilir.
Notlistobject işlemi, nesne meta verilerini almak için OSS'ye bir HTTP isteği gönderir. Çok sayıda nesneniz varsa
lskomutu meta verileri almak için büyük miktarda sistem belleği tüketebilir.
Çözüm:
-omax_stat_cache_size=xxx parametresini kullanarak stat önbelleği boyutunu artırın. İlk
lsişlemi daha yavaştır ancak meta veriler yerel olarak önbelleğe alındığından sonraki çağrılar daha hızlıdır. Varsayılan değer 1.000'dir ve yaklaşık 4 MB bellek tüketir. Bu değeri makinenizin kullanılabilir belleğine göre ayarlayın.Okuma ve yazma işlemleri sırasında ossfs, Nginx'e benzer şekilde diske büyük miktarda geçici önbellek verisi yazabilir. Bu durum kullanılabilir disk alanını tüketebilir. ossfs çıkış yaptığında geçici dosyaları otomatik olarak temizler.
ossfs yerine ossutil kullanın. ossfs üretim dışı iş yükleri için kullanılabilir. Yüksek güvenilirlik ve kararlılık gerektiren hizmetler için ossutil kullanmanızı öneririz.
ossfs neden disk alanını dolduruyor?
Neden: Performansı artırmak için ossfs varsayılan olarak geçici yükleme ve indirme verilerini depolamak amacıyla mümkün olduğunca fazla disk alanı kullanır. Bu durum kullanılabilir disk alanını tüketebilir.
Çözüm: Disk alanı ayırmak için -oensure_diskfree seçeneğini kullanın. Örneğin, 20 GB disk alanı ayırmak için aşağıdaki komutu çalıştırın:
ossfs examplebucket /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com -oensure_diskfree=20480
df komutu 256 TB disk boyutu gösteriyor
df komutunun gösterdiği disk boyutu yalnızca görüntüleme amaçlıdır ve gerçek paket kapasitesini temsil etmez. Size (toplam disk alanı) ve Avail (kullanılabilir disk alanı) değerleri sabit olarak 256 TB, Used (kullanılan disk alanı) değeri ise sabit olarak 0 TB'dir.
OSS sınırsız paket kapasitesi sağlar. Depolama kullanımı gerçek kullanımınıza bağlıdır. Paket kullanımını sorgulama hakkında daha fazla bilgi için bkz. Paket düzeyindeki kullanımı sorgulama.
[root@rjhdadmin xxx]# du -sh *
24G caohh.zip
[root@rjhdadmin lixiao]# cp caohh.zip /data/ossfs/xxx
cp: writing '/data/ossfs/xxx/caohh.zip': Input/output error
cp: closing '/data/ossfs/xxx.zip': Input/output error
[root@rjhdadmin xxx]#
cp komutu: Input/output error
Neden: Bu hata bir disk G/Ç sorununu gösterir. Hata oluştuğunda diskin yüksek bir okuma/yazma yüküne sahip olup olmadığını kontrol edin.
Çözüm: Dosya okuma ve yazma işlemlerini kontrol etmek için parça ile ilgili parametreler ekleyin. Kullanılabilir parça ile ilgili parametreleri görüntülemek için ossfs -h komutunu çalıştırın.
cp: writing '/data/tmp/I_201704/12/request.1491926430217.avro': Input/output error
cp: closing '/data/tmp/I_201704/12/request.1491926430217.avro': Input/output error
Büyük dosyalar kopyalanırken G/Ç hatası
Neden: ossfs'i rsync ile kullanmak sorunlara neden olabilir. Bu durumda, bir kullanıcı 141 GB'lık bir dosyada cp komutunu çalıştırmış; bu durum diski çok yüksek bir yüke maruz bırakmış ve bu hataya neden olmuştur.
Çözüm: Dosyaları OSS'den bir ECS örneğine indirmek veya bir ECS örneğinden OSS'ye yüklemek için ossutil'in çok parçalı yükleme ve indirme özelliklerini kullanın.
[root@c653a8832c9eb4d8d9xxx xxx a-node5 ~]# ossfs xxx xxx xxx /xxx/daily -o multipart_size=31457280 -ourl=http://oss-ap-southeast-3-internal.aliyuncs.com
ossfs: There is no enough disk space for used as cache(or temporary) directory by s3fs.
[root@c653a8832c9eb4d8d9xxx a-node5 ~]#
Yükleme hatası: Önbellek için yeterli disk alanı yok
-
Neden
Kullanılabilir disk alanı
multipart_size * parallel_countdeğerinden azdır.multipart_size parametresi parça boyutunu belirtir. Varsayılan birim MB'dir. parallel_count parametresi paralel olarak yüklenecek parça sayısını belirtir. Varsayılan değer 5'tir.
-
Analiz
Varsayılan olarak ossfs büyük dosyaları çok parçalı yükleme kullanarak yükler. Yükleme sırasında ossfs geçici önbellek dosyalarını /tmp dizinine yazar. Veri yazmadan önce ossfs, /tmp dizinini içeren diskteki boş alanın
multipart_size * parallel_countdeğerinden az olup olmadığını kontrol eder. Boş alanmultipart_size * parallel_countdeğerinden büyükse yazma işlemi normal şekilde devam eder. Boş alanmultipart_size * parallel_countdeğerinden azsa ossfs yerel disk alanının yetersiz olduğunu belirten bir hata döndürür.Örneğin, kullanılabilir disk alanı 300 GB ve yüklenecek dosya 200 GB'dir. multipart_size 100000 (100 GB) olarak ayarlanırsa ve parallel_count varsayılan değeri olan 5'te kalırsa ossfs gerekli alanı 100 GB × 5 = 500 GB olarak hesaplar; bu da yerel boş alanı aşar.
-
Çözüm
parallel_count varsayılan değeri olan 5'te kalırsa multipart_size değerini makul bir değere ayarlayın.
Kullanılabilir disk alanı 300 GB ve yüklenecek dosya 200 GB ise multipart_size değerini 20 olarak ayarlayın.
Kullanılabilir disk alanı 300 GB ve yüklenecek dosya 500 GB ise multipart_size değerini 50 olarak ayarlayın.
Bağımlılık sorunları
Kurulum hatası: FUSE kitaplığı çok eski
Neden: ossfs'yi derlemek için kullanılan libfuse sürümü, çalışma zamanında bağlanan libfuse sürümünden daha yüksektir. Bu durum genellikle libfuse'u manuel olarak yüklerseniz ortaya çıkar. CentOS 5.x ve CentOS 6.x sistemlerinde Alibaba Cloud tarafından sağlanan ossfs paketi libfuse-2.8.4 içerir. Çalışma zamanı ortamında libfuse-2.8.3 varsa ve ossfs daha eski FUSE sürümüne bağlanırsa bu uyarı görünür.
ossfs'nin çalışma zamanında hangi FUSE sürümüne bağlandığını onaylamak için ldd $(which ossfs) | grep fuse komutunu çalıştırın. Sonuç /lib64/libfuse.so.2 ise FUSE sürümünü görüntülemek için ls -l /lib64/libfuse* komutunu çalıştırın.
Çözüm: ossfs'yi doğru sürüme bağlayacak şekilde yapılandırın.
libfuse dizinini bulmak için rpm -ql ossfs | grep fuse komutunu çalıştırın.
Sonuç /usr/lib/libfuse.so.2 ise ossfs'yi LD_LIBRARY_PATH=/usr/lib ossfs … komutunu kullanarak çalıştırın.
Total size: 6.0 M
Installed size: 6.0 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Check Error:
file /sbin/mount.fuse from install of ossfs-1.80.3-1.x86_64 conflicts with file from package fuse-2.8.3-5.el6.x86_64
file /usr/bin/fusermount from install of ossfs-1.80.3-1.x86_64 conflicts with file from package fuse-2.8.3-5.el6.x86_64
file /usr/bin/ulockmgr_server from install of ossfs-1.80.3-1.x86_64 conflicts with file from package fuse-2.8.3-5.el6.x86_64
Error Summary
-------------
[root@localhost 123]# rpm -qa |grep fuse
fuse-2.8.3-5.el6.x86_64
fuse-ntfs-3g-2013.1.13-2.el6.rf.x86_64
You have new mail in /var/spool/mail/root
[root@localhost 123]#
FUSE bağımlılığı kurulum hatası
Neden: FUSE sürümü ossfs gereksinimlerini karşılamıyor.
Çözüm: FUSE'un en son sürümünü manuel olarak indirin ve yükleyin. yum kullanmayın. Daha fazla bilgi için bkz. fuse.
ls hatası: Input/output error
Neden: Bu sorun esas olarak CentOS ortamlarında ortaya çıkar. Günlükte NSS error -8023 hatası gösterilir. ossfs HTTPS iletişimi için libcurl kullanırken bir sorun oluşur; bunun nedeni muhtemelen libcurl'ün bağımlı olduğu Ağ Güvenliği Hizmetleri (NSS) kitaplığının çok eski olmasıdır.
Çözüm: NSS kitaplığını en son sürüme güncellemek için aşağıdaki komutu çalıştırın:
yum update nss
Kurulum hatası: fuse-devel ile çakışma
Neden: Sistemde eski bir FUSE sürümü vardır ve ossfs'deki bağımlılık sürümüyle çakışır.
Çözüm: Paket yöneticinizi kullanarak FUSE'u kaldırın ve ardından ossfs'yi yeniden yükleyin.
Diğer sorunlar
ossfs çok sayıda dosya veya yüksek eşzamanlılık durumunda yavaş çalışıyor
ossfs 1.0 yüksek eşzamanlılık senaryoları için önerilmez. Bu senaryolarda kullanmanız gerekirse aşağıdaki seçenekleri göz önünde bulundurun:
Seçenek 1: Paketi ossfs 2.0 kullanarak bağlayın. ossfs 2.0, ardışık okuma ve yazma işlemleri ve küçük dosyaların eşzamanlı okunması için ossfs 1.0'a kıyasla önemli performans iyileştirmeleri sağlar. Daha fazla bilgi için bkz. Performans iyileştirmeleri.
Seçenek 2: Daha iyi performans için Cloud Storage Gateway kullanarak bir OSS paketi bağlayın. ossfs 1.0'ın performansı yüksek eşzamanlı iş yükleri veya büyük dosya yükleme ve indirme işlemleri için uygun değildir. En iyi şekilde küçük dosyalardaki rutin işlemler için uygundur.
Yüklenen dosyaların Content-Type değeri yanlış
Neden: ossfs dosyaları yüklerken /etc/mime.types dosyasını okuyarak Content-Type değerini ayarlar. Bu dosya mevcut değilse ossfs varsayılan olarak application/octet-stream değerini kullanır.
Çözüm: Bu dosyanın var olup olmadığını kontrol edin. Yoksa ekleyin.
-
mime.types dosyasını bir komut kullanarak otomatik olarak ekleyin.
-
Ubuntu sistemleri için:
sudo apt-get install mime-support komutunu çalıştırın.
-
CentOS sistemleri için:
sudo yum install mailcap komutunu çalıştırın.
-
-
mime.types dosyasını manuel olarak ekleyin.
-
mime.types dosyasını oluşturun.
vi /etc/mime.types Gerekli biçimleri her satıra bir tane gelecek şekilde ekleyin.
application/javascript jsbiçimini kullanın.
-
Dosyayı ekledikten sonra OSS paketini yeniden bağlamanız gerekir.
Klasör dosya olarak tanımlandı
-
Senaryo 1
Neden: Bir klasör nesnesi (adı eğik çizgi (
/) ile biten nesne) oluşturursanız ve Content-Type değerini text/plain olarak ayarlarsanız ossfs nesneyi dosya olarak tanımlar.Çözüm: Bağlama sırasında
-ocomplement_statparametresini ekleyebilirsiniz. Bir klasör nesnesinin boyutu 0 veya 1 ise ossfs bunu klasör olarak tanır. -
Senaryo 2
Neden:
<folder-object>öğesinin eğik çizgi (/) ile biten bir nesne adı olduğuossutil statkomutunu çalıştırın. Örneğin,ossutil stat oss://[bucket]/folder/. Komutu çalıştırdıktan sonra aşağıdaki alanları kontrol edin:-
Nesne boyutunu belirten Content-Length alanını kontrol edin. Nesne boyutu 0 değilse nesne dosya olarak tanımlanır.
Çözüm: Bu klasör nesnesinin içeriğine artık ihtiyacınız yoksa nesneyi silmek için
ossutil rm oss://[bucket]/folder/komutunu çalıştırın. Bu işlem klasördeki dosyaları etkilemez. Alternatif olarak, klasör nesnesinin üzerine yazmak için aynı ada sahip sıfır baytlık bir nesne yüklemek için ossutil kullanabilirsiniz. -
Nesne boyutu 0 ise Content-Type alanını kontrol edin. Bu alanın değeri
application/x-directory,httpd/unix-directory,binary/octet-streamveyaapplication/octet-streamdeğilse nesne yine de dosya olarak tanımlanır.Çözüm: Nesneyi silmek için
ossutil rm oss://[bucket]/folder/komutunu çalıştırın. Bu işlem klasördeki dosyaları etkilemez.
-
mv işlemi başarısız oluyor
Neden: ossfs'deki mv işlemi, kaynak dosya bir Arşiv Depolama, Soğuk Arşiv veya Derin Soğuk Arşiv nesnesiyse başarısız olabilir.
Çözüm: mv işlemini çalıştırmadan önce nesneyi geri yüklemeniz gerekir. Daha fazla bilgi için bkz. Nesneleri geri yükleme.
Windows desteği
Hayır. Windows'ta Rclone kullanarak bir paket bağlayabilirsiniz. Daha fazla bilgi için bkz. Rclone.
Birden fazla Linux sunucusunda bağlama
Evet. Birden fazla Linux ECS sunucusunda bağlayabilirsiniz. Daha fazla bilgi için bkz. Paket bağlama.
Araçlar arasında tutarsız dosya bilgileri
Neden: ossfs varsayılan olarak performansı artırmak için dosya boyutu ve izinler dahil olmak üzere dosya meta verilerini önbelleğe alır. Bu, ls komutunu her çalıştırdığınızda OSS'ye istek gönderilmesini önler. Dosyaları SDK, OSS konsolu veya ossutil gibi diğer araçları kullanarak değiştirirseniz ossfs önbelleğini zamanında yenilemeyebilir ve bu durum veri tutarsızlıklarına neden olabilir.
Çözüm: Paketi bağlarken meta veri önbelleğe almeyi devre dışı bırakmak için -omax_stat_cache_size=0 parametresini ekleyin. ls komutu her yürütüldüğünde en son dosya bilgilerini almak için OSS'ye bir istek gönderilir.
Sürüm oluşturmayı etkinleştirdikten sonra bağlama yavaşlıyor
Neden: ossfs varsayılan olarak ListObjects (GetBucket) işlemini kullanarak dosyaları listeler. Sürüm oluşturma etkinleştirilmişse ve pakette bir veya daha fazla nesne geçmiş sürümü ile çok sayıda süresi dolmuş silme işaretçisi varsa ListObjects (GetBucket) kullanarak geçerli nesnelerin listelenmesi yavaş olabilir; bu durum bağlama performansını düşürür.
Çözüm: Daha iyi listeleme performansı için ossfs'yi ListObjectsV2 (GetBucketV2) işlemini kullanacak şekilde geçiş yapmak üzere -olistobjectsV2 seçeneğini ekleyin.
HTTPS üzerinden bağlama
ossfs HTTPS üzerinden bağlamayı destekler. Aşağıda Çin (Hangzhou) bölgesi için örnek bir komut verilmiştir:
ossfs examplebucket /tmp/ossfs -o url=https://oss-cn-hangzhou.aliyuncs.com
Büyük dizinlerde ls komutu yavaş çalışıyor
Neden: Bir dizin N dosya içeriyorsa içeriğinin listelenmesi en az N OSS HTTP isteği gerektirir. N büyük olduğunda bu durum ciddi performans sorunlarına neden olabilir.
Çözüm: -omax_stat_cache_size=xxx parametresini kullanarak stat önbelleği boyutunu artırın. İlk ls işlemi daha yavaştır ancak meta veriler yerel olarak önbelleğe alındığından sonraki çağrılar daha hızlıdır. ossfs 1.91.1'den önce bu parametrenin varsayılan değeri 1.000'dir. ossfs 1.91.1 ve sonraki sürümlerde varsayılan değer 100.000'dir ve onlarca megabayt bellek tüketir. Bu değeri makinenizin kullanılabilir belleğine göre ayarlayın.
Bağlantıyı kaldırma hatası: Device or resource busy
Neden: Bir işlem bağlama noktası /mnt/ossfs-bucket altındaki dosyalara erişiyor; bu durum dizinin bağlantısının kaldırılmasını engelliyor.
Çözüm:
Dizini kullanan işlemi bulmak için
lsof /mnt/ossfs-bucketkomutunu çalıştırın.İşlemi sonlandırmak için
killkomutunu kullanın.Paketin bağlantısını kaldırmak için
fusermount -u /mnt/ossfs-bucketkomutunu çalıştırın.
ossfs 1.0'da çok sayıda 404 günlüğü
Arka plan bilgileri: ossfs 1.0 kullanırken günlüklerde 404 Not Found kayıtlarını görmek yaygındır. Çoğu durumda bu bir sistem hatası değildir. ossfs 1.0 yerel bir dosya sistemini simüle ettiği için bu beklenen bir davranıştır.
Bir dosya üzerinde işlem yapmadan önce işletim sistemi hedef nesnenin var olup olmadığını kontrol eder. Bu süreç OSS'ye birçok prob isteği tetikleyebilir. Bir nesne mevcut değilse OSS 404 durum kodu döndürür.
Aşağıdaki adımlar ossfs 1.0'ın bir nesnenin var olup olmadığını nasıl kontrol ettiğini açıklar:
-
ossfs,
objectgibi belirtilen yolun gerçek bir nesne olarak var olup olmadığını kontrol etmek için bir HeadObject isteği gönderir.Nesne mevcutsa sistem nesne meta verilerini döndürür. Nesne mevcut değilse sistem 404 hatası döndürür ve sonraki adıma geçer.
-
ossfs 404 hatasını aldıktan sonra bir
object/nesnesinin var olup olmadığını kontrol etmek için bir HeadObject isteği gönderir.Nesne mevcutsa sistem nesne meta verilerini döndürür. Nesne mevcut değilse sistem 404 hatası döndürür ve sonraki adıma geçer.
-
ossfs 404 hatasını aldıktan sonra bir
object_$folder$nesnesinin var olup olmadığını kontrol etmek için bir HeadObject isteği gönderir.Nesne mevcutsa sistem nesne meta verilerini döndürür. Nesne mevcut değilse sistem 404 hatası döndürür ve sonraki adıma geçer.
-
ossfs 404 hatasını aldıktan sonra belirtilen yolun bir dizin olup olmadığını belirlemek için
object/önekine sahip nesneleri listeleyerek bir ListObjects isteği gönderir.Sonuç boşsa yol mevcut değildir. Sonuç boş değilse dizin mevcuttur ve sistem dizin içeriğini listeler.
Neden:
Mevcut olmayan bir dosyaya erişmek için
statgibi komutlar kullanırsanız OSS 404 hatası döndürür; bu hata yerel dosya sistemi hatası "No such file or directory" ile eşlenir.Dosyaları veya dizinleri toplu olarak oluşturmadan önce işletim sistemi hedefin var olup olmadığını kontrol eder ve yalnızca mevcut değilse bir oluşturma isteği gönderir. Bu kontrol sırasında oluşan 404 hataları beklenen bir davranıştır, bir sistem sorunu değildir.
Çözüm: 404 hatası beklenen bir davranışı gösterse de sık prob istekleri yüksek eşzamanlılık veya toplu işlem senaryolarında performansı etkileyebilir. Performansı optimize etmek için aşağıdaki seçenekleri kullanabilirsiniz:
Bu seçenekleri yapılandırdıktan sonra ossfs 1.0 yerel önbelleğin süresi dolana kadar OSS'deki nesnelere yapılan değişiklikleri algılayamaz.
-
Meta veri önbelleği süresini uzatmak ve önbellek girişlerinin sayısını artırmak için
-o stat_cache_expireve-o max_stat_cache_sizedeğerlerini artırın.Meta verilerinin süresi dolmadan önce bir dosya veya dizini sorgularsanız ossfs OSS'ye tekrarlanan istekler göndermekten kaçınır.
-o stat_cache_expire: meta veri önbelleğinin sona erme süresini belirtir. Varsayılan değer 900 saniyedir.-o max_stat_cache_size: meta veri önbelleğindeki giriş sayısını belirtir. Varsayılan değer 100000'dir.
-
ossfs'nin 1.91.6'dan önceki bir sürümünü kullanıyorsanız
-o enable_noobj_cacheseçeneğini kullanarak negatif önbelleği etkinleştirin. ossfs 1.91.6 ve sonraki sürümlerde negatif önbellek varsayılan olarak etkindir.Bir dosya ilk kez sorgulandığında ve mevcut değilse ossfs sonucu bellekte önbelleğe alır. Önbelleğin süresi dolana kadar sonraki sorgular OSS'ye istek göndermek yerine yerel negatif önbelleği kullanır.
Notossfs 1.0'da dosya negatif önbelleği meta veri önbelleğinin bir parçasıdır. Süre sonu süresini kontrol etmek için
-o stat_cache_expireparametresini ve maksimum önbellek giriş sayısını kontrol etmek için-o max_stat_cache_sizeparametresini kullanabilirsiniz.