Captive-NTFS com kernel 2.6

Muitos, inclusive eu, utilizam esta "maravilha" que é o captive-ntfs, porém poucos conseguem fazer com que o captive funcione com os kerneis mais novos, como os da família 2.6. Na verdade trata-se de uma imcompatibilidade com o Lufs e é o que vamos tentar resolver aqui.

[ Hits: 33.972 ]

Por: Wainer Chiari em 09/03/2006


A solução



Sim, nós temos a solução, mas primeiro vamos entender por que ocorre tal problema:

Na verdade, o que ocorre é que o lufs é um projeto meio antigo e sem atualização, mas o kernel é atualizado sempre e como o lufs é um módulo, uma parte do kernel depende da compatibilidade do mesmo para que funcione. O problema é que em uma dessas atualizações do kernel, uma das muitas linhas de código-fonte do kernel, uma função entrou em desuso sabe-se lá por que e foi "aposentada". Não preciso nem dizer que esta função é justamente uma das que o lufs precisa para funcionar. Entenderam???

Esta função é a "symbol kill_proc_info", um sinal a ser lido pelo kernel e está no arquivo signal.c, dentro da pasta kernel, que se encontra nos "sources" do kernel.

A solução:

Para colocarmos o lufs para funcionar, vamos fazer uma pequena "gambiarra", vamos compilar o kernel:

Edite o arquivo kernel/signal.c dentro da pasta dos fontes do seu kernel (provavelmente /usr/src/linux/). Você precisa ter status de root para editar este arquivo.

Procure pela linha:

EXPORT_SYMBOL(kill_proc);

Aqui ela estava na linha 1984 (Kernel 2.6.13), mas em outras versões não deve estar muito longe dali.

Adicione a seguinte linha abaixo desta tal linha:

EXPORT_SYMBOL(kill_proc_info);

Ou seja, no final, você vai ter um bloco de linhas como este:

EXPORT_SYMBOL(recalc_sigpending);
EXPORT_SYMBOL_GPL(dequeue_signal);
EXPORT_SYMBOL(flush_signals);
EXPORT_SYMBOL(force_sig);
EXPORT_SYMBOL(kill_pg);
EXPORT_SYMBOL(kill_proc);
EXPORT_SYMBOL(kill_proc_info);
EXPORT_SYMBOL(ptrace_notify);
EXPORT_SYMBOL(send_sig);
EXPORT_SYMBOL(send_sig_info);
EXPORT_SYMBOL(sigprocmask);
EXPORT_SYMBOL(block_all_signals);
EXPORT_SYMBOL(unblock_all_signals);

Pronto, salve o arquivos e recompile seu kernel normalmente.

Página anterior     Próxima página

Páginas do artigo
   1. Aviso
   2. O Captive
   3. O problema
   4. A solução
   5. Depois da gambiarra
Outros artigos deste autor

Fontes True Type no Slackware (sem xfstt e ttmkfdir)

Gerando pacotes no Slack com o checkinstall

Gtk-Qt Engine: temas Qt em aplicações GTK

Chrome Remote Desktop - O serviço de acesso remoto do Google

Modens PCTEL/LG/VIA sem complicação (talvez um pouquinho)

Leitura recomendada

Stripe no LVM

Recuperando arquivos em um Windows corrompido com Linux

Backup fácil de seus arquivos com o Backintime

Linux - Manipulando partições de disco

20 passos para aumentar o espaço de armazenamento de um cluster CentOS 6

  
Comentários
[1] Comentário enviado por agk em 09/03/2006 - 14:41h

Humm, realmente muito interessante esse seu artigo, parabéns.
Eu tive exatamente esse problema com o Lufs (Linux userland File System), acho que é assim que escreve, depois de muito empenho eu consegui fazer funcionar, mas a minha decepção foi tamanha que jamais recomendei pra ninguém essa solução.
A velocidade era uma das causas, as vezes levava mais de 20 segundos para abrir umas pasta. Outro problema era renomear, copiar e deletar arquivos. Eu deletava um arquivo, e alguns segundos depois dava um ls e ele estava de volta.
Para mim pareceu uma solução completamente bugada e sem condições de uso, tanto que fiz uma partição fat32 para contornar o problema e continuei a usar a minha ntfs como readonly.
Vou testar essa solução do artigo, depois eu posto o resultado aqui.

