<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>zfs &amp;mdash; Sei lá e pans</title>
    <link>https://rberlim.writeas.com/tag:zfs</link>
    <description>O título diz tudo.</description>
    <pubDate>Tue, 12 May 2026 23:11:28 +0000</pubDate>
    <item>
      <title>Recuperando um pool ZFS</title>
      <link>https://rberlim.writeas.com/recuperando-um-pool-zfs?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Recentemente perdi meu servidor principal de casa. Os discos do pool zroot estavam ruins, e quando fui trocar um, puf, a máquina parou de dar boot. Retornar os discos anteriores não dava muito resultado, já que a máquina ficava trava em erros de discos. Acho que consegui uma falha em ambos os discos do pool zroot, parabéns para mim.&#xA;&#xA;Esperançoso que o pool onde realmente estão os dados estava intacto, comecei a tarefa de tentar recuperar tudo. &#xA;Felizmente, dada situações pregressas, eu tinha pelo menos alguma idéia de quais os discos realmente estavam envolvidos no pool que queria recuperar. &#xA;&#xA;Desde o meu post anterior sobre zfs, comecei a usar a boa prática de adicionar os discos pelo seu número serial, conforme estão em &#xA;Enfim, após reinstalar o sistema em um disco a parte (resolvi por enquanto abandonar a idéia de ter o root em zfs) começa o trabalho de descobrir quais discos fazem parte do pool e remonta-lo&#xA;Após preparar o novo sistema para o zfs e adicionar alguns discos do pool antigo, um simples &#xA;  pool: dados&#xA;     id: 1176411848024315794&#xA;  state: DEGRADED&#xA;status: The pool was last accessed by another system.&#xA; action: The pool can be imported despite missing or damaged devices.  The&#xA;&#x9;fault tolerance of the pool may be compromised if imported.&#xA;   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY&#xA; config:&#xA;&#xA;&#x9;dados                          DEGRADED&#xA;&#x9;  raidz1-0                     DEGRADED&#xA;&#x9;    ata-ST32000644NS9WM7LQT3  ONLINE&#xA;&#x9;    ata-ST32000644NS9WM7N07E  UNAVAIL&#xA;&#x9;    wwn-0x5000cca224c5ea5c     ONLINE&#xA;Otimo, o pool estava lá. Com um disco a menos, mas estava lá. A partir daí, um &#xA;agora, para substituição do disco ausente, coloquei o pool offline com &#xA;dessa forma, só bastou fazer um &#xA;Agora é configurar snapshots e backups para não precisar contar com a sorte no próximo incidente :)&#xA;&#xA;zfs&#xA;debian&#xA;recovery]]&gt;</description>
      <content:encoded><![CDATA[<p>Recentemente perdi meu servidor principal de casa. Os discos do pool zroot estavam ruins, e quando fui trocar um, <em>puf</em>, a máquina parou de dar boot. Retornar os discos anteriores não dava muito resultado, já que a máquina ficava trava em erros de discos. Acho que consegui uma falha em ambos os discos do pool zroot, parabéns para mim.</p>

<p>Esperançoso que o pool onde realmente estão os dados estava intacto, comecei a tarefa de tentar recuperar tudo.
Felizmente, dada situações pregressas, eu tinha pelo menos alguma idéia de quais os discos realmente estavam envolvidos no pool que queria recuperar.</p>

<p>Desde o meu post anterior sobre zfs, comecei a usar a boa prática de adicionar os discos pelo seu número serial, conforme estão em <code>/dev/disk/by-uuid</code> em vez de usar os clássicos <code>/dev/sdX</code> ou coisa assim, que as vezes mudam a qual disco se referem. Pelo menos comigo, aconteceu mais de uma vez.</p>

<p>Enfim, após reinstalar o sistema em um disco a parte (resolvi por enquanto abandonar a idéia de ter o root em zfs) começa o trabalho de descobrir quais discos fazem parte do pool e remonta-lo
Após preparar o novo sistema para o zfs e adicionar alguns discos do pool antigo, um simples <code>zpool import</code> começou a me encher de esperança</p>

<pre><code>  pool: dados
     id: 1176411848024315794
  state: DEGRADED
status: The pool was last accessed by another system.
 action: The pool can be imported despite missing or damaged devices.  The
	fault tolerance of the pool may be compromised if imported.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
 config:

	dados                          DEGRADED
	  raidz1-0                     DEGRADED
	    ata-ST32000644NS_9WM7LQT3  ONLINE
	    ata-ST32000644NS_9WM7N07E  UNAVAIL
	    wwn-0x5000cca224c5ea5c     ONLINE
</code></pre>

<p>Otimo, o pool estava lá. Com um disco a menos, mas estava lá. A partir daí, um <code>zpool import dados -f</code> fez o trabalho de deixar o pool disponível.</p>

<p>agora, para substituição do disco ausente, coloquei o pool offline com <code>zpool offline dados ata-ST32000644NS_9WM7N07E</code> e depois um <code>zpool replace dados ata-ST32000644NS_9WM7N07E /dev/disk/by-id/ata-ST32000644NS_9WM7KY7S</code> como sempre, tomando cuidado para usar o <code>/dev/by-id</code> para evitar que os discos se movimentem para um outro /dev/sdX em alguma manipulação futura dos cabos.</p>

<p>dessa forma, só bastou fazer um <code>zfs mount -a</code> e pronto, os datasets estavam montados e disponíveis.</p>

<p>Agora é configurar snapshots e backups para não precisar contar com a sorte no próximo incidente :)</p>

<p><a href="https://rberlim.writeas.com/tag:zfs" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">zfs</span></a>
<a href="https://rberlim.writeas.com/tag:debian" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">debian</span></a>
<a href="https://rberlim.writeas.com/tag:recovery" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">recovery</span></a></p>
]]></content:encoded>
      <guid>https://rberlim.writeas.com/recuperando-um-pool-zfs</guid>
      <pubDate>Sat, 22 Mar 2025 16:43:09 +0000</pubDate>
    </item>
    <item>
      <title>Desventuras com ZFS</title>
      <link>https://rberlim.writeas.com/esses-dias-mexendo-com-o-pool-zfs-na-minha-maquina-notei-algo?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Esses dias mexendo com o pool ZFS na minha máquina, notei algo.&#xA;De vez enquando, alguns HDs dão problema (sou quebrado, então são reaproveitados de discos descomissionados que iriam ser descartados). Normalmente bastaria fazer um zpool replace nome do pool/dev/disco ruim /dev/disco novo.&#xA;Perfeito, tudo muito simples, mas tem um detalhe... E quando você não sabe o disco que quer substituir? &#xA;Eu explico, obviamente, você quer trocar o disco defeituoso, mas nem sempre as informações do zpool status são tão claras quanto eu gostaria.&#xA;&#xA;Por exemplo, olhe isso aqui:&#xA;&#xA;  pool: dados&#xA; state: DEGRADED&#xA;status: One or more devices is currently being resilvered.  The pool will&#xA;&#x9;continue to function, possibly in a degraded state.&#xA;action: Wait for the resilver to complete.&#xA;  scan: resilver in progress since Wed Feb 19 11:27:10 2025&#xA;&#x9;389G scanned at 862M/s, 34.8G issued at 77.2M/s, 389G total&#xA;&#x9;34.8G resilvered, 8.96% done, 01:18:15 to go&#xA;config:&#xA;&#xA;&#x9;NAME                             STATE     READ WRITE CKSUM&#xA;&#x9;dados                            DEGRADED     0     0     0&#xA;&#x9;  mirror-0                       DEGRADED     0     0     0&#xA;&#x9;    replacing-0                  DEGRADED     0     0     0&#xA;&#x9;      16849396304634906415       UNAVAIL      0     0     0  was /dev/sda1&#xA;&#x9;      ata-ST32000644NS9WM5X8TR  ONLINE       0     0     0  (resilvering)&#xA;&#x9;    sdb                          ONLINE       0     0     0&#xA;&#xA;errors: No known data errors&#xA;Nesse caso, temos esse disco com esse identificador &#34;16849396304634906415&#34;. Como saber no fim das contas, qual disco é esse? Ele já foi /dev/sda1, mas como o meu lsblk mostra:&#xA;&#xA;lsblk &#xA;NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS&#xA;sda      8:0    0 111,8G  0 disk &#xA;sdb      8:16   0   1,8T  0 disk &#xA;├─sdb1   8:17   0   1,8T  0 part &#xA;└─sdb9   8:25   0     8M  0 part &#xA;sdc      8:32   0 223,6G  0 disk &#xA;├─sdc1   8:33   0   512M  0 part /boot/efi&#xA;├─sdc2   8:34   0 222,1G  0 part /&#xA;└─sdc3   8:35   0   976M  0 part [SWAP]&#xA;sdd      8:48   0   1,8T  0 disk &#xA;├─sdd1   8:49   0   1,8T  0 part &#xA;└─sdd9   8:57   0     8M  0 part &#xA;sde      8:64   1     0B  0 disk&#xA;esse não é necessáriamente mais o caso, visto que meu pool usa discos de 1.8TB e o atual /dev/sda tem apenas 111,8GB.&#xA;&#xA;Não me pergunte porque, mas essas coisas acontecem.&#xA;Em todo caso, decidi tomar um novo caminho, a partir de agora, faço os pools a a partir que consta em /dev/disk/by-id&#xA;&#xA;ls -l /dev/disk/by-id/&#xA;total 0&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-KINGSTONSUV300S37A240G50026B72630171DA -  ../../sdc&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTONSUV300S37A240G50026B72630171DA-part1 -  ../../sdc1&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTONSUV300S37A240G50026B72630171DA-part2 -  ../../sdc2&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTONSUV300S37A240G50026B72630171DA-part3 -  ../../sdc3&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-SATASSD181210101001015 -  ../../sda&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:27 ata-ST32000644NS9WM5X8TR -  ../../sdd&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:27 ata-ST32000644NS9WM5X8TR-part1 -  ../../sdd1&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:27 ata-ST32000644NS9WM5X8TR-part9 -  ../../sdd9&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-ST32000644NS9WM7KRXX -  ../../sdb&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-ST32000644NS9WM7KRXX-part1 -  ../../sdb1&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-ST32000644NS9WM7KRXX-part9 -  ../../sdb9&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 usb-MultipleCardReader058F63666485-0:0 -  ../../sde&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 wwn-0x5000000000000000 -  ../../sda&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:27 wwn-0x5000c500353451fe -  ../../sdd&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:27 wwn-0x5000c500353451fe-part1 -  ../../sdd1&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:27 wwn-0x5000c500353451fe-part9 -  ../../sdd9&#xA;lrwxrwxrwx 1 root root  9 fev 19 11:07 wwn-0x5000c5003ec2f9c0 -  ../../sdb&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 wwn-0x5000c5003ec2f9c0-part1 -  ../../sdb1&#xA;lrwxrwxrwx 1 root root 10 fev 19 11:07 wwn-0x5000c5003ec2f9c0-part9 -  ../../sdb9&#xA;&#xA;Não que seja a coisa mais compreensível do mundo, mas pelo menos aí você pode usar o serial do disco (que normalmente vem estampado na etiqueta) para identificar qual disco você precisa trocar quando o seu pool der pau, aí fica muito mais simples. No meu caso, rodei: &#xA;zpool replace dados 16849396304634906415 /dev/disk/by-id/ata-ST32000644NS_9WM5X8TR&#xA;&#xA;e já sei que o disco 9wm5x8tr substitui o anterior que deu pau. Futuramente, pretendo adotar essa prática também para quando for criar um novo pool, ai evito essa incerteza de que, quando eventualmente o disco der pau (e vai dar) eu consigo saber qual devo trocar.&#xA;&#xA;zfs&#xA;debian&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Esses dias mexendo com o pool ZFS na minha máquina, notei algo.
