<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>S3 on inetshell</title><link>https://inet.sh/es/tags/s3/</link><description>Recent content in S3 on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Wed, 19 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/s3/index.xml" rel="self" type="application/rss+xml"/><item><title>Enviar snapshots ZFS a otro host (y de ahí a S3)</title><link>https://inet.sh/es/posts/zfs/backups-s3/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/zfs/backups-s3/</guid><description>zfs send -w -R -i por SSH a zfs recv -s, y cómo aterrizar el mismo stream en S3. Incremental, raw, resumible.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p><code>zfs send -w -R -i</code> por SSH a <code>zfs recv -s</code>. El stream no es tar; S3 es el paso extra si lo necesitas.</p>
<p><code>zfs send</code> produce un <strong>stream replicable</strong>, no un directorio. El destino natural es otro pool (<code>zfs recv</code>). S3 es un segundo salto: guardas el stream como objeto, o usas una herramienta tipo <a href="https://github.com/pressly/z3">z3</a>.</p>
<h2 id="incremental-a-otro-host-el-comando-que-uso">Incremental a otro host (el comando que uso)</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs send -w -R -v -i vol1/secure/backups@initial vol1/secure/backups@new <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> ssh root@10.0.0.1 zfs recv -s vol1/secure/backups
</span></span></code></pre></td></tr></table>
</div>
</div><table>
  <thead>
      <tr>
          <th>Flag</th>
          <th>Qué hace</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>-w</code></td>
          <td>raw: manda el dataset <strong>cifrado como está</strong>. El destino no necesita la key para recibir.</td>
      </tr>
      <tr>
          <td><code>-R</code></td>
          <td>replica propiedades y snapshots hijas</td>
      </tr>
      <tr>
          <td><code>-i @initial @new</code></td>
          <td>incremental desde <code>@initial</code> (tiene que existir en origen <strong>y</strong> destino)</td>
      </tr>
      <tr>
          <td><code>-v</code></td>
          <td>progreso</td>
      </tr>
      <tr>
          <td><code>recv -s</code></td>
          <td><strong>resumible</strong> si se corta el SSH (<code>zfs restart</code> / <code>recv -s</code> otra vez)</td>
      </tr>
  </tbody>
</table>
<p>Pon un <a href="/es/posts/zfs/hold-proteger-snapshot/">hold</a> en <code>@initial</code> y <code>@new</code> mientras corre el send, o el prune te rompe la cadena.</p>
<p>El primer full (sin <code>-i</code>) es obligatorio una vez:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs send -w -R -v vol1/secure/backups@initial <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> ssh root@10.0.0.1 zfs recv -s vol1/secure/backups
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="aterrizar-en-s3">Aterrizar en S3</h2>
<p>Mismo stream, otro lado del pipe:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs send -w -R vol1/secure/backups@new <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> gzip -1 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> aws s3 cp - s3://mi-bucket/zfs/backups@new.zfs.gz
</span></span></code></pre></td></tr></table>
</div>
</div><p>Restaurar:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">aws s3 cp s3://mi-bucket/zfs/backups@new.zfs.gz - <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> gunzip <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> zfs recv -s vol1/secure/backups
</span></span></code></pre></td></tr></table>
</div>
</div><p>Esto <strong>no</strong> es un sync de archivos. Es un blob opaco: o recuperas el stream entero (o el incremental encima del full), o no recuperas nada. Versiona los nombres <code>@initial</code>, <code>@new</code> y no borres el full.</p>
<p>Para incrementales en S3, herramientas como z3 llevan el catálogo de qué snapshot ya subió. Un <code>aws s3 cp -</code> crudo no sabe de eso.</p>
<p><code>-w</code> en S3 es correcto si el dataset ya está cifrado: Amazon no ve plaintext. Si el origen <strong>no</strong> está cifrado, o cifras en recv (<a href="/es/posts/zfs/send-sin-cifrar-a-cifrado/">artículo</a>) o cifras el objeto (KMS / cliente) — el stream en claro en un bucket es un backup en claro.</p>
<p>Ver también: <a href="/es/posts/zfs/cifrado/">cifrado nativo</a>.</p>
]]></content:encoded></item></channel></rss>