1 pontos por GN⁺ 2024-12-01 | 1 comentários | Compartilhar no WhatsApp
  • Ntfs2btrfs é uma ferramenta que converte em in-place o sistema de arquivos Microsoft NTFS para o sistema de arquivos open source Btrfs, funcionando de forma semelhante ao btrfs-convert para ext2
  • Antes da conversão, a imagem original é salva em image/ntfs.img como uma cópia reflink; para manter o resultado da conversão, é possível excluir essa imagem para liberar espaço
  • No Windows, execute ntfs2btrfs.exe D:\ no Prompt de Comando com privilégios de administrador; no Linux, execute ntfs2btrfs /dev/sda1 como root
  • Não funciona em unidade de boot nem em unidades com o pagefile atualmente em uso; ao usar o WinBtrfs, é preciso remover a flag readonly do subvolume image para poder excluí-lo
  • O suporte inclui arquivos, diretórios, links simbólicos, descritores de segurança, fluxos de dados alternativos, rollback do NTFS e preservação de metadados LXSS, mas não oferece suporte a arquivos criptografados nem a tamanhos de cluster incomuns

O que o Ntfs2btrfs faz

  • Ntfs2btrfs é uma ferramenta para conversão em in-place de sistemas de arquivos NTFS para Btrfs
  • A imagem original é salva em image/ntfs.img como uma cópia reflink
    • Se quiser manter o resultado da conversão, é possível apagar esse arquivo para liberar espaço
  • A ferramenta é descrita como estável, mas inclui o aviso de que o autor não se responsabiliza caso surjam problemas
  • Também há referência ao WinBtrfs, driver de sistema de arquivos Btrfs para Windows, como projeto relacionado
  • É usado o código ntfs-3g-system-compression de Eric Biggers, que fez engenharia reversa do “WOF compressed data” do Windows 10

Como usar e limitações

  • No Windows, execute no Prompt de Comando com privilégios de administrador
    • ntfs2btrfs.exe D:\
  • No Linux, especifique o dispositivo de bloco com privilégios de root
    • ntfs2btrfs /dev/sda1
  • No Windows, os seguintes alvos não podem ser convertidos
    • Unidade de boot

      • Unidade com pagefile atualmente em uso
      • Ao usar o WinBtrfs, para excluir o subvolume image, primeiro é necessário remover a flag readonly

Caminhos de instalação

  • No Windows, é possível baixar o arquivo Zip mais recente na página de Releases ou usar o Scoop
  • Há pacotes disponíveis para diferentes distribuições Linux
  • Em outras distribuições ou sistemas operacionais, é necessário compilar manualmente

Compilação e dependências

  • No Windows, abra o diretório do código-fonte com uma versão recente do MSVC e execute Compile a partir de CMakeLists.txt
  • No Linux, faça o build com cmake e make
    • mkdir build
    • cd build
    • cmake ..
    • make
  • O build requer libfmt, que pode ser instalado pelo gerenciador de pacotes
  • O suporte a compressão requer zlib, lzo, zstd
    • É possível desativar esse suporte com as opções do CMake WITH_ZLIB, WITH_LZO, WITH_ZSTD

Recursos suportados

  • Os itens abaixo podem ser convertidos ou preservados
    • Arquivos

    • Diretórios

      • Links simbólicos
      • Outros reparse points
      • Descritores de segurança
      • Fluxos de dados alternativos
      • Atributos DOS
      • hidden, system etc.
      • Rollback para a imagem NTFS original
      • Preservação de metadados LXSS

Itens não suportados

  • Os antigos atributos estendidos do Windows não são suportados
  • Fluxos de dados alternativos grandes, acima de 16KB, não são suportados
  • A preservação da flag de case-sensitivity não é suportada
  • Tamanhos de cluster incomuns, diferentes de 4KB, não são suportados
  • Arquivos criptografados não são suportados

Principais mudanças visíveis no histórico

  • A release de 2025-06-16 corrige problemas de compilação com o GCC 15
  • A release de 2024-01-15 corrige um problema de compilação causado pelo fato de o -Werror=incompatible-pointer-types passar a vir ativado por padrão no GCC 14
  • A release de 2023-05-01 corrige um problema na ordem de inline extent items e outro no valor de level de metadata items
    • Está indicado que ambos os problemas não eram diagnosticados por btrfs check
    • ADS com nomes excessivamente longos passaram a ser ignorados
  • A release de 2022-08-12 inclui a opção --no-datasum, preservação de metadados LXSS/WSL, correção no reconhecimento de letras de unidade minúsculas e correção de corrupção ao posicionar arquivos na última área de 1MB
  • A release de 2021-09-23 adiciona suporte a compressão no Btrfs e suporte a rollback
    • A compressão suporta zlib, lzo, zstd
    • O algoritmo de hash passa a oferecer suporte adicional a xxhash, sha256, blake2
    • Também há suporte a descritores de segurança no estilo NT4
    • A velocidade de conversão foi melhorada em volumes com muitos inodes
    • Também foi corrigido um bug de corrupção de sistema de arquivos que o btrfs check não conseguia detectar
  • A release de 2021-01-05 inclui correções relacionadas a compressão NTFS, “WOF compressed data” e arquivos esparsos