De vez enquando, alguns HDs dão problema (sou quebrado, então são reaproveitados de discos descomissionados que iriam ser descartados). Normalmente bastaria fazer um <code>zpool replace &lt;nome do pool&gt;/dev/&lt;disco ruim&gt; /dev/&lt;disco novo&gt;</code>.
Perfeito, tudo muito simples, mas tem um detalhe... E quando você não sabe o disco que quer substituir?
Eu explico, obviamente, você quer trocar o disco defeituoso, mas nem sempre as informações do zpool status são tão claras quanto eu gostaria.</p>

<p>Por exemplo, olhe isso aqui:</p>

<pre><code>  pool: dados
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Wed Feb 19 11:27:10 2025
	389G scanned at 862M/s, 34.8G issued at 77.2M/s, 389G total
	34.8G resilvered, 8.96% done, 01:18:15 to go
config:

	NAME                             STATE     READ WRITE CKSUM
	dados                            DEGRADED     0     0     0
	  mirror-0                       DEGRADED     0     0     0
	    replacing-0                  DEGRADED     0     0     0
	      16849396304634906415       UNAVAIL      0     0     0  was /dev/sda1
	      ata-ST32000644NS_9WM5X8TR  ONLINE       0     0     0  (resilvering)
	    sdb                          ONLINE       0     0     0

