Este tópico descreve problemas comuns e soluções ao usar o ossfs. Se encontrar um problema, verifique primeiro a versão do ossfs. Caso esteja executando uma versão mais antiga, como 1.80.x, recomendamos atualizar para a versão mais recente. Versões mais novas oferecem novos recursos e maior estabilidade.
Visão geral
Cada erro do ossfs inclui uma mensagem. Para solucionar problemas como falhas de conexão de socket ou códigos de status HTTP 4xx/5xx, colete essas mensagens para identificar a causa. Ative os logs de depuração antes de começar.
Um erro 403 indica que a solicitação foi negada devido a permissões insuficientes.
Um erro 400 indica uma operação incorreta por parte do usuário.
Erros 5xx geralmente estão relacionados a instabilidade de rede ou a um problema no lado do cliente.
Principais características do ossfs:
O ossfs monta um bucket remoto do OSS como um disco local. Se sua carga de trabalho for sensível ao desempenho de E/S de arquivos, recomendamos não utilizar o ossfs.
As operações no ossfs não garantem atomicidade. Uma operação local pode ter êxito mesmo que a operação remota correspondente no OSS falhe.
Se o ossfs não atender aos seus requisitos de negócios, utilize o ossutil.
Problemas de permissão
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]
Erro 403 ao executar touch em um arquivo
Causa: Um erro 403 geralmente é causado por um problema de permissão. Você pode receber esse erro ao executar o comando touch nos seguintes casos:
O arquivo é um objeto do Archive Storage. Executar touch nesse tipo de objeto retorna um erro 403.
A AccessKey utilizada não tem permissão para realizar operações no bucket.
Solução:
Para objetos do Archive Storage: Restaure o objeto antes de acessá-lo ou ative o acesso em tempo real para objetos do Archive Storage no bucket.
Para erros de permissão: Conceda as permissões necessárias à conta proprietária da AccessKey.
Erro no comando rm: Operation not permitted
Causa: O comando rm chama a operação de API DeleteObject. Se você montou o bucket como um usuário RAM, garanta que esse usuário tenha permissão para excluir objetos.
Solução: Conceda as permissões necessárias ao usuário RAM. Para obter mais informações, consulte Visão geral das políticas do RAM e Exemplos comuns de políticas do RAM.
Erro: Invalid endpoint
Causa: Este erro indica que o endpoint foi especificado incorretamente. Isso pode ocorrer pelos seguintes motivos:
O bucket e o endpoint não correspondem.
O UID do proprietário do bucket não corresponde ao UID associado à AccessKey.
Solução: Verifique e corrija sua configuração.
Problemas de montagem
Suporte a nome de domínio personalizado
Não, o ossfs não oferece suporte a montagem com nomes de domínio personalizados.
Falha na montagem HTTPS no CentOS 7.x
Solução:
Adicione a opção
-ocurldbgao montar o bucket e verifique se os logs contêmNSS error -8023 (SEC_ERROR_PKCS11_DEVICE_ERROR).-
Caso esse erro esteja presente nos logs, verifique a versão do NSS instalada localmente.
Se a versão do NSS for 3,36, execute o comando
yum update nsspara atualizar o NSS e tente montar o bucket novamente.
Falha na montagem com função RAM do ECS
Solução:
Execute o comando
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/[your-ecs-ram-role]para verificar a conectividade.Se o comando curl tiver êxito, adicione a opção
-o disable_imdsv2ao montar o bucket.
Erro de montagem: Transport endpoint is not connected
Causa: O diretório especificado não existe.
Solução: Crie o diretório e, em seguida, realize a operação de montagem.
Erro de montagem: Permission denied
Causa: Trata-se de um bug no FUSE. O FUSE exige que o usuário atual tenha permissões de leitura no diretório de trabalho atual, que não é o ponto de montagem.
Solução: Use o comando cd para alternar para um diretório no qual você tenha permissões de leitura e, então, execute o comando ossfs.
Erro de montagem: Mountpoint is not empty
Causa: Por padrão, o ossfs só pode ser montado em um diretório vazio. Este erro ocorre ao tentar montar o ossfs em um diretório não vazio.
Solução: Alterne para um diretório vazio e monte novamente. Se ainda precisar montar neste diretório, adicione o parâmetro -ononempty durante a montagem.
Erro de tempo limite de montagem
Causa: A solicitação de montagem do ossfs atingiu o tempo limite.
Solução: O ossfs utiliza a opção readwrite_timeout para definir o período de tempo limite, em segundos, para solicitações de leitura e gravação. O valor padrão é 60. Aumente esse valor com base na sua carga de trabalho.
Erro de montagem: Permissões incorretas no arquivo de credenciais
Causa: As permissões do arquivo /etc/passwd-ossfs estão incorretas.
Solução: O arquivo /etc/passwd-ossfs armazena credenciais, portanto, você deve restringir o acesso de outros usuários. Execute o comando chmod 640 /etc/passwd-ossfs para alterar as permissões do arquivo.
Erro no ls: Operation not permitted
Causa: Verifique se o seu bucket contém objetos cujos nomes possuem caracteres invisíveis. Os sistemas de arquivos impõem limites rigorosos aos nomes de arquivos e diretórios, o que pode causar esse erro.
Solução: Renomeie esses objetos usando outra ferramenta. Assim, o comando ls poderá listar o conteúdo do diretório corretamente.
Erro de montagem: FUSE device not found
Causa: Esse erro geralmente ocorre dentro de um contêiner docker porque o contêiner não tem permissão para acessar ou carregar o módulo de kernel do FUSE.
Solução: Ao executar em um contêiner docker, adicione o parâmetro --privileged=true para conceder privilégios elevados ao contêiner. Isso permite que processos dentro do contêiner realizem operações semelhantes às da máquina host, como usar o sistema de arquivos FUSE. Abaixo está um exemplo de comando para iniciar um contêiner usando a flag --privileged:
docker run --privileged=true -d your_image
Erro de montagem: libcrypto.so.1.1 not found
Causa: A versão do pacote de instalação não corresponde à versão do seu sistema operacional.
Solução: Para resolver esse problema, baixe o pacote de instalação compatível com o seu sistema operacional.
Faturamento
Evitar custos com varreduras de arquivos em segundo plano
Causa: Quando um programa verifica um diretório montado pelo ossfs, a varredura gera solicitações ao OSS. Uma alta taxa de solicitações pode gerar cobranças.
Solução: Utilize a ferramenta auditd para identificar quais processos estão verificando o diretório montado pelo OSS. Siga estas etapas:
-
Instale e inicie o auditd.
sudo apt-get install auditd sudo service auditd start -
Defina o ponto de montagem do OSS como o diretório monitorado. Por exemplo, se o ponto de montagem for /mnt/ossfs, execute o seguinte comando:
auditctl -w /mnt/ossfs -
Verifique o log de auditoria para ver quais processos acessaram o diretório.
ausearch -i | grep /mnt/ossfs -
Configure o processo para ignorar a varredura do ponto de montagem.
Por exemplo, se o log de auditoria mostrar que o updatedb verificou o diretório montado, modifique o arquivo /etc/updatedb.conf para excluí-lo. Para isso, siga estas etapas:
No parâmetro
RUNEFS =, adicionefuse.ossfs.No parâmetro
PRUNEPATHS =, adicione o ponto de montagem.
Problemas de disco e memória
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.
O ossfs desconecta intermitentemente
Causa:
-
Verifique nos logs de depuração se há erros de falta de memória (OOM). Para fazer isso, ative o registro de depuração adicionando o parâmetro -d -odbglevel=dbg. O ossfs grava logs no arquivo de log padrão do sistema.
Em sistemas CentOS, os logs são gravados em
/var/log/message.Em sistemas Ubuntu, os logs são gravados em
/var/log/syslog.
-
Os logs podem mostrar que o alto uso de memória durante as operações listbucket e listobject acionou o OOM killer do sistema, encerrando o processo do ossfs.
NotaA operação listobject envia uma solicitação HTTP ao OSS para recuperar metadados de objetos. Se você tiver muitos objetos, o comando
lspode consumir uma grande quantidade de memória do sistema para buscar esses metadados.
Solução:
Aumente o tamanho do cache de estatísticas usando o parâmetro -omax_stat_cache_size=xxx. A primeira operação
lsserá mais lenta, mas as chamadas subsequentes serão mais rápidas porque os metadados ficam armazenados em cache localmente. O valor padrão é 1.000, o que consome cerca de 4 MB de memória. Ajuste esse valor com base na memória disponível da sua máquina.Durante operações de leitura e gravação, o ossfs pode gravar grandes quantidades de dados temporários de cache no disco, semelhante ao Nginx. Isso pode esgotar o espaço disponível em disco. O ossfs limpa automaticamente os arquivos temporários ao sair.
Utilize o ossutil em vez do ossfs. O ossfs pode ser usado para cargas de trabalho fora de produção. Para serviços que exigem alta confiabilidade e estabilidade, recomendamos o uso do ossutil.
Por que o ossfs preenche o espaço em disco?
Causa: Para melhorar o desempenho, o ossfs usa, por padrão, o máximo de espaço em disco possível para armazenar dados temporários de upload e download. Isso pode esgotar o espaço disponível em disco.
Solução: Use a opção -oensure_diskfree para reservar espaço em disco. Por exemplo, para reservar 20 GB de espaço em disco, execute o seguinte comando:
ossfs examplebucket /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com -oensure_diskfree=20480
O comando df mostra 256 TB de tamanho de disco
O tamanho do disco exibido pelo comando df serve apenas para fins de exibição e não representa a capacidade real do bucket. Os valores de Size (espaço total em disco) e Avail (espaço disponível em disco) são fixos em 256 TB, e o valor de Used (espaço utilizado em disco) é fixo em 0 TB.
O OSS oferece capacidade ilimitada de bucket. O uso de armazenamento depende do seu consumo real. Para obter mais informações sobre como consultar o uso do bucket, consulte Consultar uso no nível do bucket.
[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]#
Comando cp: Input/output error
Causa: Este erro indica um problema com a E/S do disco. Verifique se o disco apresenta uma alta carga de leitura/gravação quando o erro ocorre.
Solução: Adicione parâmetros relacionados a partes para controlar as operações de leitura e gravação de arquivos. Execute o comando ossfs -h para visualizar os parâmetros disponíveis relacionados a partes.
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
Erro de E/S ao copiar arquivos grandes
Causa: O uso do ossfs com rsync pode causar problemas. Neste caso, um usuário executou o comando cp em um arquivo de 141 GB, o que colocou o disco sob uma carga muito alta e causou esse erro.
Solução: Para baixar arquivos do OSS para uma instância ECS ou enviar arquivos de uma instância ECS para o OSS, utilize os recursos de upload e download multipart do ossutil.
[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 ~]#
Erro de upload: Espaço em disco insuficiente para cache
-
Causa
O espaço disponível em disco é menor que
multipart_size * parallel_count.O parâmetro multipart_size especifica o tamanho da parte. A unidade padrão é MB. O parâmetro parallel_count especifica o número de partes a serem enviadas em paralelo. O valor padrão é 5.
-
Análise
Por padrão, o ossfs envia arquivos grandes usando upload multipart. Durante um upload, o ossfs grava arquivos temporários de cache no diretório /tmp. Antes de gravar dados, o ossfs verifica se o espaço livre no disco que contém o diretório /tmp é menor que
multipart_size * parallel_count. Se o espaço livre for maior quemultipart_size * parallel_count, a gravação prossegue normalmente. Se o espaço livre for menor quemultipart_size * parallel_count, o ossfs retorna um erro indicando espaço insuficiente no disco local.Por exemplo, o espaço disponível em disco é de 300 GB e o arquivo a ser enviado tem 200 GB. Se multipart_size estiver definido como 100000 (100 GB) e parallel_count permanecer no valor padrão de 5, o ossfs calcula o espaço necessário como 100 GB × 5 = 500 GB, o que excede o espaço livre local.
-
Solução
Se parallel_count permanecer no valor padrão de 5, defina multipart_size com um valor razoável.
Se o espaço disponível em disco for de 300 GB e o arquivo a ser enviado tiver 200 GB, defina multipart_size como 20.
Se o espaço disponível em disco for de 300 GB e o arquivo a ser enviado tiver 500 GB, defina multipart_size como 50.
Problemas de dependência
Erro de instalação: Biblioteca FUSE muito antiga
Causa: A versão da libfuse usada para compilar o ossfs é superior à versão da libfuse vinculada em tempo de execução. Isso frequentemente acontece se você instalar a libfuse manualmente. Em sistemas CentOS 5.x e CentOS 6.x, o pacote ossfs fornecido pela Alibaba Cloud inclui a libfuse-2.8.4. Se a libfuse-2.8.3 existir no ambiente de execução e o ossfs se vincular à versão mais antiga do FUSE, este aviso aparecerá.
Execute o comando ldd $(which ossfs) | grep fuse para confirmar a qual versão do FUSE o ossfs está vinculado em tempo de execução. Se o resultado for /lib64/libfuse.so.2, execute o comando ls -l /lib64/libfuse* para visualizar a versão do FUSE.
Solução: Configure o ossfs para se vincular à versão correta.
Execute o comando rpm -ql ossfs | grep fuse para localizar o diretório da libfuse.
Se o resultado for /usr/lib/libfuse.so.2, execute o ossfs usando o comando LD_LIBRARY_PATH=/usr/lib ossfs ….
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]#
Erro de instalação de dependência do FUSE
Causa: A versão do FUSE não atende aos requisitos do ossfs.
Solução: Baixe e instale manualmente a versão mais recente do FUSE. Não utilize o yum. Para obter mais informações, consulte fuse.
Erro no ls: Input/output error
Causa: Este problema ocorre principalmente em ambientes CentOS. O log mostra o erro NSS error -8023. Ocorre um problema quando o ossfs usa a libcurl para comunicação HTTPS, possivelmente porque a biblioteca Network Security Services (NSS), da qual a libcurl depende, é muito antiga.
Solução: Execute o seguinte comando para atualizar a biblioteca NSS para a versão mais recente:
yum update nss
Erro de instalação: Conflitos com fuse-devel
Causa: Existe uma versão antiga do FUSE no sistema que entra em conflito com a versão de dependência no ossfs.
Solução: Desinstale o FUSE usando seu gerenciador de pacotes e reinstale o ossfs.
Outros problemas
O ossfs está lento com muitos arquivos ou alta concorrência
O ossfs 1,0 não é recomendado para cenários de alta concorrência. Se for indispensável usá-lo nesses cenários, considere as seguintes opções:
Opção 1: Monte o bucket usando o ossfs 2,0. Em comparação com o ossfs 1,0, o ossfs 2,0 oferece melhorias significativas de desempenho para operações sequenciais de leitura e gravação e para leituras simultâneas de arquivos pequenos. Para obter mais informações, consulte Melhorias de desempenho.
Opção 2: Utilize o Cloud Storage Gateway para montar um bucket do OSS visando melhor desempenho. O desempenho do ossfs 1,0 não é adequado para cargas de trabalho de alta concorrência ou uploads e downloads de arquivos grandes. Ele é mais indicado para operações rotineiras em arquivos pequenos.
Arquivos enviados têm Content-Type incorreto
Causa: Ao enviar arquivos, o ossfs define o Content-Type lendo o arquivo /etc/mime.types. Se esse arquivo não existir, o ossfs assume application/octet-stream como padrão.
Solução: Verifique se esse arquivo existe. Caso contrário, adicione-o.
-
Adicione automaticamente o arquivo mime.types usando um comando.
-
Para sistemas Ubuntu:
Execute o comando sudo apt-get install mime-support.
-
Para sistemas CentOS:
Execute o comando sudo yum install mailcap.
-
-
Adicione manualmente o arquivo mime.types.
-
Crie o arquivo mime.types.
vi /etc/mime.types Adicione os formatos necessários, um por linha. Use o formato
application/javascript js.
-
Após adicionar o arquivo, você deve remontar o bucket do OSS.
Pasta identificada como arquivo
-
Cenário 1
Causa: Se você criar um objeto de pasta (um objeto cujo nome termina com uma barra (
/)) e definir seu Content-Type como text/plain, o ossfs identificará o objeto como um arquivo.Solução: Adicione o parâmetro
-ocomplement_statdurante a montagem. Se um objeto de pasta tiver tamanho 0 ou 1, o ossfs o reconhecerá como uma pasta. -
Cenário 2
Causa: Execute o comando
ossutil stat, onde<folder-object>é um nome de objeto que termina com uma barra (/). Por exemplo,ossutil stat oss://[bucket]/folder/. Após executar o comando, verifique os seguintes campos:-
Verifique o campo Content-Length, que indica o tamanho do objeto. Se o tamanho do objeto não for 0, ele será identificado como um arquivo.
Solução: Se você não precisar mais do conteúdo deste objeto de pasta, execute o comando
ossutil rm oss://[bucket]/folder/para excluir o objeto. Esta operação não afeta os arquivos dentro da pasta. Alternativamente, use o ossutil para enviar um objeto de zero bytes com o mesmo nome para sobrescrever o objeto de pasta. -
Se o tamanho do objeto for 0, verifique o campo Content-Type. Se o valor deste campo não for
application/x-directory,httpd/unix-directory,binary/octet-streamouapplication/octet-stream, o objeto também será identificado como um arquivo.Solução: Execute o comando
ossutil rm oss://[bucket]/folder/para excluir o objeto. Esta operação não afeta os arquivos dentro da pasta.
-
Falha na operação mv
Causa: A operação mv no ossfs pode falhar se o arquivo de origem for um objeto do Archive Storage, Cold Archive ou Deep Cold Archive.
Solução: Antes de executar a operação mv, restaure o objeto. Para obter mais informações, consulte Restaurar objetos.
Suporte ao Windows
Não. No Windows, você pode montar um bucket usando o Rclone. Para obter mais informações, consulte Rclone.
Montagem em vários servidores Linux
Sim. É possível montar em vários servidores ECS Linux. Para obter mais informações, consulte Montar um bucket.
Informações de arquivo inconsistentes entre ferramentas
Causa: Por padrão, o ossfs armazena em cache os metadados dos arquivos, incluindo tamanho e permissões, para melhorar o desempenho. Isso evita o envio de uma solicitação ao OSS sempre que você executa o comando ls. Se você modificar arquivos usando outras ferramentas, como um SDK, o console do OSS ou o ossutil, o ossfs pode não atualizar seu cache a tempo, resultando em inconsistências de dados.
Solução: Adicione o parâmetro -omax_stat_cache_size=0 ao montar o bucket para desativar o cache de metadados. Cada vez que o comando ls for executado, uma solicitação será enviada ao OSS para buscar as informações mais recentes do arquivo.
Montagem lenta após ativar o versionamento
Causa: Por padrão, o ossfs lista arquivos usando a operação ListObjects (GetBucket). Se o versionamento estiver ativado e o bucket contiver uma ou mais versões históricas de objetos e um grande número de marcadores de exclusão expirados, listar os objetos atuais usando ListObjects (GetBucket) pode ser lento, o que degrada o desempenho da montagem.
Solução: Adicione a opção -olistobjectsV2 para alternar o ossfs para o uso da operação ListObjectsV2 (GetBucketV2), visando melhor desempenho de listagem.
Montagem via HTTPS
O ossfs suporta montagem via HTTPS. Abaixo está um exemplo de comando para a região China (Hangzhou):
ossfs examplebucket /tmp/ossfs -o url=https://oss-cn-hangzhou.aliyuncs.com
O comando ls está lento em diretórios grandes
Causa: Se um diretório contiver N arquivos, listar seu conteúdo requer pelo menos N solicitações HTTP ao OSS. Isso pode causar sérios problemas de desempenho quando N é grande.
Solução: Aumente o tamanho do cache de estatísticas usando o parâmetro -omax_stat_cache_size=xxx. A primeira operação ls será mais lenta, mas as chamadas subsequentes serão mais rápidas porque os metadados ficam armazenados em cache localmente. Antes do ossfs 1.91.1, o valor padrão deste parâmetro era 1.000. No ossfs 1.91.1 e posterior, o valor padrão é 100.000, o que consome dezenas de megabytes de memória. Ajuste esse valor com base na memória disponível da sua máquina.
Erro de desmontagem: Device or resource busy
Causa: Um processo está acessando arquivos sob o ponto de montagem /mnt/ossfs-bucket, o que impede que o diretório seja desmontado.
Solução:
Execute o comando
lsof /mnt/ossfs-bucketpara encontrar o processo que está utilizando o diretório.Use o comando
killpara encerrar o processo.Execute o comando
fusermount -u /mnt/ossfs-bucketpara desmontar o bucket.
Grande quantidade de logs 404 no ossfs 1,0
Informações básicas: Ao usar o ossfs 1,0, é comum ver registros 404 Not Found nos logs. Na maioria dos casos, isso não é um erro do sistema. É um comportamento esperado, pois o ossfs 1,0 simula um sistema de arquivos local.
Antes de operar em um arquivo, o sistema operacional verifica se o objeto alvo existe. Esse processo pode acionar muitas solicitações de sondagem ao OSS. Se um objeto não existir, o OSS retorna um código de status 404.
As etapas a seguir descrevem como o ossfs 1,0 verifica se um objeto existe:
-
O ossfs envia uma solicitação HeadObject para verificar se o caminho especificado, como
object, existe como um objeto real.Se o objeto existir, o sistema retorna os metadados do objeto. Se o objeto não existir, o sistema retorna um erro 404 e prossegue para a próxima etapa.
-
Após receber o erro 404, o ossfs envia uma solicitação HeadObject para verificar se existe um objeto
object/.Se o objeto existir, o sistema retorna os metadados do objeto. Se o objeto não existir, o sistema retorna um erro 404 e prossegue para a próxima etapa.
-
Após receber o erro 404, o ossfs envia uma solicitação HeadObject para verificar se existe um objeto
object_$folder$.Se o objeto existir, o sistema retorna os metadados do objeto. Se o objeto não existir, o sistema retorna um erro 404 e prossegue para a próxima etapa.
-
Após receber o erro 404, o ossfs envia uma solicitação ListObjects para determinar se o caminho especificado é um diretório, listando objetos com o prefixo
object/.Se o resultado estiver vazio, o caminho não existe. Se o resultado não estiver vazio, o diretório existe e o sistema lista o conteúdo do diretório.
Causa:
Se você usar comandos como
statpara acessar um arquivo que não existe, o OSS retorna um erro 404, que é mapeado para o erro do sistema de arquivos local "No such file or directory".Antes de criar arquivos ou diretórios em massa, o sistema operacional verifica se o alvo existe e envia uma solicitação de criação apenas se ele não existir. Os erros 404 gerados durante essa verificação são comportamentos esperados, não um problema do sistema.
Solução: Embora um erro 404 indique um comportamento esperado, solicitações frequentes de sondagem podem afetar o desempenho em cenários de alta concorrência ou operações em massa. Use as seguintes opções para otimizar o desempenho:
Após configurar essas opções, o ossfs 1,0 não consegue detectar alterações feitas em objetos no OSS até que o cache local expire.
-
Aumente os valores de
-o stat_cache_expiree-o max_stat_cache_sizepara estender a duração do cache de metadados e aumentar o número de entradas de cache.Se você consultar um arquivo ou diretório antes que seus metadados expirem, o ossfs evita o envio de solicitações repetidas ao OSS.
-o stat_cache_expire: especifica o tempo de expiração do cache de metadados. O valor padrão é 900s.-o max_stat_cache_size: especifica o número de entradas no cache de metadados. O valor padrão é 100000.
-
Se você usar uma versão do ossfs anterior à 1.91.6, ative o cache negativo usando a opção
-o enable_noobj_cache. No ossfs 1.91.6 e posterior, o cache negativo é ativado por padrão.Quando um arquivo é consultado pela primeira vez e não existe, o ossfs armazena o resultado em cache na memória. Antes que o cache expire, consultas subsequentes usam o cache negativo local em vez de enviar solicitações ao OSS.
NotaNo ossfs 1,0, o cache negativo de arquivos faz parte do cache de metadados. Use o parâmetro
-o stat_cache_expirepara controlar o tempo de expiração e o parâmetro-o max_stat_cache_sizepara controlar o número máximo de entradas de cache.