Para habilitar a montagem de uma chave USB formatada com sistema de arquivos, ntfs
criei o seguinte fragment.cfg
arquivo:
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
e compilei o kernel com o comando:
bitbake -C compile virtual/kernel
Com essa modificação na configuração do kernel minha distribuição consegue executar a montagem de um ntfs
USB pelo comando:
> mount /dev/sda /media/sda
onde /dev/sda
está o dispositivo associado à chave USB e /media/sda
é o ponto de montagem.
O sistema de arquivos é montado, mas somente leitura. Isso é mostrado pelo comando a seguir:
# mount | grep media
/dev/sda on /media/sda type ntfs (ro,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1,errors=continue,mft_zone_multiplier=1)
No arquivo de fragmento que configurei CONFIG_NTFS_RW=y
, então por que o ntfs
sistema de arquivos de uma chave USB é montado somente leitura?
EDITAR
Se eu executar o comando dmesg
obtenho a seguinte mensagem:
> dmesg
...
(device sda): load_system_files(): Volume is dirty. Mounting read-only. Run chkdsk and mount in Windows.
Eu segui as informações escritas na mensagem anterior:
- Eu inseri o USB em um sistema Windows
- O sistema Windows executou um scanfix do USB
Depois disso executei corretamente a montagem R/W do USB no meu sistema Linux:
> mount -t ntfs /dev/sda /media/sda
> mount | grep media
/dev/sda on /media/sda type ntfs (rw,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1,errors=continue,mft_zone_multiplier=1)
Neste ponto, se eu tentar escrever no USB, recebo o seguinte erro:
> touch /media/sda/write_ntfs.txt
touch: cannot touch '/media/sda/write_ntfs.txt': Permission denied
O mesmo se eu tentar alterar a permissão de um arquivo presente no USB:
> chmod 777 /media/sda/filename.csv
chmod: changing permissions of '/media/sda/filename.csv': Operation not supported
Então, apesar da saída do comando mount
, parece que a montagem do USB ainda é somente leitura!
Limitações do suporte de gravação do driver NTFS
Como está escrito em um dos comentários de @Tom Yan, o
ntfs
driver tem algumas limitações de gravação (veja este link ):@Tom Yan também sugeriu usar o driver NTFS3 porque ele oferece acesso completo de leitura e gravação a qualquer imagem NTFS até a versão 3.1 do NTFS (veja este link ).
O problema é que minha versão do kernel é 5.4, enquanto o novo driver NTFS3 foi introduzido à comunidade pela Paragon Software na versão 5.15 do kernel (veja este link para detalhes).
Outra maneira de resolver o problema
Porque neste momento não quero mudar a versão do meu kernel, fiz muitos testes e pesquisas e resolvi meu problema sem o uso do
ntfs
driver. Encontrei este link que me sugeriu uma solução diferente para o meu problema.Remoção do módulo do kernel
ntfs
Removi o módulo do kernel
ntfs
da configuração do kernel; para fazer isso, removi o arquivofragment.cfg
mostrado na pergunta dos arquivos de configuração usados para a compilação do kernel.Adicionar pacotes da receita
ntfs-3g-ntfsprogs
Depois disso usei a receita:
Esta receita define os pacotes
ntfs-3g ntfsprogs libntfs-3g
. Pela variávelIMAGE_INSTALL
adicionei estes pacotes à minha imagem:Novos sistemas de arquivos suportados
Com essas alterações na configuração do kernel e a adição dos pacotes anteriores, se eu executar o comando
cat /proc/filesystems
, na lista de sistemas de arquivos disponíveis suportados, aparecem os 3 sistemas de arquivos a seguir:Finalmente a chave é montada para leitura e escrita pelo sistema de arquivos
fuseblk
Agora a montagem do sistema de arquivos do USB é (realmente) de leitura e gravação:
A chave USB é montada com
fuseblk
o sistema de arquivos (e nãontfs
como mostrado acima na minha pergunta).Este tipo de montagem permite escrever na chave USB:
Não sei se isso é apenas uma solução alternativa ou se é a melhor solução no meu contexto (versão do kernel), mas decidi usar esse método para resolver meu problema.