errors: No known data errors
</code></pre>

<p>Nesse caso, temos esse disco com esse identificador “16849396304634906415”. Como saber no fim das contas, qual disco é esse? Ele já foi /dev/sda1, mas como o meu lsblk mostra:</p>

<pre><code># lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 111,8G  0 disk 
sdb      8:16   0   1,8T  0 disk 
├─sdb1   8:17   0   1,8T  0 part 
└─sdb9   8:25   0     8M  0 part 
sdc      8:32   0 223,6G  0 disk 
├─sdc1   8:33   0   512M  0 part /boot/efi
├─sdc2   8:34   0 222,1G  0 part /
└─sdc3   8:35   0   976M  0 part [SWAP]
sdd      8:48   0   1,8T  0 disk 
├─sdd1   8:49   0   1,8T  0 part 
└─sdd9   8:57   0     8M  0 part 
sde      8:64   1     0B  0 disk
</code></pre>

<p>esse não é necessáriamente mais o caso, visto que meu pool usa discos de 1.8TB e o atual /dev/sda tem apenas 111,8GB.</p>

<p>Não me pergunte porque, mas essas coisas acontecem.
Em todo caso, decidi tomar um novo caminho, a partir de agora, faço os pools a a partir que consta em <code>/dev/disk/by-id</code></p>

