Suporte a escrita em partições NTFS no Linux com o Captive

Há mais de um ano escrevi um texto que explicava como montar partições NTFS no linux e dar acesso (apenas de leitura) a qualquer usuário ou grupo de
usuários.

Desde então frequentemente recebo emails de leitores querendo saber como fazer para poder ter acesso de escrita nessas partições. Alguns, provavelmente leitores de títulos, escrevem reclamando do fato de não conseguirem criar, modificar e apagar arquivos em tais partições, mesmo eu tendo deixado bem claro no texto que o suporte a NTFS no kernel era apenas de leitura e o pouco suporte a escrita que foi conseguido no kernel 2.6 é extremamente limitado (permite apenas modificar aquivos, desde que se mantenha o mesmo tamanho, ou seja, é inútil).

Antes de continuar, devo deixar claro que o fato de o kernel do Linux não ter suporte completo a escrita em NTFS não é culpa de seus desenvolvedores. o NTFS é um sistema de arquivos proprietário, fechado, e o pouco suporte conseguido até hoje se deve a trabalhos de engenharia reversa.

Mas nem tudo está perdido. Se você realmente precisa escrever em suas partições NTFS pelo linux há hoje duas ferramentas — pelo menos que eu conheça — para realizar esta tarefa. São elas o Captive e o Paragon NTFS For Linux.

O Paragon NTFS For Linux é uma ferramenta proprietária e sua versão demo tem apenas suporte a leitura. Portanto não pude testá-lo.

Já o Captive é uma ferramenta livre e grátis, que usa um processo bem parecido com o que o Wine usa para rodar programas windows no linux. Ou seja, utiliza arquivos de sistema do windows para proporcionar acesso total de leitura e escrita a partições NTFS.

Vamos dar uma olhada nele.

Infelizmente o Captive é muito mal documentado. A informação contida em sua página é insuficiente e até mesmo confusa. Fiz algumas buscas pelo google e também não achei nada que pudesse me ajudar muito. Portanto o jeito foi baixar o programa e meter a mão na massa pra ver se funciona e como funciona.

Eu instalei o Captive em um sistema Debian Sarge, portanto não posso garantir que o processo que usei vá funcionar em outras distribuições. Pelo que é dito na página do Captive, o pacote RPM que é disponibilizado foi testado nas distribuições Red Hat (8 e 9), SuSe (9.0 e 9.1) e Mandrake 9.1.

Outra alternativa é baixar o pacote binário, contido em um arquivo .tar.gz. Mas eu preferi pegar o RPM, que costuma dar menos dor de cabeça para instalar.

Instalando RPMs no Debian

Se você for usuário de Debian, deve saber que o sistema de pacotes usado por ele não é o RPM e sim o DEB. Mas, instalar pacotes RPM é bem simples, com a ajuda de uma ferramenta chamada Alien.

Se você não tiver o alien instalado, faça um apt-get install alien.

Baixe o arquivo RPM disponibilizado na página do Captive e converta-o para DEB, com o comando alien --to-deb captive-static-1.1.5-0.i386.rpm. Será gerado o arquivo captive-static_1.1.5-1_i386.deb

Instalando e usando o Captive

Tendo gerado o arquivo captive-static_1.1.5-1_i386.deb, instale-o com o comando dpkg -i captive-static_1.1.5-1_i386.deb.

Agora você vai precisar de alguns arquivos do windows para que o Captive funcione. São eles: ntfs.sys, cdfs.sys, fastfat.sys, localizados em C:WINDOWSsystem32drivers (assumindo que seu windows está instalado em C:WINDOWS) e ntoskrnl.exe, localizado em C:WINDOWSsystem32.

Nota: O windows que tenho instalado é o XP Service Pack 2 em português. Se o seu for o mesmo, os seus arquivos não vão funcionar com o Captive, por motivos que desconheço. A solução é tentar baixar estes arquivos na internet ou, como eu fiz, utilizar os arquivos que estão no CD de instalação do Windows em /I386/. Perceba que alguns arquivos têm a extensão terminada em _, como FASTFAT.SY_ e NTOSKRNL.EX_. Simplesmente renomeie-os, no caso para fastfat.sys e ntoskrnl.exe, respectivamente.