[2] Comentário enviado por agk em 09/03/2006 - 14:44h

Verifiquei no meu Kernel 2.6.8 e já existe a linha que eu deveria adicionar.

[3] Comentário enviado por agk em 09/03/2006 - 15:03h

Fiz os procedimentos descritos no artigo, exceto recompilar o kernel, porque o módulo lufs está funcionando corretamente.
Como você colocou no fstab para carregar a partição automaticamente no e com permissão para os users?

[4] Comentário enviado por Token em 10/03/2006 - 05:11h

Prefiro usar o NTFS nativo e oficial do Kernel 2.6. Você não sabia que é possível? É mais seguro, sempre atualizável, há suporte para escrita e gravação, etc...

Tô fora de softwares de terceiros.

Para ativar o módulo NTFS no kernel.

$cat /usr/src/linux/.config|grep NTFS
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set

E depois .... "mount -t ntfs /dev/hda1 /mnt/ntfs"

Simples.

[5] Comentário enviado por agk em 10/03/2006 - 09:00h

Token, acho que você está enganado quanto ao suporte de escritado do módulo ntfs do kernel.
Segue a descrição dele contida no menu de configuração do Kernel:

CONFIG_NTFS_RW:

This enables the partial, but safe, write support in the NTFS driver.

The only supported operation is overwriting existing files, without
changing the file length. No file or directory creation, deletion or
renaming is possible. Note only non-resident files can be written to
so you may find that some very small files (<500 bytes or so) cannot
be written to.

While we cannot guarantee that it will not damage any data, we have
so far not received a single report where the driver would have
damaged someones data so we assume it is perfectly safe to use.

Note: While write support is safe in this version (a rewrite from
scratch of the NTFS support), it should be noted that the old NTFS
write support, included in Linux 2.5.10 and before (since 1997),
is not safe.
This is currently useful with TopologiLinux. TopologiLinux is run
on top of any DOS/Microsoft Windows system without partitioning your
hard disk. Unlike other Linux distributions TopologiLinux does not
need its own partition. For more information see
<http://topologi-linux.sourceforge.net/>
It is perfectly safe to say N here.

Resumindo:
Você tem suporte a gravação sim, mas apenas para alterar arquivos, ou seja, não poderá criar arquivos novos, e mesmo assim é um suporte limitado a manter o arquivo com o mesmo tamanho.
O NTFS do Kernel do Linux funciona perfeitamente para leitura, mas sinceramente, para gravação ele é praticamente inútil.
[ ]'s.

[6] Comentário enviado por removido em 11/03/2006 - 11:41h

Bem legal esse artigo, mas eu achei outra solução. Ao invés de usar o lufs, eu instalei o FUSE, que pode ser encontrado no Sourceforge. Foi bem fácil, não precisei recompilar kernel nem nada, quer dizer, pelo menos pra mim funcionou. Eu acho que vale a pena tentar.

[7] Comentário enviado por rodrigodlima em 18/03/2006 - 14:13h

Muito bom artigo!
Estou utilizando o Ubuntu 5.10 Breezer, precisei apenas baixar e instalar o Captive. Aqui funcionou perfeitamente. Não precisei instalar o Lufs. Acredito que por default, ele carregou o módulo Fuse na hora da montagem. Olha só:
rodrigo@ubuntu:~/captive-static-1.1.7$ sudo mount -t captive-ntfs /dev/hda1 /mnt/drive-c/
/usr/libexec/captive-fusermount: Notice: Created FUSE device: /dev/fuse
/usr/libexec/captive-fusermount: Notice: Loaded Linux kernel module FUSE: /sbin/modprobe fuse

Tá funcionando blz!

[8] Comentário enviado por jldomingos em 14/03/2007 - 10:37h

Sem desmerecer o captive, achei o ntfs-3g foi milhões de vezes mais fácil e estável de usar. O captive me deu muita dor de cabeça e com os fontes do FUSE e do NTFS-3G em poucos minutos consegui gravar numa partição NTFS arquivos de vídeo que totalizavam quase 200GB, onde o captive abortava no primeiro arquivo realmente grande que encontrava. Por melhor que o captive possa ser, o NTFS-3G se mostrou uma jóia pra mim. Abraço galera !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts