このトピックでは、ossfsの使用に関するよくある質問に対する回答を提供します。
概要
ossfsエラーには、問題の特定と解決に役立つメッセージが含まれています。 たとえば、デバッグログ機能を有効にして、ソケット接続の失敗やHTTPステータスコード4xxまたは5xxのエラーを解決できます。
必要なアクセス権限がないためにアクセスが拒否された場合、HTTPステータスコードのエラーが発生する403性があります。
HTTPステータスコードのエラーは、不正なリクエストが原因で発生する400性があります。
HTTPステータスコード5xxのエラーは、ネットワークジッターとサーバーエラーが原因で発生します。
ossfsは次の機能を提供します。
ossfsは、リモートのObject Storage Service (OSS) バケットをローカルディスクにマウントします。 高い読み書きパフォーマンスが必要なビジネスアプリケーションの処理には、ossfsを使用しないことを推奨します。
ossfs操作はアトミックではありません。 つまり、操作はローカルで成功しますが、OSSではリモートで失敗する可能性があります。
ossfsがビジネス要件を満たせない場合は、ossutilを使用できます。
yum/apt-getを使用してossfsをインストールするときに、「パッケージfuse-develからのファイルとの競合」メッセージを解決するにはどうすればよいですか?
分析: このエラーは、以前のバージョンのfuseがシステムに存在し、ossfsの依存関係バージョンと競合するために発生します。
解決策: パッケージマネージャーを使用してfuseをアンインストールし、ossfsを再インストールします。
ossfsをインストールするときに、「fuse: warning: libraryが古すぎる、一部の操作が機能しない可能性があります」というメッセージを解決するにはどうすればよいですか?
分析: このエラーは通常、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をご覧ください。
マウント操作の「ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected」メッセージを解決するにはどうすればよいですか?
分析: このエラーは、OSSバケットの宛先ディレクトリが作成されていないために発生します。
解決策: 宛先ディレクトリを作成し、バケットをマウントします。
マウント操作で返される「fusermount: failed to open current directory: Permission denied」メッセージを解決するにはどうすればよいですか?
分析: このエラーは、OSSバケットの宛先ディレクトリではなく現在のディレクトリに対する読み取り権限を持つ必要があるヒューズのバグが原因で発生します。
解決策: cdコマンドを実行して、読み取り権限を持つディレクトリに切り替え、ossfsを使用してバケットをマウントします。
"ossfs: Mountpointディレクトリ /tmp/ossfsが空ではない" を解決するにはどうすればよいですか。 これが安全だと確信している場合は、「空でない」マウントオプションを使用できますか?
分析: デフォルトでは、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" メッセージを解決するにはどうすればよいですか?
分析: マウント操作がタイムアウトしました。
解決策: 実際のビジネス要件に基づいて、readwrite_timeoutオプションの値を増やす必要があります。 ossfsはこのオプションを使用して、読み取りまたは書き込み要求のタイムアウト期間を秒単位で指定します。 デフォルトのタイムアウト時間は60秒です。
マウント操作で返された「ossfs: credentials file /etc/passwd-ossfsに他のアクセス許可を与えるべきではありません」メッセージを解決するにはどうすればよいですか?
分析: /etc/passwd-ossfsファイルに対する権限が正しくありません。
解決策: /etc/passwd-ossfsファイルにアクセス資格情報が含まれています。 他の人がファイルにアクセスすることを拒否する必要があります。 この問題を解決するには、chmod 640 /etc/passwd-ossfs
コマンドを実行して、ファイルの権限を変更します。
バケットのマウント後にlsコマンドを実行してディレクトリ内のオブジェクトを一覧表示するときに返される「操作が許可されていません」というメッセージを解決するにはどうすればよいですか?
分析: ファイルシステムには、オブジェクト名とディレクトリ名に厳しい制限があります。 このエラーは、バケット内のオブジェクトの名前に非表示文字が含まれている場合に発生します。
解決策: オブジェクトの名前を適切に変更し、lsコマンドを実行します。 ディレクトリ内のオブジェクトが表示されます。
rmコマンドを実行してオブジェクトを削除するときに返される「操作が許可されていません」メッセージを解決するにはどうすればよいですか?
分析: rmコマンドを使用してオブジェクトを削除すると、DeleteObject操作が呼び出されてオブジェクトが削除されます。 RAMユーザーを使用してバケットをマウントする場合は、RAMユーザーにオブジェクトを削除する権限があるかどうかを確認します。
解決方法: RAMユーザーに必要な権限を付与します。 詳細については、「RAMポリシー」および「RAMポリシーの一般的な例」をご参照ください。
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の使用を推奨します。
バケットにアクセスしたときに返される「アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります」というエラーメッセージを解決するにはどうすればよいですか?
分析: このエラーは、正しいエンドポイントを使用してバケットにアクセスしていないために発生します。 このエラーは、次のシナリオで発生する可能性があります。
バケットとエンドポイントが一致しません。
バケット所有者のUIDは、AccessKeyペアに対応するAlibaba CloudアカウントのUIDとは異なります。
解決策: 設定が正しいかどうかを確認し、必要に応じて設定を変更します。
データをコピーするcpコマンドを実行したときに返される「入出力エラー」メッセージを解決するにはどうすればよいですか?
分析: このエラーは、システムディスクエラーがキャプチャされたときに発生します。 ディスクに大きな読み取りおよび書き込み負荷が存在するかどうかを確認できます。
解決策: マルチパートパラメータを指定して、オブジェクトに対する読み取りおよび書き込み操作の速度を制御します。 ossfs -hコマンドを実行して、マルチパートパラメータを表示できます。
rsyncを使用して同期中に返される「入出力エラー」メッセージを解決するにはどうすればよいですか?
分析: このエラーは、ossfsをrsyncで使用すると発生します。 この場合、cpコマンドを実行してラージオブジェクト (141 GB) をコピーします。 これにより、ディスクに大きな読み取りおよび書き込み負荷が発生します。
解決策: ossutilを使用して、OSSオブジェクトをローカルのECS (Elastic Compute Service) インスタンスにダウンロードしたり、ローカルデバイスからECSインスタンスにマルチパートモードでオブジェクトをアップロードしたりします。
ossfsを使用して大きなオブジェクトをアップロードしたときに返される「キャッシュ (または一時) として使用するのに十分なディスク領域がありません」メッセージを解決するにはどうすればよいですか?
原因
ディスク容量は、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 (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に設定します。
マウントされたバケット内のオブジェクトでtouchコマンドを実行したときに返される403エラーを解決するにはどうすればよいですか?
分析: このエラーは通常、操作が許可されていない場合に発生します。 このエラーは、次のシナリオで発生する可能性があります。
オブジェクトのストレージクラスはArchiveです。
使用されるAccessKeyペアには、バケットを管理するために必要な権限がありません。
解決策
アーカイブオブジェクトを復元するか、バケット内のアーカイブオブジェクトへのリアルタイムアクセスを有効にします。
AccessKeyペアを使用するAlibaba Cloudアカウントに必要な権限を付与します。
ossfsを使用してOSSにアップロードされるオブジェクトのContent-Typeパラメーターの値がapplication/octet-streamの場合はどうすればよいですか?
分析: オブジェクトをアップロードすると、ossfsは /etc/mime.typesファイルにクエリを実行して、オブジェクトのContent-Typeパラメーターを指定します。 mime.typesファイルが存在しない場合、Content-Typeパラメーターはapplication/octet-streamに設定されます。
解決策: mime.typesファイルが存在するかどうかを確認します。 ファイルが存在しない場合は、1つ追加します。
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つのタイプを保持します。
バケツをもう一度マウントします。
ディレクトリに多数のオブジェクトが含まれている場合、lsコマンドの実行が非常に遅いのはなぜですか?
分析: ディレクトリにN個のオブジェクトが含まれている場合、lsコマンドを実行してディレクトリ内のN個のオブジェクトを一覧表示するために、OSS HTTPリクエストをN回開始する必要があります。 これは、オブジェクトの数が多い場合、重大なパフォーマンスの問題を引き起こす可能性があります。
解決策: -omax_stat_cache_size=xxx
を使用して、statキャッシュサイズを増やします。 このように、lsコマンドの最初の実行は低速ですが、メタデータがローカルキャッシュにあるため、コマンドの後続の実行は高速です。 このパラメーターのデフォルト値は1000です。 1,000オブジェクトのメタデータは約4 MBのメモリを消費します。 マシンのメモリサイズに基づいて値を調整できます。
オブジェクトのサイズなどの情報が、他のツールを使用した場合と異なるのはなぜですか。
分析: デフォルトでは、ossfsはサイズやアクセス制御リスト (ACL) などのオブジェクトメタデータ項目をキャッシュします。 メタデータキャッシュでは、Isコマンドを実行するたびにOSSにリクエストを送信する必要がなくなり、オブジェクトアクセスが高速化されます。 ただし、ユーザーがOSS SDK、OSSコンソール、ossutilなどのツールを使用してオブジェクトメタデータを変更した場合、メタデータキャッシュのため、変更はossfsで同時に更新されません。 その結果、ossfsに表示されるメタデータ情報は、他のツールを使用して表示されるメタデータとは異なります。
ソリューション: -omax_stat_cache_size=0パラメーターを指定して、メタデータキャッシュ機能を無効にします。 この場合、lsコマンドを実行すると、毎回最新のオブジェクトメタデータを取得するための要求がOSSに送信されます。
ossfsがOSSバケットをECSインスタンスにマウントするときに、バックグラウンドプログラムによってオブジェクトをスキャンするコストを回避するにはどうすればよいですか。
分析: ossfsがバケットをマウントするディレクトリをプログラムがスキャンすると、リクエストがOSSに送信されます。 多数のリクエストが送信された場合、リクエストに対して課金されます。
解決策: auditdツールを使用して、ossfsがバケットをマウントするディレクトリをスキャンするプログラムを確認します。 そうするには、次の手順を実行します。
auditdをインストールして開始します。
sudo apt-get install auditd sudoサービスauditd開始
監視するディレクトリにossfsがバケットをマウントするディレクトリを設定します。 たとえば、次のコマンドを実行して /mnt/ossfsディレクトリを監視します。
auditctl -w /mnt/ossfs
監査ログをチェックして、ディレクトリにアクセスしたプログラムを表示します。
ausearch -i | grep /mnt/ossfs
スケジュールされたスキャンをスキップするパラメーターを設定します。
たとえば、updatedbプログラムがディレクトリをスキャンした場合、/etc/updatedb.confを使用してプログラムによるスキャンをスキップできます。 そうするには、次の手順を実行します。
RUNEFS =
にfuse.ossfs
を追加します。ディレクトリ名を
PRUNEPATHS =
に追加します。
ossfsがオブジェクトに対してmv操作を実行できなかった場合はどうすればよいですか?
原因: ソースオブジェクトは、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのいずれかのストレージクラスにある可能性があります。
解決策: アーカイブ、コールドアーカイブ、またはDeep Cold Archiveオブジェクトに対してmv操作を実行する前に、まずオブジェクトを復元してください。 詳細については、「オブジェクトの復元」をご参照ください。
バージョン管理が有効なバケットのマウントに長い時間がかかるのはなぜですか?
原因: デフォルトでは、ossfsはListObjects (GetBucket) 操作を呼び出してオブジェクトをリストします。 バケットのバージョン管理が有効になっていて、バケットに1つ以上の以前のバージョンのオブジェクトと多数の期限切れの削除マーカーが含まれている場合、ListObjects (GetBucket) 操作を呼び出して現在のオブジェクトバージョンを一覧表示すると、応答速度が低下します。 この場合、ossfsはバケットの取り付けに時間がかかります。
解決策: -olistobjectsV2オプションを使用して、ossfsをListObjectsV2(GetBucketV2) 操作に切り替えて、オブジェクトリストのパフォーマンスを向上させます。
ossfsを使用してHTTPS経由でバケットをマウントするにはどうすればよいですか?
ossfsでは、ossfsを使用してHTTPS経由でバケットをマウントできます。 この例では、中国 (杭州) リージョンが使用されています。 次のコマンドを実行して、バケットをossfsにマウントできます。
ossfs examplebucket /tmp/ossfs -o url=https://oss-cn-hangzhou.aliyuncs.com
ossfsがディスクの全ストレージ容量を占有するのはなぜですか?
原因: パフォーマンスを向上させるために、ossfsはディスクを使用して、デフォルトでアップロードまたはダウンロードされる一時データを保存します。 この場合、ディスクの記憶容量が枯渇する可能性がある。
解決策: -osecured_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バケットのストレージ容量は無制限です。 使用するストレージ容量は、実際のストレージ使用量によって異なります。 バケット使用量の詳細については、「バケットのリソース使用量の表示」をご参照ください。
ossfsを使用してWindowsにバケットをマウントできますか?
いいえ、ossfsを使用してWindowsにバケットをマウントすることはできません。 Rcloneを使用して、Windowsでバケットをマウントできます。 詳細については、「Rclone」をご参照ください。
「fusermount: failed to unmount /mnt/ossfs-bucket: Device or resource busy」というエラーメッセージを解決するにはどうすればよいですか?
分析: プロセスは /mnt/ossfs-bucketディレクトリ内のオブジェクトにアクセスしているため、バケットをアンマウントできません。
解決策:
lsof /mnt/ossfs-bucket
を使用して、ディレクトリにアクセスしているプロセスを見つけます。killコマンドを実行してプロセスを停止します。
fusermount -u /mnt/ossfs-bucket
を使用してバケットをマウント解除します。
「fuse: device not found, try '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
isコマンドを使用してオブジェクトを一覧表示するときに返される入出力エラーを解決するにはどうすればよいですか?
原因: このエラーは主にCentOSで発生し、エラーログにNSSエラー8023
があります。 ossfsがlibcurlを使用してHTTPSで通信すると、通信の問題が発生します。 通信の問題は、libcurlが依存するネットワークセキュリティサービス (NSS) ライブラリセットのバージョンが低すぎることが原因で発生する可能性があります。
解決策: 次のコードを使用して、NSSライブラリセットをアップグレードします。
yum更新nss