Copie todos esses arquivos para uma pasta qualquer, por exemplo, /home/user/ntfs/ (claro, substituindo user pelo nome do seu usuário no linux).

O próximo passo é executar uma ferramenta chamada captive-install-acquire, que vai buscar por esses arquivos em seu HD e jogá-los para o lugar onde devem ficar. Por padrão, o captive-install-acquire tem uma interface gráfica em Gtk, que não te dá opção nenhuma a não ser deixá-lo procurar pelos arquivos em seu HD, processo que travou minha máquina por duas vezes. Portanto, use sua versão de texto, captive-install-acquire --text.

Responda não (N) à primeira pergunta Quickly scan your local disks to find needed drivers?, e à segunda Fully scan all directories of your local disks?. O próximo passo te pede para entrar um diretório específico para ser escaneado. Digite o caminho do diretório onde você gravou os arquivos do windows, no nosso caso, /home/user/ntfs/.

Se você copiou os arquivos certos para esse diretório, o captive vai encontrá-los e informar isso a você. Após isso, a pergunta anterior será feita mais uma vez. Responda Done (D), finalizando este processo.

Pronto. O captive está instalado e deve funcionar a contento.

Para montar a partição, use o comando mount -t captive-ntfs /dev/hda1 /win (supondo que a sua partição NTFS está em /dev/hda1 e o ponto de montagem é /win). Para montar a partição com acesso para usuários comuns, use o processo descrito em Como montar partições NTFS no linux, trocando apenas ntfs por captive-ntfs.

Disclaimer: Não posso garantir que esse processo funcione em qualquer distribuição linux e sob qualquer condição. Apenas estou descrevendo o processo que usei em minha máquina, usando um Debian Sarge. Espero que funcione para você também, mas simplesmente não posso garantir nada. Use por sua conta e risco.

Desempenho

Não posso dizer nada conclusivo sobre o desempenho do Captive ao escrever arquivos em partições NTFS. Fiz apenas um teste, copiando um arquivo de 36MB (source do kernel do linux) e o resultado foi:

# time cp linux-2.6.12.2.tar.bz2 /win/

real    3m26.402s
user    0m0.087s
sys     0m1.322s

Para efeito de comparação, copiei o mesmo arquivo para uma partição FAT32, usando o suporte do próprio kernel do linux:

# time cp linux-2.6.12.2.tar.bz2 /winfat/

real    0m0.430s
user    0m0.002s
sys     0m0.173s

Como podem ver, o desempenho do Captive é um pouco decepcionante, pelo menos à primeira vista. Mas se você tem real necessidade de ter suporte a escrita em suas partições NTFS pelo Linux, o Captive pode ser uma boa solução. As operações com arquivos pequenos ocorreram normalmente. Não há sensação de lentidão no processo.

Segurança

Não encontrei praticamente nada referente à segurança do Captive. Pelo que li em sua página, o fato de ele usar os arquivos do próprio windows para oferecer suporte a escrita torna o processo mais seguro. Mas, ninguém garante que os seus arquivos estarão 100% seguros.

Eu fiz algumas operações básicas, montei e desmontei a partição algumas vezes, copiei, apaguei e modifiquei alguns arquivos e nada de mau aconteceu.

Uma coisa importante é que é preciso desmontar o volume antes de desligar ou reiniciar a máquina. Pelo que li isso é imprescindível, portanto, se você acha que não vai lembrar de desmontar suas partições antes de desligar, coloque o comando umount /win (mais uma vez, assumindo que o ponto de montagem é /win) em um script que vá rodar nos runlevels 0 (desligar) e 6 (reboot).

No debian, faça o seguinte:

# echo "umount /win" > /etc/init.d/umountntfs

# ln -s /etc/init.d/umountntfs /etc/rc0.d/K01umountntfs

# ln -s /etc/init.d/umountntfs /etc/rc6.d/K01umountntfs

Concluindo, o Captive está longe de ser a solução perfeita para ter acesso completo de escrita em partições NTFS, mas é a única solução livre e grátis discponível, até onde sei. Faça bom proveito.

10 Comentários sobre “Suporte a escrita em partições NTFS no Linux com o Captive”

Faça um comentário

Opa Bruno!!

Queria te perguntar uma coisa…

Montar uma rede com o Sistema Operacional Linux é mais dificil do que com o Windows???

