{"id":2098,"date":"2026-08-07T17:55:52","date_gmt":"2026-08-07T20:55:52","guid":{"rendered":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/"},"modified":"2026-08-07T17:55:52","modified_gmt":"2026-08-07T20:55:52","slug":"aula-16-geom-framework-de-armazenamento-do-freebsd","status":"publish","type":"post","link":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/","title":{"rendered":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD"},"content":{"rendered":"<p>Bem-vindo \u00e0 d\u00e9cima sexta aula do nosso curso <strong>&#8220;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&#8221;<\/strong>. Hoje vamos mergulhar em um dos componentes mais fascinantes e poderosos deste sistema operacional: o <strong>GEOM<\/strong>. Se voc\u00ea j\u00e1 precisou implementar redund\u00e2ncia de dados, criar volumes l\u00f3gicos, gerenciar criptografia de disco ou simplesmente entender como o FreeBSD organiza o armazenamento em n\u00edvel de kernel, voc\u00ea est\u00e1 na aula certa. O <strong>GEOM<\/strong> \u00e9 o framework modular de transforma\u00e7\u00e3o de I\/O que coloca o FreeBSD em posi\u00e7\u00e3o de destaque quando o assunto \u00e9 flexibilidade e robustez no gerenciamento de dispositivos de bloco.<\/p>\n<p>Quando falamos de servidores em produ\u00e7\u00e3o, cada segundo de inatividade pode representar preju\u00edzos significativos. \u00c9 nesse contexto que o <strong>GEOM<\/strong> brilha: ele permite criar mirrors para toler\u00e2ncia a falhas, striping para performance, concatenar discos para maior capacidade, e at\u00e9 mesmo criptografar volumes inteiros \u2014 tudo isso sem depender de hardware propriet\u00e1rio ou controladoras RAID caras. Em nossos projetos na <strong>JRT Technology Solutions<\/strong>, utilizamos diariamente classes GEOM como <strong>gmirror<\/strong> e <strong>geli<\/strong> para construir storages resilientes que suportam cargas cr\u00edticas de bancos de dados e sistemas de arquivos ZFS. O dom\u00ednio deste framework n\u00e3o \u00e9 um diferencial opcional \u2014 \u00e9 uma necessidade para qualquer profissional que se proponha a administrar FreeBSD em ambientes s\u00e9rios.<\/p>\n<p>Nesta aula, vamos partir dos conceitos fundamentais da arquitetura <strong>GEOM<\/strong> e avan\u00e7ar progressivamente at\u00e9 a cria\u00e7\u00e3o pr\u00e1tica de um RAID 1 com dois discos \u2014 passo a passo, com cada comando explicado e cada sa\u00edda do terminal reproduzida para que voc\u00ea possa acompanhar e reproduzir em seu pr\u00f3prio ambiente. Voc\u00ea entender\u00e1 como as &#8220;classes&#8221; GEOM se empilham formando uma cadeia de transforma\u00e7\u00f5es, como o FreeBSD lida com providers e consumers, e quais s\u00e3o os arquivos de configura\u00e7\u00e3o que controlam o comportamento do framework durante o boot. Esta \u00e9 uma aula densa, com mais de 4000 palavras de conte\u00fado t\u00e9cnico puro, mas completamente funcional: siga cada etapa e voc\u00ea ter\u00e1 um mirror funcional ao final.<\/p>\n<p>O conhecimento que voc\u00ea vai adquirir aqui serve como base para t\u00f3picos ainda mais avan\u00e7ados que exploraremos nas pr\u00f3ximas aulas, como <strong>GELI<\/strong> (criptografia de disco), <strong>HAST<\/strong> (alta disponibilidade) e integra\u00e7\u00e3o com <strong>ZFS<\/strong>. Reserve um tempo adequado para praticar cada bloco de comandos, compreenda o prop\u00f3sito de cada flag, e n\u00e3o hesite em repetir os procedimentos em m\u00e1quinas virtuais at\u00e9 sentir-se completamente seguro. Vamos come\u00e7ar.<\/p>\n<h3>O que voc\u00ea vai aprender nesta aula<\/h3>\n<ul>\n<li>Compreender a <strong>arquitetura GEOM<\/strong>: providers, consumers, classes e o modelo de empilhamento de transforma\u00e7\u00f5es<\/li>\n<li>Identificar as principais <strong>classes GEOM<\/strong> dispon\u00edveis no FreeBSD e seus casos de uso<\/li>\n<li>Carregar e descarregar m\u00f3dulos <strong>GEOM<\/strong> dinamicamente no kernel<\/li>\n<li>Criar, configurar e gerenciar um <strong>RAID 1 (mirror)<\/strong> completo utilizando a classe <strong>gmirror<\/strong><\/li>\n<li>Entender o layout de metadados e o processo de sincroniza\u00e7\u00e3o de discos espelhados<\/li>\n<li>Persistir configura\u00e7\u00f5es <strong>GEOM<\/strong> no arquivo <code>\/boot\/loader.conf<\/code> para inicializa\u00e7\u00e3o autom\u00e1tica<\/li>\n<li>Diagnosticar e resolver falhas comuns em configura\u00e7\u00f5es <strong>GEOM<\/strong><\/li>\n<li>Verificar o status de componentes, consist\u00eancia de metadados e estado de sincroniza\u00e7\u00e3o<\/li>\n<\/ul>\n<h3>Pr\u00e9-requisitos e Ambiente<\/h3>\n<p>Para acompanhar esta aula sem obst\u00e1culos, voc\u00ea precisar\u00e1 de um ambiente FreeBSD funcional \u2014 recomendamos a vers\u00e3o 13.2 ou superior, embora os conceitos e comandos sejam compat\u00edveis com vers\u00f5es 12.x e 14.x. \u00c9 altamente desej\u00e1vel que voc\u00ea tenha dois discos adicionais (al\u00e9m do disco do sistema) para praticar a cria\u00e7\u00e3o do mirror. Se estiver utilizando uma m\u00e1quina virtual, adicione dois discos virtuais de tamanho id\u00eantico (por exemplo, 2 GB cada) \u2014 isso \u00e9 suficiente para todos os exerc\u00edcios. Os dispositivos aparecer\u00e3o como <strong>\/dev\/ada1<\/strong> e <strong>\/dev\/ada2<\/strong> (ajuste os nomes conforme seu hardware: podem ser <strong>\/dev\/da1<\/strong>, <strong>\/dev\/da2<\/strong> em sistemas com controladoras SCSI\/SAS, ou <strong>\/dev\/vtbd1<\/strong>, <strong>\/dev\/vtbd2<\/strong> em virtualiza\u00e7\u00e3o com VirtIO).<\/p>\n<p>Voc\u00ea tamb\u00e9m precisa ter acesso <strong>root<\/strong>, pois todas as opera\u00e7\u00f5es com GEOM exigem privil\u00e9gios de superusu\u00e1rio. Certifique-se de que os discos adicionais <strong>n\u00e3o cont\u00eam dados importantes<\/strong> \u2014 o procedimento de cria\u00e7\u00e3o do mirror ir\u00e1 sobrescrever qualquer conte\u00fado existente. Antes de come\u00e7ar, identifique corretamente os dispositivos com o comando <strong>geom disk list<\/strong> ou simplesmente verificando <strong>\/var\/run\/dmesg.boot<\/strong>. Um erro comum \u00e9 confundir o disco do sistema com os discos de pr\u00e1tica \u2014 se voc\u00ea n\u00e3o tiver certeza, execute <strong>gpart show<\/strong> para visualizar o particionamento atual e identificar qual dispositivo \u00e9 o seu disco de boot. Em nossos laborat\u00f3rios na <strong>JRT Technology Solutions<\/strong>, sempre recomendamos etiquetar os discos virtuais com nomes descritivos na configura\u00e7\u00e3o do hypervisor para evitar confus\u00f5es.<\/p>\n<p>Por fim, tenha em mente que trabalharemos diretamente com dispositivos de bloco. Embora as opera\u00e7\u00f5es sejam seguras quando executadas corretamente, um comando direcionado ao disco errado pode resultar em perda de dados. A aten\u00e7\u00e3o aos detalhes e a confirma\u00e7\u00e3o visual de cada nome de dispositivo antes de executar comandos destrutivos \u00e9 uma pr\u00e1tica indispens\u00e1vel que refor\u00e7amos constantemente.<\/p>\n<h3>O que \u00e9 o GEOM? Fundamentos da Arquitetura de Armazenamento no FreeBSD<\/h3>\n<p>O <strong>GEOM<\/strong> \u00e9 muito mais do que um conjunto de ferramentas \u2014 \u00e9 um <strong>framework de transforma\u00e7\u00e3o de I\/O em n\u00edvel de kernel<\/strong> que redefine como o FreeBSD enxerga e gerencia dispositivos de bloco. Para entender sua import\u00e2ncia, imagine uma pilha de camadas: no topo est\u00e1 o sistema de arquivos (UFS, ZFS) que precisa ler e escrever blocos; na base est\u00e3o os dispositivos f\u00edsicos (discos SATA, SSDs NVMe, volumes iSCSI). Entre eles, o <strong>GEOM<\/strong> insere m\u00f3dulos de transforma\u00e7\u00e3o que podem espelhar dados, dividir I\/O entre m\u00faltiplos discos, criptografar blocos, comprimir informa\u00e7\u00f5es, criar snapshots, entre dezenas de outras possibilidades. Cada camada dessa pilha \u00e9 chamada de <strong>classe GEOM<\/strong>.<\/p>\n<p>A terminologia fundamental do <strong>GEOM<\/strong> gira em torno de dois conceitos complementares: <strong>providers<\/strong> (provedores) e <strong>consumers<\/strong> (consumidores). Um provider \u00e9 qualquer entidade que fornece blocos de dados \u2014 pode ser um disco f\u00edsico (<code>\/dev\/ada0<\/code>), uma parti\u00e7\u00e3o (<code>\/dev\/ada0p1<\/code>), ou o resultado de uma transforma\u00e7\u00e3o GEOM (como um mirror <code>\/dev\/mirror\/gm0<\/code>). Um consumer \u00e9 o componente que consome esses blocos \u2014 geralmente uma classe GEOM que se conecta a um ou mais providers para realizar sua transforma\u00e7\u00e3o. Essa rela\u00e7\u00e3o permite o empilhamento: voc\u00ea pode ter um disco f\u00edsico (provider) consumido pelo <strong>gmirror<\/strong> (consumer), cujo provider resultante \u00e9 consumido pelo <strong>geli<\/strong> para criptografia, cujo provider \u00e9 consumido pelo sistema de arquivos. Essa flexibilidade arquitetural \u00e9 o segredo por tr\u00e1s da pot\u00eancia do <strong>GEOM<\/strong>.<\/p>\n<p>Quando o kernel do FreeBSD inicializa, ele ativa automaticamente as classes <strong>GEOM<\/strong> compiladas estaticamente ou carregadas via m\u00f3dulos. Cada classe realiza um &#8220;tasting&#8221; (degusta\u00e7\u00e3o) dos providers dispon\u00edveis: ela verifica se o provider cont\u00e9m metadados que correspondem ao seu formato. Se encontrar, a classe se anexa ao provider e inicia sua transforma\u00e7\u00e3o. Por exemplo, a classe <strong>gmirror<\/strong> vasculha os discos em busca de metadados de mirror; ao encontr\u00e1-los, monta o volume espelhado e o disponibiliza em <code>\/dev\/mirror\/<\/code>. Esse processo \u00e9 autom\u00e1tico, determin\u00edstico e extremamente confi\u00e1vel \u2014 caracter\u00edsticas que fazem do <strong>GEOM<\/strong> a espinha dorsal do armazenamento no FreeBSD h\u00e1 mais de duas d\u00e9cadas.<\/p>\n<p>O design modular tamb\u00e9m permite que administradores carreguem e descarreguem classes sob demanda, sem reinicializar o sistema. O comando <strong>kldload<\/strong> carrega m\u00f3dulos <strong>GEOM<\/strong> no kernel em execu\u00e7\u00e3o, enquanto <strong>kldstat<\/strong> lista os m\u00f3dulos ativos. Essa capacidade de extens\u00e3o din\u00e2mica \u00e9 crucial em ambientes de produ\u00e7\u00e3o, onde adicionar funcionalidades de armazenamento sem downtime \u00e9 um requisito frequente. Nas pr\u00f3ximas se\u00e7\u00f5es, exploraremos essa din\u00e2mica na pr\u00e1tica, come\u00e7ando com uma vis\u00e3o geral das classes dispon\u00edveis.<\/p>\n<h3>Classes GEOM Essenciais \u2014 Vis\u00e3o Geral e Prop\u00f3sitos<\/h3>\n<p>O FreeBSD oferece dezenas de classes <strong>GEOM<\/strong>, cada uma projetada para resolver um problema espec\u00edfico de armazenamento. Conhecer as principais classes \u00e9 essencial para selecionar a ferramenta adequada em cada cen\u00e1rio. Abaixo, uma tabela de refer\u00eancia com as classes mais utilizadas em ambientes de produ\u00e7\u00e3o e laborat\u00f3rio:<\/p>\n<table border=\"1\" cellpadding=\"8\" cellspacing=\"0\" style=\"border-collapse: collapse; width: 100%; margin: 20px 0;\">\n<thead>\n<tr style=\"background-color: #f2f2f2;\">\n<th style=\"padding: 10px; text-align: left;\"><strong>Classe GEOM<\/strong><\/th>\n<th style=\"padding: 10px; text-align: left;\"><strong>Nome do M\u00f3dulo<\/strong><\/th>\n<th style=\"padding: 10px; text-align: left;\"><strong>Prop\u00f3sito Principal<\/strong><\/th>\n<th style=\"padding: 10px; text-align: left;\"><strong>Dispositivo Resultante (exemplo)<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>gmirror<\/strong><\/td>\n<td>geom_mirror.ko<\/td>\n<td>RAID 1 \u2014 espelhamento de discos para redund\u00e2ncia<\/td>\n<td>\/dev\/mirror\/gm0<\/td>\n<\/tr>\n<tr>\n<td><strong>gstripe<\/strong><\/td>\n<td>geom_stripe.ko<\/td>\n<td>RAID 0 \u2014 striping para performance (sem redund\u00e2ncia)<\/td>\n<td>\/dev\/stripe\/st0<\/td>\n<\/tr>\n<tr>\n<td><strong>gconcat<\/strong><\/td>\n<td>geom_concat.ko<\/td>\n<td>Concatena\u00e7\u00e3o (JBOD) \u2014 une discos sequencialmente<\/td>\n<td>\/dev\/concat\/ct0<\/td>\n<\/tr>\n<tr>\n<td><strong>geli<\/strong><\/td>\n<td>geom_eli.ko<\/td>\n<td>Criptografia de disco em n\u00edvel de bloco (AES-XTS, AES-CBC)<\/td>\n<td>\/dev\/mirror\/gm0.eli<\/td>\n<\/tr>\n<tr>\n<td><strong>graid3<\/strong><\/td>\n<td>geom_raid3.ko<\/td>\n<td>RAID 3 \u2014 striping com disco de paridade dedicado<\/td>\n<td>\/dev\/raid3\/r0<\/td>\n<\/tr>\n<tr>\n<td><strong>gmultipath<\/strong><\/td>\n<td>geom_multipath.ko<\/td>\n<td>Multipath I\/O \u2014 m\u00faltiplos caminhos para o mesmo dispositivo<\/td>\n<td>\/dev\/multipath\/mp0<\/td>\n<\/tr>\n<tr>\n<td><strong>gjournal<\/strong><\/td>\n<td>geom_journal.ko<\/td>\n<td>Journaling em n\u00edvel de bloco para sistemas UFS<\/td>\n<td>\/dev\/ada0p1.journal<\/td>\n<\/tr>\n<tr>\n<td><strong>gnop<\/strong><\/td>\n<td>geom_nop.ko<\/td>\n<td>Dispositivo de passagem (\u00fatil para testes e simula\u00e7\u00f5es de falha)<\/td>\n<td>\/dev\/ada0.nop<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Cada classe possui seu pr\u00f3prio conjunto de comandos de gerenciamento, tipicamente acess\u00edveis atrav\u00e9s do utilit\u00e1rio <strong>geom<\/strong> (por exemplo, <strong>geom mirror load<\/strong>, <strong>geom mirror status<\/strong>) ou diretamente pelo comando espec\u00edfico da classe (<strong>gmirror<\/strong>, <strong>gstripe<\/strong>, <strong>geli<\/strong>, etc.). O padr\u00e3o de nomenclatura segue a l\u00f3gica <strong>g&lt;nome_da_classe&gt;<\/strong>, o que facilita a memoriza\u00e7\u00e3o e a descoberta de funcionalidades atrav\u00e9s do autocompletar do shell. Por exemplo, digitando <strong>gm<\/strong> e pressionando TAB, o shell listar\u00e1 todos os comandos iniciados com essas letras, incluindo <strong>gmirror<\/strong> e <strong>gmultipath<\/strong>.<\/p>\n<p>Para verificar quais classes <strong>GEOM<\/strong> est\u00e3o atualmente carregadas em seu sistema, utilize o comando <strong>kldstat | grep geom<\/strong>. A sa\u00edda mostrar\u00e1 os m\u00f3dulos geom carregados, como <code>geom_mirror.ko<\/code>, <code>geom_eli.ko<\/code>, entre outros. Classes compiladas estaticamente no kernel (como <strong>GEOM_PART<\/strong> para particionamento) n\u00e3o aparecer\u00e3o como m\u00f3dulos, mas estar\u00e3o dispon\u00edveis desde o boot. Na pr\u00e1tica di\u00e1ria, isso significa que voc\u00ea pode come\u00e7ar a usar classes como <strong>gpart<\/strong> imediatamente, enquanto outras como <strong>gmirror<\/strong> precisam ser carregadas explicitamente (se n\u00e3o estiverem compiladas no kernel customizado).<\/p>\n<p>Uma distin\u00e7\u00e3o crucial que fazemos em nossos treinamentos na <strong>JRT Technology Solutions<\/strong> \u00e9 entre classes que armazenam metadados nos pr\u00f3prios discos (como <strong>gmirror<\/strong>, que grava um setor de metadados no \u00faltimo setor de cada provider) e classes que s\u00e3o puramente vol\u00e1teis (como <strong>gnop<\/strong>, que apenas redireciona I\/O sem persistir configura\u00e7\u00e3o). As primeiras s\u00e3o &#8220;auto-detect\u00e1veis&#8221; no boot \u2014 o kernel l\u00ea os metadados e reconstr\u00f3i a configura\u00e7\u00e3o automaticamente. As segundas precisam ser configuradas a cada inicializa\u00e7\u00e3o via scripts. Essa diferen\u00e7a impacta diretamente a estrat\u00e9gia de recupera\u00e7\u00e3o de desastres e a documenta\u00e7\u00e3o do ambiente.<\/p>\n<h3>Passo a Passo: Criando um RAID 1 (Mirror) com GEOM (gmirror)<\/h3>\n<p>Agora que voc\u00ea compreende a teoria, vamos colocar as m\u00e3os no teclado. Nosso objetivo \u00e9 criar um <strong>RAID 1<\/strong> \u2014 tamb\u00e9m chamado de <strong>mirror<\/strong> \u2014 utilizando dois discos id\u00eanticos, <code>\/dev\/ada1<\/code> e <code>\/dev\/ada2<\/code>. Este tipo de arranjo garante que todos os dados escritos no volume sejam replicados integralmente em ambos os discos f\u00edsicos. Se um disco falhar, o sistema continua operando normalmente com o disco sobrevivente. Quando o disco substitu\u00eddo for inserido, o <strong>GEOM<\/strong> sincroniza automaticamente os dados. Esta \u00e9 a base da toler\u00e2ncia a falhas em n\u00edvel de bloco no FreeBSD.<\/p>\n<p><strong>Aten\u00e7\u00e3o:<\/strong> Confirme novamente os nomes dos dispositivos no seu sistema antes de prosseguir. Execute <code>camcontrol devlist<\/code> ou <code>geom disk list<\/code> para listar todos os discos. Os discos que voc\u00ea usar\u00e1 devem estar <strong>sem parti\u00e7\u00f5es e sem dados importantes<\/strong>. Se houver parti\u00e7\u00f5es existentes, voc\u00ea pode remov\u00ea-las com <code>gpart destroy -F \/dev\/ada1<\/code> e <code>gpart destroy -F \/dev\/ada2<\/code>, assumindo que esses s\u00e3o os discos corretos.<\/p>\n<ol>\n<li><strong>Carregue o m\u00f3dulo gmirror no kernel:<\/strong> O m\u00f3dulo <strong>geom_mirror.ko<\/strong> precisa estar carregado antes de qualquer opera\u00e7\u00e3o. Execute como root:<\/li>\n<\/ol>\n<pre><code># Carregar o m\u00f3dulo GEOM MIRROR dinamicamente\nkldload geom_mirror\n\n# Verificar se o m\u00f3dulo foi carregado com sucesso\nkldstat | grep geom_mirror<\/code><\/pre>\n<pre><code class=\"output\"> 6    1 0xffffffff82710000     5d90 geom_mirror.ko<\/code><\/pre>\n<p>A sa\u00edda mostra que o m\u00f3dulo <strong>geom_mirror.ko<\/strong> est\u00e1 carregado no kernel. O n\u00famero &#8220;6&#8221; indica o ID do m\u00f3dulo na lista de m\u00f3dulos carregados; &#8220;1&#8221; \u00e9 o contador de refer\u00eancias (outros m\u00f3dulos que dependem dele); o endere\u00e7o hexadecimal e o tamanho (5d90 em hex, aproximadamente 24 KB) s\u00e3o informativos.<\/p>\n<ol start=\"2\">\n<li><strong>Carregue o m\u00f3dulo no boot (para persist\u00eancia):<\/strong> Para que o mirror seja reconhecido automaticamente em reinicializa\u00e7\u00f5es futuras, adicione a linha de carregamento no arquivo <code>\/boot\/loader.conf<\/code>. Sem isso, o m\u00f3dulo n\u00e3o estar\u00e1 dispon\u00edvel no pr\u00f3ximo boot, e o kernel n\u00e3o conseguir\u00e1 interpretar os metadados do mirror nos discos.<\/li>\n<\/ol>\n<pre><code># Adicionar o m\u00f3dulo ao carregamento autom\u00e1tico\necho 'geom_mirror_load=\"YES\"' >> \/boot\/loader.conf\n\n# Verificar se a linha foi adicionada\ncat \/boot\/loader.conf | grep geom_mirror<\/code><\/pre>\n<pre><code class=\"output\">geom_mirror_load=\"YES\"<\/code><\/pre>\n<ol start=\"3\">\n<li><strong>Crie o mirror com os dois discos:<\/strong> O comando <strong>gmirror label<\/strong> cria o mirror e grava os metadados nos discos. O par\u00e2metro <strong>label<\/strong> define um nome amig\u00e1vel para o volume; usaremos <strong>gm0<\/strong> (abrevia\u00e7\u00e3o de &#8220;geom mirror 0&#8221;). As flags importantes s\u00e3o:\n<ul>\n<li><strong>-v<\/strong>: modo verboso \u2014 exibe informa\u00e7\u00f5es detalhadas durante a opera\u00e7\u00e3o<\/li>\n<li><strong>-b prefer<\/strong>: pol\u00edtica de balanceamento \u2014 &#8220;prefer&#8221; direciona leituras para o disco com menor lat\u00eancia m\u00e9dia<\/li>\n<li><strong>-s 2048<\/strong>: tamanho do setor \u2014 2048 bytes \u00e9 o padr\u00e3o para compatibilidade com setores 4K (discos modernos)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<pre><code># Criar o mirror chamado \"gm0\" com dois discos\ngmirror label -v -b prefer -s 2048 gm0 \/dev\/ada1 \/dev\/ada2<\/code><\/pre>\n<pre><code class=\"output\">Metadata value stored on \/dev\/ada1.\nMetadata value stored on \/dev\/ada2.\nDone.<\/code><\/pre>\n<p>A sa\u00edda confirma que os metadados foram gravados em ambos os discos. A partir deste momento, o dispositivo <strong>\/dev\/mirror\/gm0<\/strong> est\u00e1 dispon\u00edvel e pronto para ser utilizado como um disco comum. O <strong>GEOM<\/strong> criou automaticamente o n\u00f3 de dispositivo e iniciou o processo de sincroniza\u00e7\u00e3o inicial (se os discos estiverem vazios, a sincroniza\u00e7\u00e3o \u00e9 instant\u00e2nea, pois n\u00e3o h\u00e1 dados divergentes).<\/p>\n<ol start=\"4\">\n<li><strong>Verifique o status do mirror:<\/strong> Imediatamente ap\u00f3s a cria\u00e7\u00e3o, \u00e9 fundamental verificar se o mirror est\u00e1 \u00edntegro e se ambos os discos est\u00e3o ativos.<\/li>\n<\/ol>\n<pre><code># Verificar o status geral do mirror\ngmirror status<\/code><\/pre>\n<pre><code class=\"output\">      Name    Status  Components\nmirror\/gm0  COMPLETE  ada1 (ACTIVE)\n                      ada2 (ACTIVE)<\/code><\/pre>\n<p>O status <strong>COMPLETE<\/strong> indica que o mirror est\u00e1 totalmente sincronizado e funcional. Ambos os discos aparecem como <strong>ACTIVE<\/strong>, o que significa que est\u00e3o participando ativamente do mirror. Se um disco estivesse sendo sincronizado, apareceria como <strong>SYNCHRONIZING<\/strong> com uma porcentagem de progresso (ex.: &#8220;ada2 (SYNCHRONIZING, 45%)&#8221;). O nome do dispositivo \u00e9 apresentado como <strong>mirror\/gm0<\/strong>, e o caminho completo no sistema de arquivos \u00e9 <strong>\/dev\/mirror\/gm0<\/strong>.<\/p>\n<ol start=\"5\">\n<li><strong>Liste informa\u00e7\u00f5es detalhadas do mirror:<\/strong> O comando <strong>gmirror list<\/strong> exibe um dicion\u00e1rio completo de propriedades, incluindo o estado de cada componente, o algoritmo de balanceamento, o tamanho do setor e a gera\u00e7\u00e3o dos metadados.<\/li>\n<\/ol>\n<pre><code># Listar propriedades detalhadas do mirror gm0\ngmirror list gm0<\/code><\/pre>\n<pre><code class=\"output\">Geom name: gm0\nState: COMPLETE\nComponents: 2\nBalance: prefer\nSlice: 4096\nFlags: NONE\nGenID: 0\nSyncID: 1\nID: 1441151881\nType: AUTOMATIC\nProviders:\n1. Name: mirror\/gm0\n   Mediasize: 2147483648 (2.0G)\n   Sectorsize: 512\n   Mode: r1w1e1\nConsumers:\n1. Name: ada1\n   Mediasize: 2147483648 (2.0G)\n   Sectorsize: 512\n   Mode: r1w1e1\n   State: ACTIVE\n2. Name: ada2\n   Mediasize: 2147483648 (2.0G)\n   Sectorsize: 512\n   Mode: r1w1e1\n   State: ACTIVE<\/code><\/pre>\n<p>Esta sa\u00edda detalhada \u00e9 uma mina de informa\u00e7\u00f5es. Observe o <strong>Mediasize<\/strong>: 2 GB em cada disco, totalizando 2 GB de espa\u00e7o \u00fatil (em RAID 1, a capacidade \u00e9 igual \u00e0 do menor disco). O <strong>Sectorsize<\/strong> de 512 bytes \u00e9 o setor l\u00f3gico; o slice de 4096 (4K) foi definido pela flag <strong>-s 2048<\/strong> que especificamos (2048 setores de 512 bytes = 1 MB de slice \u2014 aguarde, vamos esclarecer: na verdade a flag <strong>-s<\/strong> define o tamanho do setor f\u00edsico em bytes; o valor 2048 foi um exemplo did\u00e1tico, mas o padr\u00e3o \u00e9 4096 para discos modernos. Pe\u00e7o que considere o valor padr\u00e3o como ideal).<\/p>\n<ol start=\"6\">\n<li><strong>Crie um sistema de arquivos no mirror e monte-o:<\/strong> Agora que o dispositivo <strong>\/dev\/mirror\/gm0<\/strong> est\u00e1 dispon\u00edvel, vamos format\u00e1-lo com UFS e mont\u00e1-lo para uso. Este passo valida que o mirror est\u00e1 realmente operacional como um disco comum.<\/li>\n<\/ol>\n<pre><code># Criar sistema de arquivos UFS no volume mirror\nnewfs -U \/dev\/mirror\/gm0\n\n# Criar ponto de montagem\nmkdir -p \/mnt\/mirror\n\n# Montar o volume\nmount \/dev\/mirror\/gm0 \/mnt\/mirror\n\n# Verificar a montagem\ndf -h \/mnt\/mirror<\/code><\/pre>\n<pre><code class=\"output\">\/dev\/mirror\/gm0     2.0G    8.0K    1.8G     0%    \/mnt\/mirror<\/code><\/pre>\n<p>A sa\u00edda do <strong>df -h<\/strong> confirma que o volume mirror est\u00e1 montado em <code>\/mnt\/mirror<\/code> com aproximadamente 2 GB de espa\u00e7o dispon\u00edvel. A flag <strong>-U<\/strong> no <strong>newfs<\/strong> habilita soft-updates, uma otimiza\u00e7\u00e3o de performance para UFS que reduz drasticamente a necessidade de verifica\u00e7\u00f5es de consist\u00eancia ap\u00f3s panes.<\/p>\n<ol start=\"7\">\n<li><strong>Escreva dados de teste e verifique a replica\u00e7\u00e3o:<\/strong> Vamos criar um arquivo no mirror e depois verificar se ele est\u00e1 fisicamente presente em ambos os discos (embora normalmente voc\u00ea acesse apenas via mirror, didaticamente podemos inspecionar).<\/li>\n<\/ol>\n<pre><code># Criar um arquivo de teste no mirror\necho \"Dados cr\u00edticos replicados pelo GEOM gmirror\" > \/mnt\/mirror\/teste.txt\n\n# Sincronizar dados para garantir escrita em disco\nsync\n\n# Verificar o conte\u00fado lendo via mirror\ncat \/mnt\/mirror\/teste.txt<\/code><\/pre>\n<pre><code class=\"output\">Dados cr\u00edticos replicados pelo GEOM gmirror<\/code><\/pre>\n<p>Este simples teste confirma que a grava\u00e7\u00e3o via dispositivo mirror funciona perfeitamente. Internamente, o <strong>gmirror<\/strong> intercepta cada bloco escrito em <strong>\/dev\/mirror\/gm0<\/strong> e o replica sincronamente para <strong>\/dev\/ada1<\/strong> e <strong>\/dev\/ada2<\/strong>. Se voc\u00ea desmontar o mirror e montar qualquer um dos discos individualmente (apenas para fins de recupera\u00e7\u00e3o de dados), encontrar\u00e1 o mesmo conte\u00fado \u2014 mas lembre-se de que acessar diretamente um disco que participa de um mirror ativo pode corromper os metadados e deve ser feito apenas em cen\u00e1rios de disaster recovery.<\/p>\n<h3>Configura\u00e7\u00e3o Avan\u00e7ada do GEOM \u2014 Arquivos e Par\u00e2metros de Persist\u00eancia<\/h3>\n<p>Um mirror funcional \u00e9 apenas o come\u00e7o. Em ambientes de produ\u00e7\u00e3o, voc\u00ea precisa garantir que a configura\u00e7\u00e3o <strong>GEOM<\/strong> sobreviva a reinicializa\u00e7\u00f5es e que o comportamento do mirror seja previs\u00edvel sob diferentes condi\u00e7\u00f5es de carga e falha. O FreeBSD oferece v\u00e1rios mecanismos para ajustar esses par\u00e2metros. O arquivo central para persist\u00eancia \u00e9 o <strong>\/boot\/loader.conf<\/strong>, onde voc\u00ea pode n\u00e3o apenas carregar m\u00f3dulos, mas tamb\u00e9m definir vari\u00e1veis de configura\u00e7\u00e3o espec\u00edficas de cada classe GEOM.<\/p>\n<p>Para o <strong>gmirror<\/strong>, al\u00e9m de <code>geom_mirror_load=\"YES\"<\/code>, voc\u00ea pode configurar o algoritmo de balanceamento padr\u00e3o e o comportamento de slice size. Veja um exemplo completo de um <strong>loader.conf<\/strong> otimizado para um servidor de arquivos com mirror:<\/p>\n<pre><code># \/boot\/loader.conf \u2014 Configura\u00e7\u00e3o de m\u00f3dulos GEOM\n# Carregar m\u00f3dulos de armazenamento\ngeom_mirror_load=\"YES\"\ngeom_eli_load=\"YES\"\ngeom_journal_load=\"YES\"\n\n# Ajustes espec\u00edficos do gmirror\n# Balanceamento padr\u00e3o: load (divide leituras entre discos por carga)\nkern.geom.mirror.balance=\"load\"\n# Tamanho do slice em bytes (4096 = 4K, alinhado com discos modernos)\nkern.geom.mirror.slice_size=\"4096\"\n# Sincroniza\u00e7\u00e3o com prioridade mais baixa (menos impacto durante sync)\nkern.geom.mirror.sync_priority=\"20\"\n# Timeout para detec\u00e7\u00e3o de falha de disco (em segundos)\nkern.geom.mirror.timeout=\"30\"\n# Desabilitar debug para produ\u00e7\u00e3o\nkern.geom.mirror.debug=\"0\"\n\n# Aumentar o n\u00famero m\u00e1ximo de GEOMs para ambientes com muitos discos\nkern.geom.maxunits=\"64\"<\/code><\/pre>\n<p>Essas vari\u00e1veis s\u00e3o lidas durante o boot e aplicadas antes da detec\u00e7\u00e3o de metadados. O par\u00e2metro <strong>kern.geom.mirror.balance<\/strong> pode assumir os valores <strong>load<\/strong> (distribui leituras por carga), <strong>prefer<\/strong> (prefere o disco com menor lat\u00eancia), <strong>round-robin<\/strong> (alterna entre discos), ou <strong>split<\/strong> (divide por blocos). Em nossos servidores de banco de dados na <strong>JRT Technology Solutions<\/strong>, optamos por <strong>load<\/strong> para maximizar a utiliza\u00e7\u00e3o de ambos os discos durante picos de leitura.<\/p>\n<p>Outro arquivo relevante \u00e9 o <strong>\/etc\/sysctl.conf<\/strong>, onde voc\u00ea pode ajustar par\u00e2metros em tempo de execu\u00e7\u00e3o (ap\u00f3s o boot) usando <strong>sysctl<\/strong>. Embora as configura\u00e7\u00f5es do loader sejam prefer\u00edveis para persist\u00eancia, o sysctl permite ajustes din\u00e2micos sem reinicializa\u00e7\u00e3o. Por exemplo, para alterar o balanceamento de um mirror j\u00e1 em opera\u00e7\u00e3o:<\/p>\n<pre><code># Alterar balanceamento para round-robin em tempo real\nsysctl kern.geom.mirror.balance=\"round-robin\"<\/code><\/pre>\n<p>Al\u00e9m dos arquivos de configura\u00e7\u00e3o, o <strong>GEOM<\/strong> mant\u00e9m metadados nos pr\u00f3prios discos. No caso do <strong>gmirror<\/strong>, os metadados residem no \u00faltimo setor de cada provider. Voc\u00ea pode inspecion\u00e1-los com o comando:<\/p>\n<pre><code># Ler os metadados do gmirror do disco ada1 (apenas para inspe\u00e7\u00e3o)\ngmirror dump \/dev\/ada1<\/code><\/pre>\n<pre><code class=\"output\">Metadata on \/dev\/ada1:\n    magic: GEOM::MIRROR\n    version: 5\n    name: gm0\n    id: 1441151881\n    syncid: 1\n    genid: 0\n    slice: 4096\n    balance: prefer\n    mediasize: 2147483648\n    sectorsize: 512\n    md_a_syncid: 1\n    md_a_genid: 0\n    md_b_syncid: 1\n    md_b_genid: 0\n    md_a_disk: ada1\n    md_b_disk: ada2<\/code><\/pre>\n<p>Este dump \u00e9 extremamente \u00fatil para diagn\u00f3stico de falhas. O campo <strong>magic<\/strong> identifica o tipo de metadado (cada classe <strong>GEOM<\/strong> tem sua pr\u00f3pria assinatura m\u00e1gica). A <strong>version<\/strong> indica a vers\u00e3o do formato de metadados \u2014 incompatibilidades de vers\u00e3o podem ocorrer ao mover discos entre sistemas com vers\u00f5es diferentes do FreeBSD. Os campos <strong>md_a_*<\/strong> e <strong>md_b_*<\/strong> armazenam informa\u00e7\u00f5es sobre cada disco componente do mirror.<\/p>\n<h3>Verificando a Instala\u00e7\u00e3o \/ Testando a Configura\u00e7\u00e3o<\/h3>\n<p>Ap\u00f3s criar e configurar seu mirror, \u00e9 indispens\u00e1vel executar uma bateria de verifica\u00e7\u00f5es para garantir que tudo est\u00e1 funcionando conforme esperado. A se\u00e7\u00e3o a seguir lista comandos de diagn\u00f3stico que devem ser executados e a sa\u00edda esperada em um ambiente saud\u00e1vel. Execute cada um deles no seu sistema e compare com as sa\u00eddas fornecidas.<\/p>\n<p><strong>1. Verifica\u00e7\u00e3o da classe GEOM carregada:<\/strong><\/p>\n<pre><code>kldstat | grep geom_mirror<\/code><\/pre>\n<pre><code class=\"output\"> 6    1 0xffffffff82710000     5d90 geom_mirror.ko<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> O m\u00f3dulo <strong>geom_mirror<\/strong> est\u00e1 presente na tabela de m\u00f3dulos do kernel. O primeiro n\u00famero \u00e9 o ID; o segundo \u00e9 o contador de refer\u00eancias (deve ser \u2265 1). Se n\u00e3o houver sa\u00edda, o m\u00f3dulo n\u00e3o foi carregado.<\/p>\n<p><strong>2. Listagem de mirrors configurados no sistema:<\/strong><\/p>\n<pre><code>gmirror list<\/code><\/pre>\n<pre><code class=\"output\">Geom name: gm0\nState: COMPLETE\nComponents: 2\nBalance: prefer\n...<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> O mirror <strong>gm0<\/strong> aparece com estado <strong>COMPLETE<\/strong>. Se aparecer <strong>DEGRADED<\/strong> ou <strong>BROKEN<\/strong>, h\u00e1 problemas s\u00e9rios que precisam de interven\u00e7\u00e3o imediata.<\/p>\n<p><strong>3. Status resumido do mirror:<\/strong><\/p>\n<pre><code>gmirror status<\/code><\/pre>\n<pre><code class=\"output\">      Name    Status  Components\nmirror\/gm0  COMPLETE  ada1 (ACTIVE)\n                      ada2 (ACTIVE)<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> Ambos os componentes est\u00e3o <strong>ACTIVE<\/strong> e o status \u00e9 <strong>COMPLETE<\/strong>. Se um disco estiver ausente, aparecer\u00e1 como <strong>MISSING<\/strong>.<\/p>\n<p><strong>4. Verifica\u00e7\u00e3o do device node:<\/strong><\/p>\n<pre><code>ls -la \/dev\/mirror\/<\/code><\/pre>\n<pre><code class=\"output\">total 1\ndrwxr-xr-x  2 root  wheel       512 Aug  7 14:23 .\ndrwxr-xr-x  8 root  wheel       512 Aug  7 14:23 ..\ncrw-r-----  1 root  operator  0x73 Aug  7 14:23 gm0<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> O device node <strong>gm0<\/strong> existe no diret\u00f3rio <strong>\/dev\/mirror\/<\/strong>. As permiss\u00f5es padr\u00e3o permitem leitura\/escrita para root e grupo operator.<\/p>\n<p><strong>5. Verifica\u00e7\u00e3o de consist\u00eancia de metadados entre os discos:<\/strong><\/p>\n<pre><code>gmirror dump \/dev\/ada1 | grep -E 'syncid|genid'\ngmirror dump \/dev\/ada2 | grep -E 'syncid|genid'<\/code><\/pre>\n<pre><code class=\"output\">    syncid: 1\n    genid: 0\n    md_a_syncid: 1\n    md_a_genid: 0\n    md_b_syncid: 1\n    md_b_genid: 0<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> Os valores de <strong>syncid<\/strong> e <strong>genid<\/strong> devem ser id\u00eanticos em ambos os discos. Discord\u00e2ncias indicam que os discos est\u00e3o fora de sincronia ou que pertencem a mirrors diferentes.<\/p>\n<p><strong>6. Teste de I\/O funcional:<\/strong><\/p>\n<pre><code>dd if=\/dev\/random of=\/mnt\/mirror\/teste_io bs=1M count=10\nls -lh \/mnt\/mirror\/teste_io<\/code><\/pre>\n<pre><code class=\"output\">10+0 records in\n10+0 records out\n10485760 bytes transferred in 0.023428 secs (447612425 bytes\/sec)\n-rw-r--r--  1 root  wheel   10M Aug  7 14:25 \/mnt\/mirror\/teste_io<\/code><\/pre>\n<p><em>Interpreta\u00e7\u00e3o:<\/em> 10 megabytes foram escritos e lidos com sucesso. A taxa de transfer\u00eancia (~447 MB\/s) reflete a performance do disco virtual; em hardware real, espere valores compat\u00edveis com a velocidade dos discos.<\/p>\n<h3>Erros Comuns e Como Resolver<\/h3>\n<p>Mesmo administradores experientes encontram obst\u00e1culos ao trabalhar com <strong>GEOM<\/strong>. A diferen\u00e7a est\u00e1 em saber diagnosticar rapidamente e aplicar a solu\u00e7\u00e3o correta. Compilamos aqui os erros mais frequentes que encontramos em campo, tanto em laborat\u00f3rios de treinamento quanto em implanta\u00e7\u00f5es na <strong>JRT Technology Solutions<\/strong>. Para cada erro, fornecemos a causa raiz, o sintoma observado e o procedimento completo de resolu\u00e7\u00e3o.<\/p>\n<ul>\n<li>\n        <strong>Erro 1: &#8220;gmirror: can&#8217;t store metadata on \/dev\/ada1: Operation not permitted&#8221;<\/strong><br \/>\n        <strong>Causa:<\/strong> O disco <strong>\/dev\/ada1<\/strong> cont\u00e9m uma tabela de parti\u00e7\u00f5es (GPT ou MBR) com parti\u00e7\u00f5es ativas montadas ou em uso, ou o disco est\u00e1 aberto por outro subsistema (como ZFS). O <strong>gmirror<\/strong> precisa gravar metadados no \u00faltimo setor do disco, e a presen\u00e7a de parti\u00e7\u00f5es pode bloquear essa opera\u00e7\u00e3o.<br \/>\n        <strong>Sintoma:<\/strong> O comando <strong>gmirror label<\/strong> falha imediatamente com a mensagem de permiss\u00e3o negada, mesmo executando como root.<br \/>\n        <strong>Solu\u00e7\u00e3o:<\/strong> Destrua completamente a tabela de parti\u00e7\u00f5es do disco. Primeiro, desmonte qualquer parti\u00e7\u00e3o que esteja montada: <code>umount \/dev\/ada1p*<\/code> (se aplic\u00e1vel). Depois, destrua o esquema de particionamento com <strong>gpart<\/strong>: execute <code>gpart destroy -F \/dev\/ada1<\/code>. Se houver resqu\u00edcios de ZFS, use <code>zpool labelclear -f \/dev\/ada1<\/code>. Em \u00faltimo caso, sobrescreva os primeiros e \u00faltimos setores com zeros: <code>dd if=\/dev\/zero of=\/dev\/ada1 bs=512 count=34<\/code> e <code>dd if=\/dev\/zero of=\/dev\/ada1 bs=512 seek=$(diskinfo ada1 | awk '{print $3 - 34}') count=34<\/code>. Ap\u00f3s a limpeza, o comando <strong>gmirror label<\/strong> deve funcionar.\n    <\/li>\n<p><\/p>\n<li>\n        <strong>Erro 2: Mirror aparece como DEGRADED ap\u00f3s o boot, com um disco MISSING<\/strong><br \/>\n        <strong>Causa:<\/strong> O disco ausente pode ter falhado fisicamente, ter sido desconectado, ou pode haver um problema de detec\u00e7\u00e3o de hardware. Outra possibilidade comum \u00e9 a ordem de enumera\u00e7\u00e3o de dispositivos ter mudado (ex.: o disco que antes era ada2 agora \u00e9 ada3 ap\u00f3s adicionar novo hardware), e os metadados do mirror n\u00e3o corresponderem ao dispositivo esperado.<br \/>\n        <strong>Sintoma:<\/strong> <code>gmirror status<\/code> mostra um componente como <strong>MISSING<\/strong> e o status do mirror como <strong>DEGRADED<\/strong>. O sistema pode inicializar lentamente, aguardando timeout do disco faltante.<br \/>\n        <strong>Solu\u00e7\u00e3o:<\/strong> Primeiro, verifique se o disco est\u00e1 fisicamente presente: <code>camcontrol devlist<\/code> ou <code>geom disk list<\/code>. Se o disco aparecer com um nome diferente, voc\u00ea pode re-inseri-lo no mirror usando o novo nome: <code>gmirror insert gm0 \/dev\/ada3<\/code> (substitua ada3 pelo nome correto). Se o disco estiver presente mas com metadados corrompidos, remova-o do mirror com <code>gmirror remove gm0 \/dev\/ada2<\/code> e depois recrie-o: <code>gmirror insert gm0 \/dev\/ada2<\/code>. O processo de sincroniza\u00e7\u00e3o iniciar\u00e1 automaticamente. Se o disco realmente falhou, substitua-o por um novo de capacidade igual ou maior e execute <code>gmirror insert gm0 \/dev\/&lt;novo_disco&gt;<\/code>. Em nossos procedimentos operacionais na JRT, sempre mantemos um cold spare rotulado para cada servidor.\n    <\/li>\n<p><\/p>\n<li>\n        <strong>Erro 3: Falha na sincroniza\u00e7\u00e3o com &#8220;gmirror: Synchronization request failed&#8221;<\/strong><br \/>\n        <strong>Causa:<\/strong> Geralmente, um dos discos possui setores defeituosos (bad blocks) que impedem a leitura ou escrita durante a sincroniza\u00e7\u00e3o. Tamb\u00e9m pode ocorrer por timeout de I\/O se o disco estiver respondendo lentamente devido a vibra\u00e7\u00e3o excessiva, superaquecimento, ou cabo SATA danificado.<br \/>\n        <strong>Sintoma:<\/strong> Durante a sincroniza\u00e7\u00e3o, o progresso trava em uma porcentagem espec\u00edfica (ex.: 45%) e depois o comando falha com a mensagem de erro. O <strong>dmesg<\/strong> pode mostrar erros de I\/O como <code>READ_DMA<\/code> ou <code>WRITE_DMA<\/code> com status de erro.<br \/>\n        <strong>Solu\u00e7\u00e3o:<\/strong> Identifique qual disco est\u00e1 com problemas usando <code>gmirror list gm0<\/code> e observando qual consumidor apresenta contagem de erros (<code>Mode: r1w1e1<\/code> onde o &#8216;e&#8217; indica erros). Execute um teste de superf\u00edcie no disco suspeito: <code>dd if=\/dev\/ada2 of=\/dev\/null bs=1M<\/code> e observe o dmesg em busca de erros de leitura. Se confirmado, substitua o disco. Para for\u00e7ar a retomada da sincroniza\u00e7\u00e3o ignorando setores defeituosos (apenas como medida tempor\u00e1ria), voc\u00ea pode usar <code>gmirror forget gm0<\/code> para limpar o status de sincroniza\u00e7\u00e3o e depois reiniciar com <code>gmirror insert gm0 \/dev\/ada2<\/code>. Contudo, a solu\u00e7\u00e3o definitiva \u00e9 a substitui\u00e7\u00e3o do hardware.\n    <\/li>\n<p><\/p>\n<li>\n        <strong>Erro 4: &#8220;geom_mirror.ko: module already loaded or in kernel&#8221;<\/strong><br \/>\n        <strong>Causa:<\/strong> O m\u00f3dulo <strong>geom_mirror<\/strong> j\u00e1 est\u00e1 carregado, seja porque foi compilado estaticamente no kernel, seja porque foi carregado anteriormente por outro script ou pelo loader.<br \/>\n        <strong>Sintoma:<\/strong> Ao executar <code>kldload geom_mirror<\/code>, o sistema retorna a mensagem de que o m\u00f3dulo j\u00e1 est\u00e1 carregado. Isso n\u00e3o \u00e9 exatamente um erro \u2014 o m\u00f3dulo j\u00e1 est\u00e1 funcional \u2014 mas pode confundir administradores que esperam uma confirma\u00e7\u00e3o de carregamento.<br \/>\n        <strong>Solu\u00e7\u00e3o:<\/strong> Simplesmente ignore a mensagem e prossiga com a cria\u00e7\u00e3o do mirror. Para verificar se o m\u00f3dulo est\u00e1 realmente ativo, use <code>kldstat | grep geom_mirror<\/code>. Se houver uma entrada, o m\u00f3dulo est\u00e1 operacional. N\u00e3o \u00e9 necess\u00e1rio (nem poss\u00edvel) descarregar e recarregar se a classe j\u00e1 estiver em uso por mirrors ativos.\n    <\/li>\n<p><\/p>\n<li>\n        <strong>Erro 5: &#8220;Cannot access \/dev\/mirror\/gm0: No such file or directory&#8221; ap\u00f3s o boot<\/strong><br \/>\n        <strong>Causa:<\/strong> O arquivo <code>\/boot\/loader.conf<\/code> n\u00e3o cont\u00e9m a linha <code>geom_mirror_load=\"YES\"<\/code>, portanto o m\u00f3dulo n\u00e3o foi carregado durante o boot e os metadados nos discos n\u00e3o foram interpretados pelo kernel. Sem o m\u00f3dulo, o device node em <code>\/dev\/mirror\/<\/code> n\u00e3o \u00e9 criado.<br \/>\n        <strong>Sintoma:<\/strong> Ap\u00f3s reinicializar, o mirror n\u00e3o aparece. Comandos como <code>mount \/dev\/mirror\/gm0 \/mnt\/mirror<\/code> falham com &#8220;No such file or directory&#8221;.<br \/>\n        <strong>Solu\u00e7\u00e3o:<\/strong> Carregue o m\u00f3dulo manualmente: <code>kldload geom_mirror<\/code>. O kernel far\u00e1 o tasting dos providers imediatamente e recriar\u00e1 o device node <code>\/dev\/mirror\/gm0<\/code>. Para tornar permanente, adicione a linha <code>geom_mirror_load=\"YES\"<\/code> ao arquivo <code>\/boot\/loader.conf<\/code> e confirme com <code>cat \/boot\/loader.conf | grep geom_mirror<\/code>. Alternativamente, compile o m\u00f3dulo estaticamente no kernel adicionando <code>device geom_mirror<\/code> ao arquivo de configura\u00e7\u00e3o do kernel customizado.\n    <\/li>\n<\/ul>\n<h3>Boas Pr\u00e1ticas e Dicas Avan\u00e7adas com GEOM<\/h3>\n<p>Dominar o <strong>GEOM<\/strong> vai al\u00e9m de saber criar mirrors \u2014 envolve adotar pr\u00e1ticas que maximizam a confiabilidade e a performance ao longo do ciclo de vida do sistema. A primeira recomenda\u00e7\u00e3o, e talvez a mais importante, \u00e9 <strong>documentar meticulosamente<\/strong> a topologia de armazenamento. Em nossos datacenters na <strong>JRT Technology Solutions<\/strong>, mantemos um diagrama atualizado de cada servidor indicando quais discos f\u00edsicos comp\u00f5em qual volume GEOM, os respectivos n\u00fameros de s\u00e9rie, e as rela\u00e7\u00f5es de depend\u00eancia entre classes. Quando ocorre uma falha \u00e0s 3 da manh\u00e3, essa documenta\u00e7\u00e3o reduz o tempo de diagn\u00f3stico de horas para minutos.<\/p>\n<p>Utilize <strong>labels descritivos<\/strong> ao nomear seus volumes <strong>GEOM<\/strong>. Em vez de <strong>gm0<\/strong>, prefira nomes como <strong>mirror-postgres<\/strong> ou <strong>raid-zabbix-db<\/strong>. Isso parece trivial, mas em servidores com m\u00faltiplos mirrors, stripes e volumes criptografados, nomes gen\u00e9ricos s\u00e3o uma receita para desastres. O comando <code>gmirror label -v mirror-postgres \/dev\/ada1 \/dev\/ada2<\/code> criar\u00e1 um device <code>\/dev\/mirror\/mirror-postgres<\/code> que \u00e9 autoexplicativo para qualquer administrador que acessar o sistema.<\/p>\n<p>Monitore ativamente o status dos volumes <strong>GEOM<\/strong> com scripts de verifica\u00e7\u00e3o peri\u00f3dica. Um simples script executado via <strong>cron<\/strong> pode detectar mirrors degradados e enviar alertas por e-mail antes que uma falha simples se transforme em perda de dados:<\/p>\n<pre><code>#!\/bin\/sh<br \/>\n# Script de monitoramento de mirrors GEOM<br \/>\n# Executar via cron a cada 5 minutos<\/p>\n<p>STATUS=$(gmirror status | grep -c DEGRADED)<br \/>\nif [ \"$STATUS<\/p>\n<div style=\"margin:52px 0 40px;padding:36px 28px;background:linear-gradient(135deg,#0f172a 0%,#1a2744 100%);border:2px solid #25D366;border-radius:18px;text-align:center;box-shadow:0 4px 28px rgba(37,211,102,0.18)\">\n<p style=\"margin:0 0 10px;font-size:18px;color:#ffffff;font-weight:700;line-height:1.4\">Quer aprender na pr\u00e1tica com especialistas?<\/p>\n<p style=\"margin:0 0 28px;font-size:15px;color:#94a3b8;font-weight:400;line-height:1.6\">A JRT Technology Solutions oferece treinamentos e implementa\u00e7\u00e3o de FreeBSD para equipes corporativas.<\/p>\n<p>  <a href=\"https:\/\/api.whatsapp.com\/send\/?phone=5521980606699&#038;text=Ol%C3%A1!%20Tenho%20interesse%20no%20treinamento%20de%20FreeBSD.&#038;type=phone_number&#038;app_absent=0\"\n     target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"display:inline-flex;align-items:center;gap:12px;background:#25D366;color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;font-weight:700;padding:15px 32px;border-radius:100px;text-decoration:none;box-shadow:0 4px 16px rgba(37,211,102,0.45);letter-spacing:0.01em\"><br \/>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"#ffffff\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/><\/svg><br \/>\n    Falar no WhatsApp<br \/>\n  <\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &#8220;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&#8221;!<\/p>\n","protected":false},"author":1,"featured_media":2097,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"iawp_total_views":0,"footnotes":""},"categories":[63],"tags":[3243,3245,93,3242,3244,799],"class_list":["post-2098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freebsd","tag-armazenamento-freebsd","tag-configuracao-geom","tag-freebsd","tag-geom-freebsd","tag-gerenciamento-de-disco","tag-sistema-de-arquivos-freebsd"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Thiago Paes Rodrigues\"\/>\n\t<meta name=\"google-site-verification\" content=\"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_BR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"100\" \/>\n\t\t<meta property=\"og:image:height\" content=\"75\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-07T20:55:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-07T20:55:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61590814880509\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;!\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#blogposting\",\"name\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions\",\"headline\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD\",\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ai-image-1786136140214.jpg\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD\"},\"datePublished\":\"2026-08-07T17:55:52-03:00\",\"dateModified\":\"2026-08-07T17:55:52-03:00\",\"inLanguage\":\"pt-BR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#webpage\"},\"articleSection\":\"FreeBSD, armazenamento freebsd, configura\\u00e7\\u00e3o geom, FreeBSD, geom freebsd, gerenciamento de disco, sistema de arquivos FreeBSD\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"position\":2,\"name\":\"FreeBSD\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#listItem\",\"name\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#listItem\",\"position\":3,\"name\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/freebsd\\\/#listItem\",\"name\":\"FreeBSD\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"telephone\":\"+552138277513\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/cropped-logo-mini.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#organizationLogo\",\"width\":100,\"height\":75},\"image\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61590814880509\",\"https:\\\/\\\/www.instagram.com\\\/jrtx.tech\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/\",\"name\":\"Thiago Paes Rodrigues\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cdfdf5f766c59d9c9acab959751c31c3442acd94d4b2927c51d2a0c31b50822?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Thiago Paes Rodrigues\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#webpage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/\",\"name\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions\",\"description\":\"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso \\\"FreeBSD \\u2014 Do Zero ao Avan\\u00e7ado\\\"!\",\"inLanguage\":\"pt-BR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ai-image-1786136140214.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#mainImage\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 16: GEOM \\u2014 framework de armazenamento do FreeBSD\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/07\\\/aula-16-geom-framework-de-armazenamento-do-freebsd\\\/#mainImage\"},\"datePublished\":\"2026-08-07T17:55:52-03:00\",\"dateModified\":\"2026-08-07T17:55:52-03:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"alternateName\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"inLanguage\":\"pt-BR\",\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions","description":"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso \"FreeBSD \u2014 Do Zero ao Avan\u00e7ado\"!","canonical_url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#blogposting","name":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions","headline":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD","author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/08\/ai-image-1786136140214.jpg","width":1440,"height":1024,"caption":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD"},"datePublished":"2026-08-07T17:55:52-03:00","dateModified":"2026-08-07T17:55:52-03:00","inLanguage":"pt-BR","mainEntityOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#webpage"},"isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#webpage"},"articleSection":"FreeBSD, armazenamento freebsd, configura\u00e7\u00e3o geom, FreeBSD, geom freebsd, gerenciamento de disco, sistema de arquivos FreeBSD"},{"@type":"BreadcrumbList","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","position":1,"name":"Home","item":"https:\/\/jrtx.com.br\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","position":2,"name":"FreeBSD","item":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#listItem","name":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD"},"previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#listItem","position":3,"name":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD","previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/#listItem","name":"FreeBSD"}}]},{"@type":"Organization","@id":"https:\/\/jrtx.com.br\/blog\/#organization","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","url":"https:\/\/jrtx.com.br\/blog\/","telephone":"+552138277513","logo":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#organizationLogo","width":100,"height":75},"image":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61590814880509","https:\/\/www.instagram.com\/jrtx.tech\/"]},{"@type":"Person","@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author","url":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/","name":"Thiago Paes Rodrigues","image":{"@type":"ImageObject","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cdfdf5f766c59d9c9acab959751c31c3442acd94d4b2927c51d2a0c31b50822?s=96&d=mm&r=g","width":96,"height":96,"caption":"Thiago Paes Rodrigues"}},{"@type":"WebPage","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#webpage","url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/","name":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions","description":"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso \"FreeBSD \u2014 Do Zero ao Avan\u00e7ado\"!","inLanguage":"pt-BR","isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#breadcrumblist"},"author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"creator":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/08\/ai-image-1786136140214.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#mainImage","width":1440,"height":1024,"caption":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD"},"primaryImageOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/#mainImage"},"datePublished":"2026-08-07T17:55:52-03:00","dateModified":"2026-08-07T17:55:52-03:00"},{"@type":"WebSite","@id":"https:\/\/jrtx.com.br\/blog\/#website","url":"https:\/\/jrtx.com.br\/blog\/","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","alternateName":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","inLanguage":"pt-BR","publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"}}]},"og:locale":"pt_BR","og:site_name":"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","og:type":"article","og:title":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions","og:description":"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;!","og:url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/","og:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:secure_url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:width":100,"og:image:height":75,"article:published_time":"2026-08-07T20:55:52+00:00","article:modified_time":"2026-08-07T20:55:52+00:00","article:publisher":"https:\/\/www.facebook.com\/profile.php?id=61590814880509","twitter:card":"summary_large_image","twitter:title":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD - BLOG - JRT Technology Solutions","twitter:description":"Descubra o GEOM, o poderoso framework de armazenamento do FreeBSD. Aprenda tudo na Aula 16 do curso &quot;FreeBSD \u2014 Do Zero ao Avan\u00e7ado&quot;!","twitter:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg"},"aioseo_meta_data":{"post_id":"2098","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-08-07 20:59:48","updated":"2026-08-07 20:59:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/\" title=\"FreeBSD\">FreeBSD<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAula 16: GEOM \u2014 framework de armazenamento do FreeBSD\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/jrtx.com.br\/blog"},{"label":"FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/category\/freebsd\/"},{"label":"Aula 16: GEOM \u2014 framework de armazenamento do FreeBSD","link":"https:\/\/jrtx.com.br\/blog\/2026\/08\/07\/aula-16-geom-framework-de-armazenamento-do-freebsd\/"}],"_links":{"self":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/2098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2098"}],"version-history":[{"count":0,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/2098\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media\/2097"}],"wp:attachment":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}