|
NAMEnbdkit-tmpdisk-plugin - create a fresh temporary filesystem for each clientSYNOPSISnbdkit tmpdisk [size=]SIZE [type=ext4|xfs|vfat|...] [label=LABEL] nbdkit tmpdisk [size=]SIZE command=COMMAND [VAR=VALUE ...] DESCRIPTIONThis nbdkit(1) plugin is used for creating temporary filesystems for thin clients. Each time a client connects it will see a fresh, empty filesystem for its exclusive use. The filesystem is deleted when the client disconnects.When a new client connects, a blank, sparse file of the required size is created in $TMPDIR (or /var/tmp). mkfs(8) is then run on the file to create the empty filesystem, and this filesystem is served to the client. Unlike nbdkit-linuxdisk-plugin(1) each client of this plugin sees a different disk. The size of the disk is chosen using the "size" parameter. The filesystem type is "ext4" but this can be changed using the "type" parameter (controlling the -t option of mkfs). The filesystem label may be set using "label". The command parameterInstead of running mkfs you can run an arbitrary command (a shell script fragment) to create the disk.The other parameters to the plugin are turned into shell variables passed to the command. For example "type" becomes the shell variable $type, etc. Any parameters you want can be passed to the plugin and will be turned into shell variables (not only "type" and "label") making this a very flexible method to create temporary disks of all kinds. Two special variables are also passed to the shell script fragment:
Security considerationsBecause each client gets a new disk, the amount of disk space required on the server can be as much as number of clients × size. It is therefore best to limit the number of clients using nbdkit-limit-filter(1) or take steps to limit where clients can connect from using nbdkit-ip-filter(1), firewalls, or TLS client certificates.EXAMPLESRemote tmpfsOne use for this is to create a kind of "remote tmpfs(5)" for thin clients. On the server you would run (see nbdkit-service(1)):nbdkit tmpdisk 16G and each thin client would have a file /etc/rc.d/rc.local containing: nm-online modprobe nbd nbd-client server /dev/nbd0 mount /dev/nbd0 /var/scratch Clients would see a fresh, empty "/var/scratch" directory after boot. Overriding mkfs optionsUsing "command" allows you to easily override any mkfs option, for example:nbdkit tmpdisk 16G command=' truncate -s $size "$disk" mke2fs -F -N 10000 -t ext4 "$disk" ' Serve a fresh blank disk to each clientAgain using "command", this demonstrates serving any file that you can create locally to the client. This is different from nbdkit-memory-plugin(1) because the clients all see their own private disk (instead of all seeing the same shared disk):nbdkit tmpdisk 16G command=' truncate -s $size "$disk" ' Serve a fresh operating system to each clientnbdkit tmpdisk 16G os=fedora-31 \ command=' virt-builder -o "$disk" --size ${size}b "$os" ' Serve a throwaway snapshot of a base image to each clientYou could create a base image using mke2fs(8) -d option, virt-builder(1), or similar tools. Then in the command you could copy and serve different throwaway snapshots to each client:truncate -s 1G base.img mke2fs -d initial-content/ -F -t ext4 base.img nbdkit tmpdisk size=0 base=$PWD/base.img \ command=' cp --sparse=always "$base" "$disk" ' The unusual "size=0" parameter is because when using "command", "size" is only a request (but the parameter is required). In this case the command ignores the requested size. The final size is the size of $disk created by the cp(1) command. PARAMETERS
ENVIRONMENT VARIABLES
FILES
VERSION"nbdkit-tmpdisk-plugin" first appeared in nbdkit 1.20.SEE ALSOnbdkit(1), nbdkit-plugin(3), nbdkit-data-plugin(1), nbdkit-eval-plugin(1), nbdkit-file-plugin(1), nbdkit-ip-filter(1), nbdkit-limit-filter(1), nbdkit-linuxdisk-plugin(1), nbdkit-memory-plugin(1), nbdkit-sh-plugin(1), nbdkit-loop(1), nbdkit-tls(1), mkfs(8), mke2fs(8), virt-builder(1).AUTHORSRichard W.M. JonesCOPYRIGHTCopyright (C) 2018-2020 Red Hat Inc.LICENSERedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Visit the GSP FreeBSD Man Page Interface. |