Estarei aguardando!

Ate +


#2 | Tiago Bugarin

Recentemente eu tentei instalar o captive num pc com dual-boot e não tive sucesso. Mas isso não vem ao caso agora.

Um detalhe interessante nessa experiência foi que ao ignorar as opções de busca em todas as partições e de apontamento do local dos arquivos necessários o instalador me perguntou se eu queria baixar um service pack oficial e extrair dele os arquivos necessários.

Ao que parece a licensa do tal service pack é similar ao conhecido msttcorefonts (Microsoft TrueType Core Fonts).

Foi um download de uns 31mb (o donwload foi parcial o que me deixou muito aliviado já que o tal service pack tem um total de 160mb) e a extração foi realizada simultaneamente ao download automáticamente.


Para mim o correto seria dizer que este é o único *programa* livre, não solução. Faço essa distinção pelo fato de que apesar de a "cola" entre os drivers do NT e o kernel do Linux ser livre, os drivers do NT não são, o que faz com que a solução completa não seja livre.

Esse é o mesmo caso de um programa Java livre que não roda no Kaffe ou no GCJ. Ele é livre, porém atrelado a um não-livre (o JVM da Sun).

Bom, apenas meu breve comentário,

Felipe.


E ai Bruno,

Ótima analise feita por vc do captive, para leitura e escrita de partições NTFS. Ainda bem que nem uso mais essa solução.

Falou,

:)


#5 | cristiano rusch

eu instalei o captive, transformando o rpm em deb aki no kalando linux 3.1;

Entaum abri o active em modo texto e mandei procurar pelo arquivos.. dae ele faz o seguinte:

[quote]

Found although not best "ntfs.sys" (pri=510000090; best=515110690): MS-Windows XP (No Service Pack) Free Build 5.1.2600.0 NTFS

Found best available "ext2fsd.sys": ext2 Filesystem v0.10a by http://sys.xiloo.com Checked Build English

Still needed essential module: ntoskrnl.exe

Do you want to enter your custom search path and/or files? You can also enter web URL.

Enter pathname or URL [hit ENTER to skip it]: /home/lunga/Documentos/downs/escritantfs

Found although not best "ntfs.sys" (pri=510000090; best=515110690): MS-Windows XP (No Service Pack) Free Build 5.1.2600.0 NTFS

Found best available "ext2fsd.sys": ext2 Filesystem v0.10a by http://sys.xiloo.com Checked Build English

Still needed essential module: ntoskrnl.exe

Do you want to enter your custom search path and/or files? You can also enter web URL.

Enter pathname or URL [hit ENTER to skip it]:

[/quote]

o q esta errado?


opa, bom o artigo, recentemente fiz uns testes no windows e ele foi pra fita, renomeei C:/winnt/system32/config para config3 e nao consegui desfazer nem com o CONSOLE DE RECUPERAÇÃO, acho que pq é ali que ficam as contas de usuários.. seria possivel renomear simplesmente uma pasta com essa "solução"???????? OBS, isso contando que esta na pastinha do windows, ou seja, acesso ADMIN.. daria?????????

Obrigado desde já….


#7 | dudus

cara exelente… eu tava procurando isso dae a moh cara


#8 | otacilio rabello

tem alguma versão pra debian-64 ou ubuntu-64.

pois baixei os fontes mas não compila.


Pessoas recomendo a leitura desse artigo:
http://www.guiadohardware.net/dicas/ntfs3g.html

O Linux já tem um solução definitiva para o leitura e escrita em partições NTFS. Sem precisar ficar montando e desmontando nada, até onde eu sei. Vou testar hoje a noite.


#10 | Flavio

Le este tutorial e ja fazia um tempo q eu estava procurando algo assim porem estou tendo um problema eu encontrei os seguintes arquivos NTFS.SYS CDFS.SY_ e FASTFAT.SY_ porem nao achei o arquivo ntoskrnl.exe q seria em no cd NTOSKRNL.EX_
o comando q usei foi este find /media/cdrom/ |grep NTOSKRNL entao significa q em meu cd nao tem este arquivo bem pra facilitar se vc puder me mandar por e-mail este arquivo ficarei grato flaviodbz@yahoo.com.br


«

»

Deixe seu comentário