このトピックでは、ossfsの使用に関するよくある質問に対する回答を提供します。
概要
ossfsエラーには、問題の特定と解決に役立つメッセージが含まれています。 たとえば、デバッグログ機能を有効にして、ソケット接続の失敗やHTTPステータスコード4xxまたは5xxのエラーを解決できます。
必要なアクセス権限がないためにアクセスが拒否された場合、HTTPステータスコードのエラーが発生する403性があります。
HTTPステータスコードのエラーは、不正なリクエストが原因で発生する400性があります。
HTTPステータスコード5xxのエラーは、ネットワークジッターとサーバーエラーが原因で発生します。
ossfsは次の機能を提供します。
ossfsは、リモートのObject Storage Service (OSS) バケットをローカルディスクにマウントします。 高い読み書きパフォーマンスが必要なビジネスアプリケーションの管理には、ossfsを使用しないことを推奨します。
ossfs操作はアトミックではありません。つまり、操作はローカルで成功しますが、OSSではリモートで失敗する可能性があります。
ossfsがビジネス要件を満たせない場合は、ossutilを使用できます。
不十分な権限
マウントされたバケット内のオブジェクトでtouchコマンドを実行したときにHTTPステータスコード403が返された場合はどうすればよいですか?
分析: 操作が許可されていない場合、HTTPステータスコード403が返されます。 次のシナリオでエラーが発生する可能性があります。
オブジェクトのストレージクラスはArchiveです。
使用されるAccessKeyペアには、バケットを管理するために必要な権限がありません。
解決策:
アーカイブオブジェクトを復元するか、アーカイブオブジェクトが保存されているバケットのアーカイブオブジェクトへのリアルタイムアクセスを有効にします。
AccessKeyペアを使用するAlibaba Cloudアカウントに必要な権限を付与します。
rmコマンドを実行してオブジェクトを削除したときに「操作が許可されていません」というエラーメッセージが表示された場合はどうすればよいですか?
分析: rmコマンドを実行してオブジェクトを削除すると、DeleteObject操作が呼び出されてオブジェクトが削除されます。 RAMユーザーを使用してバケットをマウントする場合は、RAMユーザーにオブジェクトを削除する権限があるかどうかを確認します。
解決策: オブジェクトを削除するために必要な権限をRAMユーザーに付与します。 詳細については、「RAMポリシー」および「RAMポリシーの一般的な例」をご参照ください。
バケットにアクセスするときに「指定されたエンドポイントを使用してアクセスしようとしているバケットに対処する必要があります」というエラーメッセージが表示された場合はどうすればよいですか?
分析: 正しいエンドポイントを使用してバケットにアクセスしていないため、このエラーメッセージが表示されます。 このエラーメッセージは、次のシナリオで表示されることがあります。
バケットとエンドポイントが一致しません。
バケット所有者のUIDは、AccessKeyペアが属するAlibaba CloudアカウントのUIDとは異なります。
解決策: 設定が正しいかどうかを確認し、必要に応じて設定を変更します。
マウントエラー
ossfsを使用してバケットをマウントすると、「ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected」というエラーメッセージが表示された場合はどうすればよいですか?
分析: OSSバケットの宛先ディレクトリが作成されていないため、このエラーメッセージが表示されます。
解決策: 宛先ディレクトリを作成し、バケットをマウントします。
ossfsを使用してバケットをマウントするときに「fusermount: failed to open current directory: Permission denied」というエラーメッセージが表示された場合はどうすればよいですか?
分析: このエラーメッセージは、OSSバケットの宛先ディレクトリではなく現在のディレクトリに対する読み取り権限を持つ必要があるヒューズのバグが原因で表示されます。
解決策: cdコマンドを実行して、読み取り権限を持つディレクトリに切り替え、ossfsを使用してバケットをマウントします。
"ossfs: Mountpointディレクトリ /tmp/ossfsが空でない場合はどうすればよいですか。 これが安全であると確信している場合は、ossfsを使用してバケットをマウントすると、'nonempty' マウントオプションを使用できますか?
分析: デフォルトでは、ossfsはOSSバケットを空のディレクトリにのみマウントできます。 このエラーメッセージは、ossfsが空でないディレクトリにバケットをマウントしようとすると表示されます。
解決策: 空のディレクトリに切り替えて、バケットを再マウントします。 バケットを現在のディレクトリにマウントする場合は、-ononemptyオプションを使用します。
バケットのマウント時に「ops-nginx-12-32 s3fs[163588]: [tid-75593]curl.cpp:CurlProgress(532): timeout now: 1656407871, curl_times[curl]: 1656407810, readwrite_timeout: 60」というエラーメッセージが表示された場合はどうすればよいですか?
分析: マウント操作がタイムアウトしました。
解決策: ossfsは、readwrite_timeoutオプションを使用して、読み取りまたは書き込み要求のタイムアウト期間を指定します。 単位は秒です。 デフォルト値: 0。 ビジネスシナリオに基づいて、このオプションの値を増やす必要があります。
バケットをマウントするときに「ossfs: credentials file /etc/passwd-ossfsに他のアクセス許可がないはずです」というエラーメッセージが表示された場合はどうすればよいですか?
分析: /etc/passwd-ossfsファイルのアクセス許可が正しく設定されていません。
解決策: /etc/passwd-ossfsファイルにアクセス資格情報が含まれています。 他のユーザーがファイルにアクセスできないようにする必要があります。 この問題を解決するには、chmod 640 /etc/passwd-ossfs
コマンドを実行して、ファイルの権限を変更します。
バケットをマウントした後にlsコマンドを実行してディレクトリ内のオブジェクトを一覧表示するときに、「操作が許可されていません」というエラーメッセージが表示された場合はどうすればよいですか?
分析: ファイルシステムには、オブジェクト名とディレクトリ名に厳しい制限があります。 このエラーメッセージは、バケット内のオブジェクトの名前に非表示の文字が含まれている場合に表示されます。
解決策: オブジェクトの名前を適切に変更し、lsコマンドを実行します。 ディレクトリ内のオブジェクトが表示されます。
「fuse: deviceが見つかりません。'modprobe fuse' を試してみてください」というエラーメッセージが表示された場合はどうすればよいですか?
分析: ossfsを使用してDockerでマウント操作を実行すると、「fuse: device not found, try 'modprobe fuse' 」というエラーメッセージが表示されます。これは、Dockerコンテナに必要なアクセス権限またはヒューズカーネルモジュールをロードする権限がないためです。
解決策: Dockerコンテナでossfsを使用する場合は、-- privileged=true
パラメーターを指定してDockerコンテナを特権モードで実行し、コンテナ内のプロセスがFUSEファイルシステムを使用するなど、ホストが持つ機能を持つようにします。 次のサンプルコマンドは、-- privileged
フラグを使用してDockerコンテナを実行する方法の例を示します。
docker run --privileged=true -d your_image
コスト削減
ossfsを使用してバケットをECSインスタンスにマウントする場合、バックグラウンドプログラムによるオブジェクトスキャンによる不要な料金を防ぐにはどうすればよいですか。
分析: バックグラウンドプログラムがossfsがバケットをマウントしたディレクトリをスキャンすると、リクエストがOSSに送信されます。 多数のリクエストが送信された場合、リクエストに対して課金されます。
解決策: auditdツールを使用して、ossfsがバケットをマウントしたディレクトリをスキャンするバックグラウンドプログラムを確認します。 以下の手順を実行します。
auditdをインストールして開始します。
sudo apt-get install auditd sudo service auditd start
監視するディレクトリに、ossfsがバケットをマウントしたディレクトリを設定します。 たとえば、次のコマンドを実行して /mnt/ossfsディレクトリを監視します。
auditctl -w /mnt/ossfs
監査ログをチェックして、ディレクトリをスキャンしたバックグラウンドプログラムを表示します。
ausearch -i | grep /mnt/ossfs
スケジュールスキャンをスキップするパラメーターを指定します。
たとえば、updatedbプログラムがディレクトリをスキャンした場合、/etc/updatedb.confを使用して、プログラムによって実行されたスキャンをスキップできます。 手順 :
RUNEFS =
にfuse.ossfs
を追加します。ディレクトリ名を
PRUNEPATHS =
に追加します。
ディスクメモリエラー
ossfsからの時折の切断を解決するにはどうすればよいですか?
分析 :
デバッグログ機能を有効にして -d -o f2パラメーターを指定すると、ossfsはログを
/var/log/message
に書き込みます。ログを分析すると、ossfsがlistbucketおよびlistobject操作のために大量のメモリを要求することがわかります。 これにより、メモリ不足 (OOM) エラーがトリガーされます。
説明listobject操作は、オブジェクトメタデータを取得するためにOSSにHTTPリクエストを送信します。 多数のオブジェクトがある場合、lsコマンドを実行すると、オブジェクトメタデータを取得するために大量のメモリが必要になります。
解決策:
-omax_stat_cache_size=xxxパラメーターを指定して、statキャッシュのサイズを増やします。 オブジェクトメタデータは、ローカルキャッシュに格納される。 この場合、lsコマンドの最初の実行は遅くなりますが、コマンドの後続の実行は速くなります。 このパラメーターのデフォルト値は1000です。 1,000オブジェクトのメタデータは約4 MBのメモリを消費します。 マシンのメモリサイズに基づいて値を変更できます。
ossfsは、NGINXと同様に、読み取りまたは書き込み操作中にTempCacheに多数のファイルを書き込みます。 これにより、ディスク容量が不足する可能性があります。 ossfsが終了すると、一時ファイルは自動的に削除されます。
ossfsの代わりにossutilを使用します。 高いリアルタイムパフォーマンスを必要としないビジネスアプリケーションにossfsを使用できます。 高い信頼性と安定性が要求されるビジネスアプリケーションには、ossutilの使用を推奨します。
ossfsがディスクの全ストレージ容量を占有するのはなぜですか?
原因: パフォーマンスを向上させるために、ossfsはディスクを使用して、デフォルトでアップロードまたはダウンロードされる一時データを保存します。 この場合、ディスクの記憶容量が枯渇する可能性がある。
解決策: -osecure_diskfreeオプションを使用して、ディスクの予約ストレージ容量を指定します。 たとえば、20 GBの予約ストレージ容量を指定する場合は、次のコマンドを実行します。
ossfs examplebucket /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com -oensure_diskfree=20480
ossfsがバケットをマウントした後にdfコマンドを実行すると、ディスクのストレージ容量が256テラバイトに変わるのはなぜですか。
dfコマンドの実行時に表示されるディスクのストレージ容量は、OSSバケットの実際のストレージ容量を示すものではありません。 サイズ (ディスクの総記憶容量) とAvail (ディスクの空き記憶容量) は256テラバイトに固定され、Used (ディスクの使用記憶容量) は0テラバイトに固定されています。
OSSバケットのストレージ容量は無制限です。 使用するストレージ容量は、実際のストレージ使用量によって異なります。 バケット使用量の詳細については、「バケットのリソース使用量の表示」をご参照ください。
cpコマンドを実行してデータをコピーしたときに「入出力エラー」というエラーメッセージが表示された場合はどうすればよいですか?
分析: このエラーメッセージは、システムディスクエラーがキャプチャされたときに表示されます。 ディスクに大きな読み取りおよび書き込み負荷が存在するかどうかを確認できます。
解決策: マルチパートパラメータを指定して、オブジェクトの読み取りおよび書き込み操作を管理します。 ossfs -hコマンドを実行して、マルチパートパラメータを表示できます。
データ同期にrsyncを使用しているときに「入出力エラー」というエラーメッセージが表示された場合はどうすればよいですか?
分析: このエラーメッセージは、ossfsをrsyncと共に使用すると表示されます。 この例では、cpコマンドを実行して、サイズが141 GBのラージオブジェクトをコピーします。 これにより、ディスクに大きな読み取りおよび書き込み負荷が発生します。
解決策: ossutilを使用して、OSSオブジェクトをローカルのECS (Elastic Compute Service) インスタンスにダウンロードしたり、マルチパートアップロードを実行してローカルデバイスからECSインスタンスにオブジェクトをアップロードしたりします。
ossfsを使用して大きなオブジェクトをOSSにアップロードするときに、「キャッシュ (または一時) として使用するのに十分なディスク領域がありません」というエラーメッセージが表示された場合はどうすればよいですか?
原因:
使用可能なディスク容量は、
multipart_sizeとparallel_count
の値を乗算して指定されたサイズよりも小さい。multipart_sizeはパーツサイズ (デフォルト単位: MB) を示します。 parallel_countは、並列にアップロードするパーツの数を示します (デフォルト値: 5) 。
分析 :
デフォルトでは、ossfsはマルチパートアップロードを使用してラージオブジェクトをアップロードします。 アップロード中、ossfsは一時キャッシュファイルを /tmpディレクトリに書き込みます。 ossfsが一時キャッシュファイルを書き込む前に、/tmpディレクトリが配置されているディスクの使用可能な領域が、
multipart_sizeとparallel_count
の値を掛けて指定されたサイズより小さいかどうかを確認します。 ディスクの空き容量が、multipart_sizeとparallel_count
の値を掛けて指定したサイズより大きい場合、一時キャッシュファイルは期待どおりに書き込まれます。 使用可能なディスク容量が、multipart_sizeとparallel_count
の値を乗算して指定したサイズより小さい場合、使用可能なディスク容量が不足していると報告されます。たとえば、ディスクの空き容量は300 GB、アップロードするオブジェクトのサイズは200 GBですが、multipart_sizeは100000 MB (100 GB) に設定され、並行してアップロードするパーツの数は5 (デフォルト値) に設定されています。 この場合、ossfsは、アップロードするオブジェクトのサイズが500 GB (100 GB × 5) であると判断します。 サイズは、ディスクの使用可能なスペースよりも大きくなっています。
解決策:
並列にアップロードするパーツの数がデフォルト値の5のままである場合、multipart_sizeに有効な値を指定します。
たとえば、ディスクの空き容量が300 GBで、アップロードするオブジェクトのサイズが200 GBの場合、multipart_sizeを20に設定します。
たとえば、ディスクの空き容量が300 GBで、アップロードするオブジェクトのサイズが500 GBの場合、multipart_sizeを50に設定します。
バージョン依存エラー
ossfsをインストールすると、「fuse: warning: ライブラリが古すぎて、一部の操作が機能しない可能性があります」というエラーメッセージが表示された場合はどうすればよいですか?
分析: ほとんどの場合、libfuseを手動でインストールし、ossfsのコンパイルに使用されるlibfuseのバージョンが、実行時にossfsにリンクされたバージョンよりも後であるため、このエラーメッセージが表示されます。 Alibaba Cloudが提供するossfsインストールパッケージには、libfuse 2.8.4が含まれています。 CentOS 5.xまたはCentOS 6.xにossfsをインストールすると、libfuse 2.8.3が既にシステムに存在し、ossfsにリンクされている場合にこのエラーメッセージが表示されます。
ldd $(which ossfs) | grep fuseコマンドを実行して、実行時にossfsにリンクされているヒューズのバージョンを確認できます。 コマンド出力で /lib64/libfuse.so.2が返された場合は、ls -l /lib64/libfuse * コマンドを実行してヒューズのバージョンを確認できます。
解決策: ossfsを正しいヒューズバージョンにリンクします。
rpm -ql ossfs | grep fuseコマンドを実行して、libfuseのディレクトリを見つけます。
コマンド出力で /usr/lib/libfuse.so.2が返された場合、LD_LIBRARY_PATH=/usr/lib ossfs... コマンドを実行してossfsを実行します。
ヒューズのインストール時に次の図に示すエラーメッセージが表示された場合はどうすればよいですか?
分析: このエラーメッセージは、ヒューズのバージョンがossfsの要件を満たしていないために表示されます。
解決策: 最新バージョンのヒューズをダウンロードしてインストールします。 ヒューズを取付けるのにYUMを使用しないで下さい。 詳細については、libfuseをご覧ください。
Isコマンドを実行してオブジェクトを一覧表示したときに「入出力エラー」エラーメッセージが表示された場合はどうすればよいですか?
原因: ほとんどの場合、このエラーメッセージはCentOSに表示され、エラーログにNSSエラー8023
のエラーコードが含まれています。 ossfsがlibcurlを使用してHTTPSで通信すると、通信の問題が発生します。 通信の問題は、libcurlが依存するネットワークセキュリティサービス (NSS) ライブラリセットのバージョンが低すぎることが原因で発生する可能性があります。
解決策: 次のコマンドを実行して、NSSライブラリセットをアップグレードします。
yum update nss
yum/apt-getを使用してossfsをインストールすると、"conflict with file from package fuse-devel" エラーメッセージが表示された場合はどうすればよいですか?
分析: このエラーメッセージは、以前のバージョンのfuseがシステムに存在し、依存バージョンのossfsと競合するために表示されます。
解決策: パッケージマネージャーを使用してfuseをアンインストールし、ossfsを再インストールします。
その他のエラー
ossfsを使用してOSSにアップロードされるオブジェクトのContent-Typeパラメーターの値がapplication/octet-streamの場合はどうすればよいですか?
分析: ossfsを使用してオブジェクトをアップロードすると、ossfsは /etc/mime.typesファイルにクエリを実行して、オブジェクトのContent-Typeパラメーターを指定します。 /etc/mime.typesファイルが存在しない場合、Content-Typeパラメーターはapplication/octet-streamに設定されます。
解決策: /etc/mime.typesファイルが存在するかどうかを確認します。 ファイルが存在しない場合は、ファイルを追加します。
mime.typesファイルを自動的に追加する
Ubuntu
sudo apt-get install mime-supportコマンドを実行してファイルを追加します。
CentOS
sudo yum install mailcapコマンドを実行して、ファイルを追加します。
mime.typesファイルを手動で追加する
mime.typesファイルを作成します。
vi /etc/mime.types
application/javascript js
形式で目的のコンテンツタイプを追加します。 各行は1つのタイプをサポートします。
バケットを再マウントします。
ossfsがディレクトリを通常のオブジェクトとして認識するのはなぜですか?
シナリオ 1:
分析: 名前が
/
で終わるオブジェクトであるディレクトリを作成するときにcontent-typeをtext/plainに設定した場合、ossfsはそのオブジェクトを通常のオブジェクトとして認識します。解決策: マウント操作を実行するときに-ocomplement_statパラメーターを指定します。 オブジェクトのサイズが0バイトまたは1バイトの場合、ossfsはそれをディレクトリとして認識します。
シナリオ 2:
分析: コマンド出力を表示するには、
ossutil stat oss://[bucket]/folder/
などのossutil statディレクトリ名 (末尾は '/')
コマンドを実行します。オブジェクトのContent-Lengthフィールド (オブジェクトのサイズ) を表示します。 オブジェクトのサイズが0バイトでない場合、ossfsはオブジェクトとして認識します。
解決策: ディレクトリが不要になった場合は、
ossutil rm oss://[bucket]/folder/
コマンドを実行してディレクトリを削除するか (ディレクトリ内のオブジェクトは削除されません) 、ossutilを使用して同じ名前でサイズが0バイトのオブジェクトをアップロードしてディレクトリを上書きします。オブジェクトのサイズが0バイトの場合は、オブジェクト属性であるContent-Typeフィールドを表示します。 Content-Typeフィールドが
application/x-directory
、httpd/unix-directory
、binary/octet-stream
、またはapplication/octet-stream
でない場合、ossfsはそれをオブジェクトとして認識します。解決策:
ossutil rm oss://[bucket]/folder/
コマンドを実行してオブジェクトを削除します (ディレクトリ内のオブジェクトは削除されません) 。
ossfsがオブジェクトに対してmv操作を実行できない場合はどうすればよいですか?
原因: ソースオブジェクトは、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのいずれかのストレージクラスにある可能性があります。
解決策: アーカイブ、コールドアーカイブ、またはDeep Cold Archiveオブジェクトに対してmv操作を実行する前に、まずオブジェクトを復元してください。 詳細については、「オブジェクトの復元」をご参照ください。
ossfsを使用してWindowsにバケットをマウントできますか?
いいえ、ossfsを使用してWindowsにバケットをマウントすることはできません。 Rcloneを使用して、Windowsでバケットをマウントできます。 詳細については、「Rclone」をご参照ください。
ossfsを使用して表示されるオブジェクトのサイズなどのオブジェクト情報が、他のツールを使用して表示されるオブジェクト情報と異なるのはなぜですか。
分析: デフォルトでは、ossfsはサイズやアクセス制御リスト (ACL) などのオブジェクトメタデータをキャッシュします。 メタデータキャッシュでは、Isコマンドを実行するたびにOSSにリクエストを送信する必要がなくなり、オブジェクトアクセスが高速化されます。 ただし、ユーザーがOSS SDK、OSSコンソール、ossutilなどのツールを使用してオブジェクトメタデータを変更した場合、メタデータキャッシュのため、変更はossfsに同期されません。 その結果、ossfsを使用して表示されるメタデータは、他のツールを使用して表示されるメタデータとは異なります。
解決方法: -omax_stat_cache_sizeパラメーターを0に設定して、メタデータキャッシュ機能を無効にします。 この場合、lsコマンドを実行するたびに、毎回最新のオブジェクトメタデータを取得するためのリクエストがOSSに送信されます。
バージョン管理が有効なバケットのマウントに長い時間がかかるのはなぜですか?
原因: デフォルトでは、ossfsはListObjects (GetBucket) 操作を呼び出してオブジェクトをリストします。 バケットのバージョン管理が有効になっていて、バケットに1つ以上の以前のバージョンのオブジェクトと多数の期限切れの削除マーカーが含まれている場合、ListObjects (GetBucket) 操作を呼び出して現在のオブジェクトバージョンを一覧表示すると、応答速度が低下します。 この場合、ossfsは、バージョン管理が有効なバケットをマウントするのに長い時間を必要とします。
解決策: -olistobjectsV2オプションを使用して、ossfsがListObjectsV2(GetBucketV2) 操作を呼び出すことができるようにします。
ossfsを使用してHTTPS経由でバケットをマウントするにはどうすればよいですか?
ossfsを使用して、HTTPS経由でバケットをマウントできます。 この例では、中国 (杭州) リージョンが使用されています。 次のコマンドを実行して、HTTPS経由でバケットをマウントできます。
ossfs examplebucket /tmp/ossfs -o url=https://oss-cn-hangzhou.aliyuncs.com
ディレクトリに多数のオブジェクトが含まれている場合、lsコマンドの実行が非常に遅いのはなぜですか?
分析: ディレクトリにN個のオブジェクトが含まれている場合、OSS HTTPリクエストをN回開始してlsコマンドを実行し、ディレクトリ内のN個のオブジェクトを一覧表示する必要があります。 これは、オブジェクトの数が多い場合、深刻なパフォーマンスの問題を引き起こす可能性があります。
解決方法: -omax_stat_cache_size
パラメーターを指定して、statキャッシュサイズを増やします。 このように、lsコマンドの最初の実行は遅くなりますが、メタデータがローカルキャッシュに格納されているため、コマンドの後続の実行は速くなります。 ossfs 1.91.1より前のバージョンの場合、このパラメーターのデフォルト値は1000です。 ossfs 1.91.1以降の場合、このパラメーターのデフォルト値は10000です。 10,000のオブジェクトのメタデータは、およそ数十MBのメモリを消費する。 マシンのメモリサイズに基づいて値を変更できます。
「fusermount: failed to unmount /mnt/ossfs-bucket: Device or resource busy」というエラーメッセージが表示された場合はどうすればよいですか?
分析: プロセスは /mnt/ossfs-bucketディレクトリ内のオブジェクトにアクセスしています。 その結果、バケットはアンマウントできません。
解決策:
lsof /mnt/ossfs-bucket
を使用して、ディレクトリにアクセスしているプロセスを見つけます。killコマンドを実行してプロセスを停止します。
fusermount -u /mnt/ossfs-bucket
を使用してバケットをマウント解除します。