linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Richard W.M. Jones" <rjones@redhat.com>
To: "Theodore Y. Ts'o" <tytso@mit.edu>
Cc: linux-ext4@vger.kernel.org
Subject: Re: Create ext2 filesystem from a directory
Date: Wed, 20 Feb 2019 00:55:15 +0000	[thread overview]
Message-ID: <20190220005515.GD12500@redhat.com> (raw)
In-Reply-To: <20190220004416.GA31238@mit.edu>

On Tue, Feb 19, 2019 at 07:44:16PM -0500, Theodore Y. Ts'o wrote:
> On Tue, Feb 19, 2019 at 08:03:33AM +0000, Richard W.M. Jones wrote:
> > 
> > This might interest/disgust/shock/scare(?!) people on this list:
> > 
> > $ time ./nbdkit --filter=partition -U - linuxdisk . partition=1 --run 'qemu-img convert $nbd /var/tmp/ext2fs.img'
> > 
> 
> For those of us who aren't really familiar with nbdkit, what does this do?

There's quite a lot packed into a small space ...

Firstly nbdkit is an NBD server which is unique in having plugins to
implement different data sources.  In this case I have written a
plugin called "linuxdisk" which creates a GPT-partitioned
ext2-formatted disk image from a local directory ("." in this case).

nbdkit can serve over IP or Unix domain sockets, including randomly
created Unix domain sockets ("-U -").

nbdkit can also run other commands and exit when those commands have
finished (we call this "captive nbdkit").  In this case we ask nbdkit
to run a qemu-img command and then exit when qemu-img finishes.

"qemu-img convert $nbd /var/tmp/ext2fs.img" connects to the private
Unix domain socket (nbdkit sets $nbd to a suitable string to make this
happen).  It then copies the data out of that NBD socket to a local
file, optionally doing a format conversion although not in this case.

Finally nbdkit has a concept of filters which can be placed on top of
plugins to select parts of the data.  Remember that the "linuxdisk"
plugin creates GPT-partitioned ext2 disk images.  However we want only
the naked filesystem.  Therefore we place the partition filter on top
to pick out and serve only the partition content, which is the naked
ext2 filesystem.

I recently did a talk about nbdkit if you want to find out more:
https://rwmj.wordpress.com/2019/02/04/video-take-your-loop-mounts-to-the-next-level-with-nbdkit/

Here's another fun thing you can do with the linuxdisk plugin:
https://rwmj.wordpress.com/2019/02/19/nbdkit-linuxdisk-plugin/

Hope that helps!

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top

  reply	other threads:[~2019-02-20  0:55 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-19  8:03 Create ext2 filesystem from a directory Richard W.M. Jones
2019-02-20  0:44 ` Theodore Y. Ts'o
2019-02-20  0:55   ` Richard W.M. Jones [this message]
2019-02-20  6:31 ` Andreas Dilger
2019-02-20  7:57   ` Richard W.M. Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190220005515.GD12500@redhat.com \
    --to=rjones@redhat.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).