Ao inicializar o Windows a partir do Btrfs

  • É indicado que inicializar o Windows a partir de um Btrfs convertido por esta ferramenta pode ser possível, desde que as condições sejam adequadas
  • Há referência ao projeto relacionado Quibble

1 comentários

 
GN⁺ 2024-12-01
Comentários do Hacker News
  • O link para o Quibble, que fez uma engenharia reversa aberta e extensível do bootloader do kernel do Windows, foi muito mais interessante: https://github.com/maharmstone/quibble

  • Se eu fosse fazer isso no ZFS, acho que adicionaria uma camada que lê outros formatos de sistema de arquivos e sintetiza ponteiros de bloco do ZFS
    Assim, o ZFS poderia ler outro sistema de arquivos e, durante as escritas, regravar tudo aos poucos. Se o ZFS tivesse um recurso de reescrita de ponteiros de bloco, daria para mandar regravar tudo e concluir a conversão, mas já expliquei antes que o ZFS não é um sistema de arquivos CAS (armazenamento endereçado por conteúdo) de verdade, então ele não tem esse recurso e nem pode ter

  • Alguém aqui que usa BTRFS pode dizer como está a estabilidade hoje em dia? Antigamente eu via muitos casos assustadores

    • Como é o padrão no openSUSE, uso há anos no meu PC principal e no notebook, e descobri que snapshots eram um recurso que eu nem sabia que queria
      Nunca tive problemas, mas é irritante que o espaço livre que o BTRFS acha que existe nem sempre bata com o que o restante do sistema operacional acha. Ainda assim, raramente isso virou um problema de fato
    • Uso só BTRFS há mais de 10 anos no notebook pessoal, em servidores e em dispositivos embarcados, e nunca tive um único problema
      Exceto para cargas de trabalho de banco de dados, vejo como o principal sistema de arquivos do Linux, a ponto de não entender por que alguém usaria outro
    • Uso há anos nos meus equipamentos pessoais e com backups via btrbk, sem problemas
    • Com menos de 1 ano de uso, no Tumbleweed, ele quebrou quando o disco ficou cheio
      Tentei acessar e consertar a partição quebrada por um ambiente de instalação paralelo, mas não adiantou
    • O Btrfs está corroendo meus dados aos poucos. Arquivos pequenos ou alguns setores de arquivos grandes viram, aleatoriamente, todos valores nulos
  • Eu precisava disso 2 meses atrás. Tive que formatar a partir de NTFS um disco rígido com mais de 10 TB de dados
    Projeto bacana

  • Eu ficaria bem surpreso se ele também suportasse arquivos com compressão LZX
    É diferente da compactação de arquivos da época do Windows 2000, e é um recurso que precisa ser ativado com compact.exe /C /EXE:LZX (filename)

  • Usei isso no passado e o resultado foi um disco somente leitura. Espero que tenha melhorado desde então

  • O grau de imprudência que se vê aqui estoura qualquer escala

    • Não é tão arriscado quanto parece
      O método padrão é reservar, no sistema de arquivos antigo, um arquivo grande para os metadados do novo sistema de arquivos e então percorrer todos os arquivos do sistema antigo, usando fiemap() para criar novos extents que apontem para os dados existentes. As escritas são feitas apenas no espaço reservado
      O superbloco só é sobrescrito no final, e antes disso é possível verificar se o conteúdo do sistema de arquivos antigo e do novo é o mesmo
    • Alguns anos atrás, era mais próximo de fazer malabarismo com motosserras: https://github.com/maharmstone/ntfs2btrfs/issues/9
      Na época, mexendo nisso, acabei rastreando alguns bugs bem desagradáveis, e espero que agora esteja mais estável
    • A Apple também fez algo parecido, de HFS+ para APFS, em bilhões de instalações reais de OS X/iOS
      Como outros disseram, dá para fazer isso em escala de forma sistemática, mas obviamente exige cuidado
    • Isto não é o btrfs do Linux
      “WinBtrfs é um driver para Windows do Btrfs, o sistema de arquivos Linux de próxima geração. Ele foi reimplementado do zero, não contém código do kernel Linux e deve funcionar em qualquer versão a partir do Windows XP. Também está incluído como parte do ReactOS, um sistema operacional livre.”
      Esse texto vem da página do mantenedor do ntfs2btrfs
      https://github.com/maharmstone/btrfs
    • Depois de ver o Windows quebrar duas vezes em upgrades in-place, eu simplesmente compraria um disco ou computador novo e começaria do zero
      Sei que este é outro caso, mas o tempo investido nesses dados vale muito mais do que um disco novo. Pessoalmente, não acho que valha o risco. Se os dados não forem importantes, ou se houver bons backups e você quiser ajudar a caçar bugs, aí talvez valha tentar
  • É muito legal, mas acho que a maioria das pessoas só vai descobrir isso pelo menos uma semana depois de terminar a formatação de um drive NTFS que vinha adiando havia 2 anos