<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Aug 23, 2018 at 2:38 PM, Pierre Couderc <span dir="ltr"><<a href="mailto:pierre@couderc.eu" target="_blank">pierre@couderc.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF"><div><div class="gmail-h5">
    On 08/23/2018 09:24 AM, Fajar A. Nugraha wrote:<br>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">On Thu, Aug 23, 2018 at 2:07 PM,
            Pierre Couderc <span dir="ltr"><<a href="mailto:pierre@couderc.eu" target="_blank">pierre@couderc.eu</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span>On 08/23/2018 07:37 AM, Tamas Papp wrote:<br>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                  <br>
                  On 08/23/2018 05:36 AM, Pierre Couderc wrote:<br>
                  <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                    If for any reason, "lxc copy" does not work, is it
                    enough to copy (rsync) /var/lib/lxd/containers/xxxx
                    to another lxd on another computer in
                    /var/lib/lxd/containers/ ?<br>
                  </blockquote>
                  <br>
                  Copy the folder (watch out rsync flags) to
                  /var/lib/lxd/storage-pools/def<wbr>ault/containers/,
                  symlink to /var/lib/lxd/containers and run 'lxd
                  import'.<br>
                  <br>
                </blockquote>
              </span>
              Thank you very much. It nearlu worked.<br>
              Anyway, it fails (in this case) because :<br>
              Error: The storage pool's "default" driver "dir" conflicts
              with the driver "btrfs" recorded in the container's backup
              file<br>
            </blockquote>
            <div><br>
            </div>
            <div>If you know how lxd use btrfs to create the container
              storage (using subvolume?), you can probably create it
              manually, and rsync there.</div>
            <div><br>
            </div>
            <div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Or
                you can create another storage pool, but backed by dir
                (e.g. 'lxc storage create pool2 dir') instead of
                btrfs/zfs.</span></div>
            <div><br>
            </div>
            <div>Or yet another way:</div>
            <div>- create a new container</div>
            <div>- take note where its storage is (e.g. by looking at
              mount options, "df -h", etc)</div>
            <div>- shutdown the container</div>
            <div>- replace the storage with the one you need to restore</div>
            <div><br>
            </div>
            <div>-- </div>
            <div>Fajar</div>
          </div>
        </div>
      </div>
      <br>
    </blockquote></div></div>
    Thank you, I think to that.<br>
    But what is sure is that my "old" container is labelled as btrfs and
    after rsync on a "non btrfs" volume, the btrfs label remains....<br></div></blockquote><div><br></div><div><br></div><div>You can edit backup.yaml to reflect the changes. Here's an example on my system:</div><div><br></div><div>-> my default pool is on zfs</div><div><div># lxc storage show default</div><div>config:</div><div>  source: HD/lxd</div><div>  volatile.initial_source: HD/lxd</div><div>  zfs.pool_name: HD/lxd</div><div>description: ""</div><div>name: default</div><div>driver: zfs</div></div><div>...</div><div><br></div><div><br></div><div>-> create a test container</div><div><div># lxc launch images:alpine/3.8 test1</div><div>Creating test1</div><div>Starting test1                              </div><div><br></div><div># df -h | grep test1</div><div>HD/lxd/containers/test1          239G  5.2M  239G   1% /var/lib/lxd/storage-pools/default/containers/test1</div></div><div><br></div><div><br></div><div>-> copy it manually to a "directory" with rsync, then "lxd import". As expected, it doesn't work.</div><div><div># mkdir /var/lib/lxd/storage-pools/default/containers/test2</div><div><br></div><div># rsync -a /var/lib/lxd/storage-pools/default/containers/test1/. /var/lib/lxd/storage-pools/default/containers/test2/.</div><div><br></div><div># sed -i 's/name: test1/name: test2/g' /var/lib/lxd/storage-pools/default/containers/test2/backup.yaml </div><div><br></div><div># lxd import test2</div><div><br></div><div># lxc start test2</div></div><div><div>Error: no such file or directory</div><div>Try `lxc info --show-log test2` for more info</div></div><div><br></div><div><br></div><div>-> cleanup before next test</div><div><div># rm -rf /var/lib/lxd/storage-pools/default/containers/test2</div><div><br></div><div># lxc delete test2</div></div><div><br></div><div><br></div><div>-> now create a zfs dataset properly, mount it, and THEN rsync (or replace the whole thing with 'zfs send | zfs receive') + lxd import. works.</div><div><div># zfs create -o mountpoint=/var/lib/lxd/storage-pools/default/containers/test2 HD/lxd/containers/test2</div><div><br></div><div># rsync -a /var/lib/lxd/storage-pools/default/containers/test1/. /var/lib/lxd/storage-pools/default/containers/test2/.</div><div><br></div><div># sed -i 's/name: test1/name: test2/g' /var/lib/lxd/storage-pools/default/containers/test2/backup.yaml </div><div><br></div><div># lxd import test2</div><div><br></div><div># lxc start test2</div><div><br></div><div># lxc list test2</div><div>+-------+---------+-------------------+------+------------+-----------+</div><div>| NAME  |  STATE  |       IPV4        | IPV6 |    TYPE    | SNAPSHOTS |</div><div>+-------+---------+-------------------+------+------------+-----------+</div><div>| test2 | RUNNING | 10.0.3.122 (eth0) |      | PERSISTENT | 0         |</div><div>+-------+---------+-------------------+------+------------+-----------+</div></div><div><br></div><div><br></div><div>-> cleanup again</div><div><div># lxc stop --force test2</div><div><br></div><div># lxc delete test2</div></div><div><br></div><div><br></div><div>-> try again, this time using a different storage pool ('dir'). MUCH more complicated, but possible</div><div><div># lxc storage create testpool dir source=/tmp/testpool</div><div>Storage pool testpool created</div></div><div><br></div><div><div># mkdir -p /tmp/testpool/containers/test2</div><div><br></div><div># rsync -a /var/lib/lxd/storage-pools/default/containers/test1/. /tmp/testpool/containers/test2/.</div></div><div><div><br></div><div># sed -i 's/name: test1/name: test2/g' /tmp/testpool/containers/test2/backup.yaml </div></div><div><br></div><div># sed -i 's/pool: default/pool: testpool/g' /tmp/testpool/containers/test2/backup.yaml </div><div><br></div><div>-> edit /tmp/testpool/containers/test2/backup.yaml manually</div><div>change device to this:</div><div>###</div><div>  devices:</div><div>    eth0:</div><div>      nictype: bridged</div><div>      parent: lxdbr0</div><div>      type: nic</div><div>    root:</div><div>      path: /</div><div>      pool: testpool</div><div>      type: disk</div><div>###</div><div><br></div><div>and change pool info to this</div><div>###</div><div>pool:<br></div><div><div>  config:</div><div>    source: /tmp/testpool</div><div>    volatile.initial_source: /tmp/testpool</div><div>  description: ""<br></div><div>  name: testpool</div><div>  driver: dir</div><div>  used_by: []</div><div>  status: Created</div><div>  locations:</div><div>  - none</div></div><div>###</div><div><br></div><div>-> import and start it</div><div><div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><div># lxd import test2</div></div><br class="gmail-Apple-interchange-newline"># lxc start test2</div><div><br></div><div># lxc list test2</div><div>+-------+---------+-------------------+------+------------+-----------+</div><div>| NAME  |  STATE  |       IPV4        | IPV6 |    TYPE    | SNAPSHOTS |</div><div>+-------+---------+-------------------+------+------------+-----------+</div><div>| test2 | RUNNING | 10.0.3.122 (eth0) |      | PERSISTENT | 0         |</div><div>+-------+---------+-------------------+------+------------+-----------+</div><div><br></div><div>-> final cleanup<br></div></div><div><div style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><div># lxc stop --force test2</div><div><br></div><div># lxc delete test2</div></div><div><br></div></div><div># lxc storage delete testpool<br></div><div>Storage pool testpool deleted</div><div><br></div><div><br></div><div><br></div><div>In the case of "copy" (instead of backup and restore) like in my case, you'd want to change "volatile.eth0.hwaddr" too. Otherwise you'd end up with multiple containers with the same MAC and IP address.</div><div><br></div><div>-- </div><div>Fajar</div></div></div></div>