<pre><code># ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-KINGSTON_SUV300S37A240G_50026B72630171DA -&gt; ../../sdc
lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTON_SUV300S37A240G_50026B72630171DA-part1 -&gt; ../../sdc1
lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTON_SUV300S37A240G_50026B72630171DA-part2 -&gt; ../../sdc2
lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-KINGSTON_SUV300S37A240G_50026B72630171DA-part3 -&gt; ../../sdc3
lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-SATA_SSD_181210101001015 -&gt; ../../sda
lrwxrwxrwx 1 root root  9 fev 19 11:27 ata-ST32000644NS_9WM5X8TR -&gt; ../../sdd
lrwxrwxrwx 1 root root 10 fev 19 11:27 ata-ST32000644NS_9WM5X8TR-part1 -&gt; ../../sdd1
lrwxrwxrwx 1 root root 10 fev 19 11:27 ata-ST32000644NS_9WM5X8TR-part9 -&gt; ../../sdd9
lrwxrwxrwx 1 root root  9 fev 19 11:07 ata-ST32000644NS_9WM7KRXX -&gt; ../../sdb
lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-ST32000644NS_9WM7KRXX-part1 -&gt; ../../sdb1
lrwxrwxrwx 1 root root 10 fev 19 11:07 ata-ST32000644NS_9WM7KRXX-part9 -&gt; ../../sdb9
lrwxrwxrwx 1 root root  9 fev 19 11:07 usb-Multiple_Card_Reader_058F63666485-0:0 -&gt; ../../sde
lrwxrwxrwx 1 root root  9 fev 19 11:07 wwn-0x5000000000000000 -&gt; ../../sda
lrwxrwxrwx 1 root root  9 fev 19 11:27 wwn-0x5000c500353451fe -&gt; ../../sdd
lrwxrwxrwx 1 root root 10 fev 19 11:27 wwn-0x5000c500353451fe-part1 -&gt; ../../sdd1
lrwxrwxrwx 1 root root 10 fev 19 11:27 wwn-0x5000c500353451fe-part9 -&gt; ../../sdd9
lrwxrwxrwx 1 root root  9 fev 19 11:07 wwn-0x5000c5003ec2f9c0 -&gt; ../../sdb
lrwxrwxrwx 1 root root 10 fev 19 11:07 wwn-0x5000c5003ec2f9c0-part1 -&gt; ../../sdb1
lrwxrwxrwx 1 root root 10 fev 19 11:07 wwn-0x5000c5003ec2f9c0-part9 -&gt; ../../sdb9
</code></pre>

<p>Não que seja a coisa mais compreensível do mundo, mas pelo menos aí você pode usar o serial do disco (que normalmente vem estampado na etiqueta) para identificar qual disco você precisa trocar quando o seu pool der pau, aí fica muito mais simples. No meu caso, rodei:
<code>zpool replace dados 16849396304634906415 /dev/disk/by-id/ata-ST32000644NS_9WM5X8TR</code></p>

<p>e já sei que o disco 9wm5x8tr substitui o anterior que deu pau. Futuramente, pretendo adotar essa prática também para quando for criar um novo pool, ai evito essa incerteza de que, quando eventualmente o disco der pau (e vai dar) eu consigo saber qual devo trocar.</p>

<p><a href="https://rberlim.writeas.com/tag:zfs" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">zfs</span></a>
<a href="https://rberlim.writeas.com/tag:debian" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">debian</span></a></p>
]]></content:encoded>
      <guid>https://rberlim.writeas.com/esses-dias-mexendo-com-o-pool-zfs-na-minha-maquina-notei-algo</guid>
      <pubDate>Wed, 19 Feb 2025 19:37:10 +0000</pubDate>
    </item>
  </channel>
</rss>