3 * Copyright (C) 2009-2010 Red Hat Inc.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 (* This script generates a large amount of code and documentation for
21 * all the daemon actions.
23 * To add a new action there are only two files you need to change,
24 * this one to describe the interface (see the big table of
25 * 'daemon_functions' below), and daemon/<somefile>.c to write the
28 * After editing this file, run it (./src/generator.ml) to regenerate
29 * all the output files. 'make' will rerun this automatically when
30 * necessary. Note that if you are using a separate build directory
31 * you must run generator.ml from the _source_ directory.
33 * IMPORTANT: This script should NOT print any warnings. If it prints
34 * warnings, you should treat them as errors.
37 * (1) In emacs, install tuareg-mode to display and format OCaml code
38 * correctly. 'vim' comes with a good OCaml editing mode by default.
39 * (2) Read the resources at http://ocaml-tutorial.org/
44 #directory "+xml-light";;
45 #directory "+../pkg-lib/xml-light";; (* for GODI users *)
46 #load "xml-light.cma";;
51 type style = ret * args
53 (* "RErr" as a return value means an int used as a simple error
54 * indication, ie. 0 or -1.
58 (* "RInt" as a return value means an int which is -1 for error
59 * or any value >= 0 on success. Only use this for smallish
60 * positive ints (0 <= i < 2^30).
64 (* "RInt64" is the same as RInt, but is guaranteed to be able
65 * to return a full 64 bit value, _except_ that -1 means error
66 * (so -1 cannot be a valid, non-error return value).
70 (* "RBool" is a bool return value which can be true/false or
75 (* "RConstString" is a string that refers to a constant value.
76 * The return value must NOT be NULL (since NULL indicates
79 * Try to avoid using this. In particular you cannot use this
80 * for values returned from the daemon, because there is no
81 * thread-safe way to return them in the C API.
83 | RConstString of string
85 (* "RConstOptString" is an even more broken version of
86 * "RConstString". The returned string may be NULL and there
87 * is no way to return an error indication. Avoid using this!
89 | RConstOptString of string
91 (* "RString" is a returned string. It must NOT be NULL, since
92 * a NULL return indicates an error. The caller frees this.
96 (* "RStringList" is a list of strings. No string in the list
97 * can be NULL. The caller frees the strings and the array.
99 | RStringList of string
101 (* "RStruct" is a function which returns a single named structure
102 * or an error indication (in C, a struct, and in other languages
103 * with varying representations, but usually very efficient). See
104 * after the function list below for the structures.
106 | RStruct of string * string (* name of retval, name of struct *)
108 (* "RStructList" is a function which returns either a list/array
109 * of structures (could be zero-length), or an error indication.
111 | RStructList of string * string (* name of retval, name of struct *)
113 (* Key-value pairs of untyped strings. Turns into a hashtable or
114 * dictionary in languages which support it. DON'T use this as a
115 * general "bucket" for results. Prefer a stronger typed return
116 * value if one is available, or write a custom struct. Don't use
117 * this if the list could potentially be very long, since it is
118 * inefficient. Keys should be unique. NULLs are not permitted.
120 | RHashtable of string
122 (* "RBufferOut" is handled almost exactly like RString, but
123 * it allows the string to contain arbitrary 8 bit data including
124 * ASCII NUL. In the C API this causes an implicit extra parameter
125 * to be added of type <size_t *size_r>. The extra parameter
126 * returns the actual size of the return buffer in bytes.
128 * Other programming languages support strings with arbitrary 8 bit
131 * At the RPC layer we have to use the opaque<> type instead of
132 * string<>. Returned data is still limited to the max message
135 | RBufferOut of string
137 and args = argt list (* Function parameters, guestfs handle is implicit. *)
139 (* Note in future we should allow a "variable args" parameter as
140 * the final parameter, to allow commands like
141 * chmod mode file [file(s)...]
142 * This is not implemented yet, but many commands (such as chmod)
143 * are currently defined with the argument order keeping this future
144 * possibility in mind.
147 | String of string (* const char *name, cannot be NULL *)
148 | Device of string (* /dev device name, cannot be NULL *)
149 | Pathname of string (* file name, cannot be NULL *)
150 | Dev_or_Path of string (* /dev device name or Pathname, cannot be NULL *)
151 | OptString of string (* const char *name, may be NULL *)
152 | StringList of string(* list of strings (each string cannot be NULL) *)
153 | DeviceList of string(* list of Device names (each cannot be NULL) *)
154 | Bool of string (* boolean *)
155 | Int of string (* int (smallish ints, signed, <= 31 bits) *)
156 | Int64 of string (* any 64 bit int *)
157 (* These are treated as filenames (simple string parameters) in
158 * the C API and bindings. But in the RPC protocol, we transfer
159 * the actual file content up to or down from the daemon.
160 * FileIn: local machine -> daemon (in request)
161 * FileOut: daemon -> local machine (in reply)
162 * In guestfish (only), the special name "-" means read from
163 * stdin or write to stdout.
168 (* Opaque buffer which can contain arbitrary 8 bit data.
169 * In the C API, this is expressed as <char *, int> pair.
170 * Most other languages have a string type which can contain
171 * ASCII NUL. We use whatever type is appropriate for each
173 * Buffers are limited by the total message size. To transfer
174 * large blocks of data, use FileIn/FileOut parameters instead.
175 * To return an arbitrary buffer, use RBufferOut.
181 | ProtocolLimitWarning (* display warning about protocol size limits *)
182 | DangerWillRobinson (* flags particularly dangerous commands *)
183 | FishAlias of string (* provide an alias for this cmd in guestfish *)
184 | FishAction of string (* call this function in guestfish *)
185 | FishOutput of fish_output_t (* how to display output in guestfish *)
186 | NotInFish (* do not export via guestfish *)
187 | NotInDocs (* do not add this function to documentation *)
188 | DeprecatedBy of string (* function is deprecated, use .. instead *)
189 | Optional of string (* function is part of an optional group *)
192 | FishOutputOctal (* for int return, print in octal *)
193 | FishOutputHexadecimal (* for int return, print in hex *)
195 (* You can supply zero or as many tests as you want per API call.
197 * Note that the test environment has 3 block devices, of size 500MB,
198 * 50MB and 10MB (respectively /dev/sda, /dev/sdb, /dev/sdc), and
199 * a fourth ISO block device with some known files on it (/dev/sdd).
201 * Note for partitioning purposes, the 500MB device has 1015 cylinders.
202 * Number of cylinders was 63 for IDE emulated disks with precisely
203 * the same size. How exactly this is calculated is a mystery.
205 * The ISO block device (/dev/sdd) comes from images/test.iso.
207 * To be able to run the tests in a reasonable amount of time,
208 * the virtual machine and block devices are reused between tests.
209 * So don't try testing kill_subprocess :-x
211 * Between each test we blockdev-setrw, umount-all, lvm-remove-all.
213 * Don't assume anything about the previous contents of the block
214 * devices. Use 'Init*' to create some initial scenarios.
216 * You can add a prerequisite clause to any individual test. This
217 * is a run-time check, which, if it fails, causes the test to be
218 * skipped. Useful if testing a command which might not work on
219 * all variations of libguestfs builds. A test that has prerequisite
220 * of 'Always' is run unconditionally.
222 * In addition, packagers can skip individual tests by setting the
223 * environment variables: eg:
224 * SKIP_TEST_<CMD>_<NUM>=1 SKIP_TEST_COMMAND_3=1 (skips test #3 of command)
225 * SKIP_TEST_<CMD>=1 SKIP_TEST_ZEROFREE=1 (skips all zerofree tests)
227 type tests = (test_init * test_prereq * test) list
229 (* Run the command sequence and just expect nothing to fail. *)
232 (* Run the command sequence and expect the output of the final
233 * command to be the string.
235 | TestOutput of seq * string
237 (* Run the command sequence and expect the output of the final
238 * command to be the list of strings.
240 | TestOutputList of seq * string list
242 (* Run the command sequence and expect the output of the final
243 * command to be the list of block devices (could be either
244 * "/dev/sd.." or "/dev/hd.." form - we don't check the 5th
245 * character of each string).
247 | TestOutputListOfDevices of seq * string list
249 (* Run the command sequence and expect the output of the final
250 * command to be the integer.
252 | TestOutputInt of seq * int
254 (* Run the command sequence and expect the output of the final
255 * command to be <op> <int>, eg. ">=", "1".
257 | TestOutputIntOp of seq * string * int
259 (* Run the command sequence and expect the output of the final
260 * command to be a true value (!= 0 or != NULL).
262 | TestOutputTrue of seq
264 (* Run the command sequence and expect the output of the final
265 * command to be a false value (== 0 or == NULL, but not an error).
267 | TestOutputFalse of seq
269 (* Run the command sequence and expect the output of the final
270 * command to be a list of the given length (but don't care about
273 | TestOutputLength of seq * int
275 (* Run the command sequence and expect the output of the final
276 * command to be a buffer (RBufferOut), ie. string + size.
278 | TestOutputBuffer of seq * string
280 (* Run the command sequence and expect the output of the final
281 * command to be a structure.
283 | TestOutputStruct of seq * test_field_compare list
285 (* Run the command sequence and expect the final command (only)
288 | TestLastFail of seq
290 and test_field_compare =
291 | CompareWithInt of string * int
292 | CompareWithIntOp of string * string * int
293 | CompareWithString of string * string
294 | CompareFieldsIntEq of string * string
295 | CompareFieldsStrEq of string * string
297 (* Test prerequisites. *)
299 (* Test always runs. *)
302 (* Test is currently disabled - eg. it fails, or it tests some
303 * unimplemented feature.
307 (* 'string' is some C code (a function body) that should return
308 * true or false. The test will run if the code returns true.
312 (* As for 'If' but the test runs _unless_ the code returns true. *)
315 (* Some initial scenarios for testing. *)
317 (* Do nothing, block devices could contain random stuff including
318 * LVM PVs, and some filesystems might be mounted. This is usually
323 (* Block devices are empty and no filesystems are mounted. *)
326 (* /dev/sda contains a single partition /dev/sda1, with random
327 * content. /dev/sdb and /dev/sdc may have random content.
332 (* /dev/sda contains a single partition /dev/sda1, which is formatted
333 * as ext2, empty [except for lost+found] and mounted on /.
334 * /dev/sdb and /dev/sdc may have random content.
340 * /dev/sda1 (is a PV):
341 * /dev/VG/LV (size 8MB):
342 * formatted as ext2, empty [except for lost+found], mounted on /
343 * /dev/sdb and /dev/sdc may have random content.
347 (* /dev/sdd (the ISO, see images/ directory in source)
352 (* Sequence of commands for testing. *)
354 and cmd = string list
356 (* Note about long descriptions: When referring to another
357 * action, use the format C<guestfs_other> (ie. the full name of
358 * the C function). This will be replaced as appropriate in other
361 * Apart from that, long descriptions are just perldoc paragraphs.
364 (* Generate a random UUID (used in tests). *)
366 let chan = open_process_in "uuidgen" in
367 let uuid = input_line chan in
368 (match close_process_in chan with
371 failwith "uuidgen: process exited with non-zero status"
372 | WSIGNALED _ | WSTOPPED _ ->
373 failwith "uuidgen: process signalled or stopped by signal"
377 (* These test functions are used in the language binding tests. *)
379 let test_all_args = [
382 StringList "strlist";
390 let test_all_rets = [
391 (* except for RErr, which is tested thoroughly elsewhere *)
392 "test0rint", RInt "valout";
393 "test0rint64", RInt64 "valout";
394 "test0rbool", RBool "valout";
395 "test0rconststring", RConstString "valout";
396 "test0rconstoptstring", RConstOptString "valout";
397 "test0rstring", RString "valout";
398 "test0rstringlist", RStringList "valout";
399 "test0rstruct", RStruct ("valout", "lvm_pv");
400 "test0rstructlist", RStructList ("valout", "lvm_pv");
401 "test0rhashtable", RHashtable "valout";
404 let test_functions = [
405 ("test0", (RErr, test_all_args), -1, [NotInFish; NotInDocs],
407 "internal test function - do not use",
409 This is an internal test function which is used to test whether
410 the automatically generated bindings can handle every possible
411 parameter type correctly.
413 It echos the contents of each parameter to stdout.
415 You probably don't want to call this function.");
419 [(name, (ret, [String "val"]), -1, [NotInFish; NotInDocs],
421 "internal test function - do not use",
423 This is an internal test function which is used to test whether
424 the automatically generated bindings can handle every possible
425 return type correctly.
427 It converts string C<val> to the return type.
429 You probably don't want to call this function.");
430 (name ^ "err", (ret, []), -1, [NotInFish; NotInDocs],
432 "internal test function - do not use",
434 This is an internal test function which is used to test whether
435 the automatically generated bindings can handle every possible
436 return type correctly.
438 This function always returns an error.
440 You probably don't want to call this function.")]
444 (* non_daemon_functions are any functions which don't get processed
445 * in the daemon, eg. functions for setting and getting local
446 * configuration values.
449 let non_daemon_functions = test_functions @ [
450 ("launch", (RErr, []), -1, [FishAlias "run"],
452 "launch the qemu subprocess",
454 Internally libguestfs is implemented by running a virtual machine
457 You should call this after configuring the handle
458 (eg. adding drives) but before performing any actions.");
460 ("wait_ready", (RErr, []), -1, [NotInFish],
462 "wait until the qemu subprocess launches (no op)",
464 This function is a no op.
466 In versions of the API E<lt> 1.0.71 you had to call this function
467 just after calling C<guestfs_launch> to wait for the launch
468 to complete. However this is no longer necessary because
469 C<guestfs_launch> now does the waiting.
471 If you see any calls to this function in code then you can just
472 remove them, unless you want to retain compatibility with older
473 versions of the API.");
475 ("kill_subprocess", (RErr, []), -1, [],
477 "kill the qemu subprocess",
479 This kills the qemu subprocess. You should never need to call this.");
481 ("add_drive", (RErr, [String "filename"]), -1, [FishAlias "add"],
483 "add an image to examine or modify",
485 This function adds a virtual machine disk image C<filename> to the
486 guest. The first time you call this function, the disk appears as IDE
487 disk 0 (C</dev/sda>) in the guest, the second time as C</dev/sdb>, and
490 You don't necessarily need to be root when using libguestfs. However
491 you obviously do need sufficient permissions to access the filename
492 for whatever operations you want to perform (ie. read access if you
493 just want to read the image or write access if you want to modify the
496 This is equivalent to the qemu parameter
497 C<-drive file=filename,cache=off,if=...>.
499 C<cache=off> is omitted in cases where it is not supported by
500 the underlying filesystem.
502 C<if=...> is set at compile time by the configuration option
503 C<./configure --with-drive-if=...>. In the rare case where you
504 might need to change this at run time, use C<guestfs_add_drive_with_if>
505 or C<guestfs_add_drive_ro_with_if>.
507 Note that this call checks for the existence of C<filename>. This
508 stops you from specifying other types of drive which are supported
509 by qemu such as C<nbd:> and C<http:> URLs. To specify those, use
510 the general C<guestfs_config> call instead.");
512 ("add_cdrom", (RErr, [String "filename"]), -1, [FishAlias "cdrom"],
514 "add a CD-ROM disk image to examine",
516 This function adds a virtual CD-ROM disk image to the guest.
518 This is equivalent to the qemu parameter C<-cdrom filename>.
526 This call checks for the existence of C<filename>. This
527 stops you from specifying other types of drive which are supported
528 by qemu such as C<nbd:> and C<http:> URLs. To specify those, use
529 the general C<guestfs_config> call instead.
533 If you just want to add an ISO file (often you use this as an
534 efficient way to transfer large files into the guest), then you
535 should probably use C<guestfs_add_drive_ro> instead.
539 ("add_drive_ro", (RErr, [String "filename"]), -1, [FishAlias "add-ro"],
541 "add a drive in snapshot mode (read-only)",
543 This adds a drive in snapshot mode, making it effectively
546 Note that writes to the device are allowed, and will be seen for
547 the duration of the guestfs handle, but they are written
548 to a temporary file which is discarded as soon as the guestfs
549 handle is closed. We don't currently have any method to enable
550 changes to be committed, although qemu can support this.
552 This is equivalent to the qemu parameter
553 C<-drive file=filename,snapshot=on,readonly=on,if=...>.
555 C<if=...> is set at compile time by the configuration option
556 C<./configure --with-drive-if=...>. In the rare case where you
557 might need to change this at run time, use C<guestfs_add_drive_with_if>
558 or C<guestfs_add_drive_ro_with_if>.
560 C<readonly=on> is only added where qemu supports this option.
562 Note that this call checks for the existence of C<filename>. This
563 stops you from specifying other types of drive which are supported
564 by qemu such as C<nbd:> and C<http:> URLs. To specify those, use
565 the general C<guestfs_config> call instead.");
567 ("config", (RErr, [String "qemuparam"; OptString "qemuvalue"]), -1, [],
569 "add qemu parameters",
571 This can be used to add arbitrary qemu command line parameters
572 of the form C<-param value>. Actually it's not quite arbitrary - we
573 prevent you from setting some parameters which would interfere with
574 parameters that we use.
576 The first character of C<param> string must be a C<-> (dash).
578 C<value> can be NULL.");
580 ("set_qemu", (RErr, [String "qemu"]), -1, [FishAlias "qemu"],
582 "set the qemu binary",
584 Set the qemu binary that we will use.
586 The default is chosen when the library was compiled by the
589 You can also override this by setting the C<LIBGUESTFS_QEMU>
590 environment variable.
592 Setting C<qemu> to C<NULL> restores the default qemu binary.
594 Note that you should call this function as early as possible
595 after creating the handle. This is because some pre-launch
596 operations depend on testing qemu features (by running C<qemu -help>).
597 If the qemu binary changes, we don't retest features, and
598 so you might see inconsistent results. Using the environment
599 variable C<LIBGUESTFS_QEMU> is safest of all since that picks
600 the qemu binary at the same time as the handle is created.");
602 ("get_qemu", (RConstString "qemu", []), -1, [],
603 [InitNone, Always, TestRun (
605 "get the qemu binary",
607 Return the current qemu binary.
609 This is always non-NULL. If it wasn't set already, then this will
610 return the default qemu binary name.");
612 ("set_path", (RErr, [String "searchpath"]), -1, [FishAlias "path"],
614 "set the search path",
616 Set the path that libguestfs searches for kernel and initrd.img.
618 The default is C<$libdir/guestfs> unless overridden by setting
619 C<LIBGUESTFS_PATH> environment variable.
621 Setting C<path> to C<NULL> restores the default path.");
623 ("get_path", (RConstString "path", []), -1, [],
624 [InitNone, Always, TestRun (
626 "get the search path",
628 Return the current search path.
630 This is always non-NULL. If it wasn't set already, then this will
631 return the default path.");
633 ("set_append", (RErr, [OptString "append"]), -1, [FishAlias "append"],
635 "add options to kernel command line",
637 This function is used to add additional options to the
638 guest kernel command line.
640 The default is C<NULL> unless overridden by setting
641 C<LIBGUESTFS_APPEND> environment variable.
643 Setting C<append> to C<NULL> means I<no> additional options
644 are passed (libguestfs always adds a few of its own).");
646 ("get_append", (RConstOptString "append", []), -1, [],
647 (* This cannot be tested with the current framework. The
648 * function can return NULL in normal operations, which the
649 * test framework interprets as an error.
652 "get the additional kernel options",
654 Return the additional kernel options which are added to the
655 guest kernel command line.
657 If C<NULL> then no options are added.");
659 ("set_autosync", (RErr, [Bool "autosync"]), -1, [FishAlias "autosync"],
663 If C<autosync> is true, this enables autosync. Libguestfs will make a
664 best effort attempt to run C<guestfs_umount_all> followed by
665 C<guestfs_sync> when the handle is closed
666 (also if the program exits without closing handles).
668 This is disabled by default (except in guestfish where it is
669 enabled by default).");
671 ("get_autosync", (RBool "autosync", []), -1, [],
672 [InitNone, Always, TestRun (
673 [["get_autosync"]])],
676 Get the autosync flag.");
678 ("set_verbose", (RErr, [Bool "verbose"]), -1, [FishAlias "verbose"],
682 If C<verbose> is true, this turns on verbose messages (to C<stderr>).
684 Verbose messages are disabled unless the environment variable
685 C<LIBGUESTFS_DEBUG> is defined and set to C<1>.");
687 ("get_verbose", (RBool "verbose", []), -1, [],
691 This returns the verbose messages flag.");
693 ("is_ready", (RBool "ready", []), -1, [],
694 [InitNone, Always, TestOutputTrue (
696 "is ready to accept commands",
698 This returns true iff this handle is ready to accept commands
699 (in the C<READY> state).
701 For more information on states, see L<guestfs(3)>.");
703 ("is_config", (RBool "config", []), -1, [],
704 [InitNone, Always, TestOutputFalse (
706 "is in configuration state",
708 This returns true iff this handle is being configured
709 (in the C<CONFIG> state).
711 For more information on states, see L<guestfs(3)>.");
713 ("is_launching", (RBool "launching", []), -1, [],
714 [InitNone, Always, TestOutputFalse (
715 [["is_launching"]])],
716 "is launching subprocess",
718 This returns true iff this handle is launching the subprocess
719 (in the C<LAUNCHING> state).
721 For more information on states, see L<guestfs(3)>.");
723 ("is_busy", (RBool "busy", []), -1, [],
724 [InitNone, Always, TestOutputFalse (
726 "is busy processing a command",
728 This returns true iff this handle is busy processing a command
729 (in the C<BUSY> state).
731 For more information on states, see L<guestfs(3)>.");
733 ("get_state", (RInt "state", []), -1, [],
735 "get the current state",
737 This returns the current state as an opaque integer. This is
738 only useful for printing debug and internal error messages.
740 For more information on states, see L<guestfs(3)>.");
742 ("set_memsize", (RErr, [Int "memsize"]), -1, [FishAlias "memsize"],
743 [InitNone, Always, TestOutputInt (
744 [["set_memsize"; "500"];
745 ["get_memsize"]], 500)],
746 "set memory allocated to the qemu subprocess",
748 This sets the memory size in megabytes allocated to the
749 qemu subprocess. This only has any effect if called before
752 You can also change this by setting the environment
753 variable C<LIBGUESTFS_MEMSIZE> before the handle is
756 For more information on the architecture of libguestfs,
757 see L<guestfs(3)>.");
759 ("get_memsize", (RInt "memsize", []), -1, [],
760 [InitNone, Always, TestOutputIntOp (
761 [["get_memsize"]], ">=", 256)],
762 "get memory allocated to the qemu subprocess",
764 This gets the memory size in megabytes allocated to the
767 If C<guestfs_set_memsize> was not called
768 on this handle, and if C<LIBGUESTFS_MEMSIZE> was not set,
769 then this returns the compiled-in default value for memsize.
771 For more information on the architecture of libguestfs,
772 see L<guestfs(3)>.");
774 ("get_pid", (RInt "pid", []), -1, [FishAlias "pid"],
775 [InitNone, Always, TestOutputIntOp (
776 [["get_pid"]], ">=", 1)],
777 "get PID of qemu subprocess",
779 Return the process ID of the qemu subprocess. If there is no
780 qemu subprocess, then this will return an error.
782 This is an internal call used for debugging and testing.");
784 ("version", (RStruct ("version", "version"), []), -1, [],
785 [InitNone, Always, TestOutputStruct (
786 [["version"]], [CompareWithInt ("major", 1)])],
787 "get the library version number",
789 Return the libguestfs version number that the program is linked
792 Note that because of dynamic linking this is not necessarily
793 the version of libguestfs that you compiled against. You can
794 compile the program, and then at runtime dynamically link
795 against a completely different C<libguestfs.so> library.
797 This call was added in version C<1.0.58>. In previous
798 versions of libguestfs there was no way to get the version
799 number. From C code you can use ELF weak linking tricks to find out if
800 this symbol exists (if it doesn't, then it's an earlier version).
802 The call returns a structure with four elements. The first
803 three (C<major>, C<minor> and C<release>) are numbers and
804 correspond to the usual version triplet. The fourth element
805 (C<extra>) is a string and is normally empty, but may be
806 used for distro-specific information.
808 To construct the original version string:
809 C<$major.$minor.$release$extra>
811 I<Note:> Don't use this call to test for availability
812 of features. Distro backports makes this unreliable. Use
813 C<guestfs_available> instead.");
815 ("set_selinux", (RErr, [Bool "selinux"]), -1, [FishAlias "selinux"],
816 [InitNone, Always, TestOutputTrue (
817 [["set_selinux"; "true"];
819 "set SELinux enabled or disabled at appliance boot",
821 This sets the selinux flag that is passed to the appliance
822 at boot time. The default is C<selinux=0> (disabled).
824 Note that if SELinux is enabled, it is always in
825 Permissive mode (C<enforcing=0>).
827 For more information on the architecture of libguestfs,
828 see L<guestfs(3)>.");
830 ("get_selinux", (RBool "selinux", []), -1, [],
832 "get SELinux enabled flag",
834 This returns the current setting of the selinux flag which
835 is passed to the appliance at boot time. See C<guestfs_set_selinux>.
837 For more information on the architecture of libguestfs,
838 see L<guestfs(3)>.");
840 ("set_trace", (RErr, [Bool "trace"]), -1, [FishAlias "trace"],
841 [InitNone, Always, TestOutputFalse (
842 [["set_trace"; "false"];
844 "enable or disable command traces",
846 If the command trace flag is set to 1, then commands are
847 printed on stdout before they are executed in a format
848 which is very similar to the one used by guestfish. In
849 other words, you can run a program with this enabled, and
850 you will get out a script which you can feed to guestfish
851 to perform the same set of actions.
853 If you want to trace C API calls into libguestfs (and
854 other libraries) then possibly a better way is to use
855 the external ltrace(1) command.
857 Command traces are disabled unless the environment variable
858 C<LIBGUESTFS_TRACE> is defined and set to C<1>.");
860 ("get_trace", (RBool "trace", []), -1, [],
862 "get command trace enabled flag",
864 Return the command trace flag.");
866 ("set_direct", (RErr, [Bool "direct"]), -1, [FishAlias "direct"],
867 [InitNone, Always, TestOutputFalse (
868 [["set_direct"; "false"];
870 "enable or disable direct appliance mode",
872 If the direct appliance mode flag is enabled, then stdin and
873 stdout are passed directly through to the appliance once it
876 One consequence of this is that log messages aren't caught
877 by the library and handled by C<guestfs_set_log_message_callback>,
878 but go straight to stdout.
880 You probably don't want to use this unless you know what you
883 The default is disabled.");
885 ("get_direct", (RBool "direct", []), -1, [],
887 "get direct appliance mode flag",
889 Return the direct appliance mode flag.");
891 ("set_recovery_proc", (RErr, [Bool "recoveryproc"]), -1, [FishAlias "recovery-proc"],
892 [InitNone, Always, TestOutputTrue (
893 [["set_recovery_proc"; "true"];
894 ["get_recovery_proc"]])],
895 "enable or disable the recovery process",
897 If this is called with the parameter C<false> then
898 C<guestfs_launch> does not create a recovery process. The
899 purpose of the recovery process is to stop runaway qemu
900 processes in the case where the main program aborts abruptly.
902 This only has any effect if called before C<guestfs_launch>,
903 and the default is true.
905 About the only time when you would want to disable this is
906 if the main process will fork itself into the background
907 (\"daemonize\" itself). In this case the recovery process
908 thinks that the main program has disappeared and so kills
909 qemu, which is not very helpful.");
911 ("get_recovery_proc", (RBool "recoveryproc", []), -1, [],
913 "get recovery process enabled flag",
915 Return the recovery process enabled flag.");
917 ("add_drive_with_if", (RErr, [String "filename"; String "iface"]), -1, [],
919 "add a drive specifying the QEMU block emulation to use",
921 This is the same as C<guestfs_add_drive> but it allows you
922 to specify the QEMU interface emulation to use at run time.");
924 ("add_drive_ro_with_if", (RErr, [String "filename"; String "iface"]), -1, [],
926 "add a drive read-only specifying the QEMU block emulation to use",
928 This is the same as C<guestfs_add_drive_ro> but it allows you
929 to specify the QEMU interface emulation to use at run time.");
933 (* daemon_functions are any functions which cause some action
934 * to take place in the daemon.
937 let daemon_functions = [
938 ("mount", (RErr, [Device "device"; String "mountpoint"]), 1, [],
939 [InitEmpty, Always, TestOutput (
940 [["part_disk"; "/dev/sda"; "mbr"];
941 ["mkfs"; "ext2"; "/dev/sda1"];
942 ["mount"; "/dev/sda1"; "/"];
943 ["write_file"; "/new"; "new file contents"; "0"];
944 ["cat"; "/new"]], "new file contents")],
945 "mount a guest disk at a position in the filesystem",
947 Mount a guest disk at a position in the filesystem. Block devices
948 are named C</dev/sda>, C</dev/sdb> and so on, as they were added to
949 the guest. If those block devices contain partitions, they will have
950 the usual names (eg. C</dev/sda1>). Also LVM C</dev/VG/LV>-style
953 The rules are the same as for L<mount(2)>: A filesystem must
954 first be mounted on C</> before others can be mounted. Other
955 filesystems can only be mounted on directories which already
958 The mounted filesystem is writable, if we have sufficient permissions
959 on the underlying device.
962 When you use this call, the filesystem options C<sync> and C<noatime>
963 are set implicitly. This was originally done because we thought it
964 would improve reliability, but it turns out that I<-o sync> has a
965 very large negative performance impact and negligible effect on
966 reliability. Therefore we recommend that you avoid using
967 C<guestfs_mount> in any code that needs performance, and instead
968 use C<guestfs_mount_options> (use an empty string for the first
969 parameter if you don't want any options).");
971 ("sync", (RErr, []), 2, [],
972 [ InitEmpty, Always, TestRun [["sync"]]],
973 "sync disks, writes are flushed through to the disk image",
975 This syncs the disk, so that any writes are flushed through to the
976 underlying disk image.
978 You should always call this if you have modified a disk image, before
979 closing the handle.");
981 ("touch", (RErr, [Pathname "path"]), 3, [],
982 [InitBasicFS, Always, TestOutputTrue (
984 ["exists"; "/new"]])],
985 "update file timestamps or create a new file",
987 Touch acts like the L<touch(1)> command. It can be used to
988 update the timestamps on a file, or, if the file does not exist,
989 to create a new zero-length file.");
991 ("cat", (RString "content", [Pathname "path"]), 4, [ProtocolLimitWarning],
992 [InitISOFS, Always, TestOutput (
993 [["cat"; "/known-2"]], "abcdef\n")],
994 "list the contents of a file",
996 Return the contents of the file named C<path>.
998 Note that this function cannot correctly handle binary files
999 (specifically, files containing C<\\0> character which is treated
1000 as end of string). For those you need to use the C<guestfs_read_file>
1001 or C<guestfs_download> functions which have a more complex interface.");
1003 ("ll", (RString "listing", [Pathname "directory"]), 5, [],
1004 [], (* XXX Tricky to test because it depends on the exact format
1005 * of the 'ls -l' command, which changes between F10 and F11.
1007 "list the files in a directory (long format)",
1009 List the files in C<directory> (relative to the root directory,
1010 there is no cwd) in the format of 'ls -la'.
1012 This command is mostly useful for interactive sessions. It
1013 is I<not> intended that you try to parse the output string.");
1015 ("ls", (RStringList "listing", [Pathname "directory"]), 6, [],
1016 [InitBasicFS, Always, TestOutputList (
1018 ["touch"; "/newer"];
1019 ["touch"; "/newest"];
1020 ["ls"; "/"]], ["lost+found"; "new"; "newer"; "newest"])],
1021 "list the files in a directory",
1023 List the files in C<directory> (relative to the root directory,
1024 there is no cwd). The '.' and '..' entries are not returned, but
1025 hidden files are shown.
1027 This command is mostly useful for interactive sessions. Programs
1028 should probably use C<guestfs_readdir> instead.");
1030 ("list_devices", (RStringList "devices", []), 7, [],
1031 [InitEmpty, Always, TestOutputListOfDevices (
1032 [["list_devices"]], ["/dev/sda"; "/dev/sdb"; "/dev/sdc"; "/dev/sdd"])],
1033 "list the block devices",
1035 List all the block devices.
1037 The full block device names are returned, eg. C</dev/sda>");
1039 ("list_partitions", (RStringList "partitions", []), 8, [],
1040 [InitBasicFS, Always, TestOutputListOfDevices (
1041 [["list_partitions"]], ["/dev/sda1"]);
1042 InitEmpty, Always, TestOutputListOfDevices (
1043 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1044 ["list_partitions"]], ["/dev/sda1"; "/dev/sda2"; "/dev/sda3"])],
1045 "list the partitions",
1047 List all the partitions detected on all block devices.
1049 The full partition device names are returned, eg. C</dev/sda1>
1051 This does not return logical volumes. For that you will need to
1052 call C<guestfs_lvs>.");
1054 ("pvs", (RStringList "physvols", []), 9, [Optional "lvm2"],
1055 [InitBasicFSonLVM, Always, TestOutputListOfDevices (
1056 [["pvs"]], ["/dev/sda1"]);
1057 InitEmpty, Always, TestOutputListOfDevices (
1058 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1059 ["pvcreate"; "/dev/sda1"];
1060 ["pvcreate"; "/dev/sda2"];
1061 ["pvcreate"; "/dev/sda3"];
1062 ["pvs"]], ["/dev/sda1"; "/dev/sda2"; "/dev/sda3"])],
1063 "list the LVM physical volumes (PVs)",
1065 List all the physical volumes detected. This is the equivalent
1066 of the L<pvs(8)> command.
1068 This returns a list of just the device names that contain
1069 PVs (eg. C</dev/sda2>).
1071 See also C<guestfs_pvs_full>.");
1073 ("vgs", (RStringList "volgroups", []), 10, [Optional "lvm2"],
1074 [InitBasicFSonLVM, Always, TestOutputList (
1076 InitEmpty, Always, TestOutputList (
1077 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1078 ["pvcreate"; "/dev/sda1"];
1079 ["pvcreate"; "/dev/sda2"];
1080 ["pvcreate"; "/dev/sda3"];
1081 ["vgcreate"; "VG1"; "/dev/sda1 /dev/sda2"];
1082 ["vgcreate"; "VG2"; "/dev/sda3"];
1083 ["vgs"]], ["VG1"; "VG2"])],
1084 "list the LVM volume groups (VGs)",
1086 List all the volumes groups detected. This is the equivalent
1087 of the L<vgs(8)> command.
1089 This returns a list of just the volume group names that were
1090 detected (eg. C<VolGroup00>).
1092 See also C<guestfs_vgs_full>.");
1094 ("lvs", (RStringList "logvols", []), 11, [Optional "lvm2"],
1095 [InitBasicFSonLVM, Always, TestOutputList (
1096 [["lvs"]], ["/dev/VG/LV"]);
1097 InitEmpty, Always, TestOutputList (
1098 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1099 ["pvcreate"; "/dev/sda1"];
1100 ["pvcreate"; "/dev/sda2"];
1101 ["pvcreate"; "/dev/sda3"];
1102 ["vgcreate"; "VG1"; "/dev/sda1 /dev/sda2"];
1103 ["vgcreate"; "VG2"; "/dev/sda3"];
1104 ["lvcreate"; "LV1"; "VG1"; "50"];
1105 ["lvcreate"; "LV2"; "VG1"; "50"];
1106 ["lvcreate"; "LV3"; "VG2"; "50"];
1107 ["lvs"]], ["/dev/VG1/LV1"; "/dev/VG1/LV2"; "/dev/VG2/LV3"])],
1108 "list the LVM logical volumes (LVs)",
1110 List all the logical volumes detected. This is the equivalent
1111 of the L<lvs(8)> command.
1113 This returns a list of the logical volume device names
1114 (eg. C</dev/VolGroup00/LogVol00>).
1116 See also C<guestfs_lvs_full>.");
1118 ("pvs_full", (RStructList ("physvols", "lvm_pv"), []), 12, [Optional "lvm2"],
1119 [], (* XXX how to test? *)
1120 "list the LVM physical volumes (PVs)",
1122 List all the physical volumes detected. This is the equivalent
1123 of the L<pvs(8)> command. The \"full\" version includes all fields.");
1125 ("vgs_full", (RStructList ("volgroups", "lvm_vg"), []), 13, [Optional "lvm2"],
1126 [], (* XXX how to test? *)
1127 "list the LVM volume groups (VGs)",
1129 List all the volumes groups detected. This is the equivalent
1130 of the L<vgs(8)> command. The \"full\" version includes all fields.");
1132 ("lvs_full", (RStructList ("logvols", "lvm_lv"), []), 14, [Optional "lvm2"],
1133 [], (* XXX how to test? *)
1134 "list the LVM logical volumes (LVs)",
1136 List all the logical volumes detected. This is the equivalent
1137 of the L<lvs(8)> command. The \"full\" version includes all fields.");
1139 ("read_lines", (RStringList "lines", [Pathname "path"]), 15, [],
1140 [InitISOFS, Always, TestOutputList (
1141 [["read_lines"; "/known-4"]], ["abc"; "def"; "ghi"]);
1142 InitISOFS, Always, TestOutputList (
1143 [["read_lines"; "/empty"]], [])],
1144 "read file as lines",
1146 Return the contents of the file named C<path>.
1148 The file contents are returned as a list of lines. Trailing
1149 C<LF> and C<CRLF> character sequences are I<not> returned.
1151 Note that this function cannot correctly handle binary files
1152 (specifically, files containing C<\\0> character which is treated
1153 as end of line). For those you need to use the C<guestfs_read_file>
1154 function which has a more complex interface.");
1156 ("aug_init", (RErr, [Pathname "root"; Int "flags"]), 16, [Optional "augeas"],
1157 [], (* XXX Augeas code needs tests. *)
1158 "create a new Augeas handle",
1160 Create a new Augeas handle for editing configuration files.
1161 If there was any previous Augeas handle associated with this
1162 guestfs session, then it is closed.
1164 You must call this before using any other C<guestfs_aug_*>
1167 C<root> is the filesystem root. C<root> must not be NULL,
1170 The flags are the same as the flags defined in
1171 E<lt>augeas.hE<gt>, the logical I<or> of the following
1176 =item C<AUG_SAVE_BACKUP> = 1
1178 Keep the original file with a C<.augsave> extension.
1180 =item C<AUG_SAVE_NEWFILE> = 2
1182 Save changes into a file with extension C<.augnew>, and
1183 do not overwrite original. Overrides C<AUG_SAVE_BACKUP>.
1185 =item C<AUG_TYPE_CHECK> = 4
1187 Typecheck lenses (can be expensive).
1189 =item C<AUG_NO_STDINC> = 8
1191 Do not use standard load path for modules.
1193 =item C<AUG_SAVE_NOOP> = 16
1195 Make save a no-op, just record what would have been changed.
1197 =item C<AUG_NO_LOAD> = 32
1199 Do not load the tree in C<guestfs_aug_init>.
1203 To close the handle, you can call C<guestfs_aug_close>.
1205 To find out more about Augeas, see L<http://augeas.net/>.");
1207 ("aug_close", (RErr, []), 26, [Optional "augeas"],
1208 [], (* XXX Augeas code needs tests. *)
1209 "close the current Augeas handle",
1211 Close the current Augeas handle and free up any resources
1212 used by it. After calling this, you have to call
1213 C<guestfs_aug_init> again before you can use any other
1214 Augeas functions.");
1216 ("aug_defvar", (RInt "nrnodes", [String "name"; OptString "expr"]), 17, [Optional "augeas"],
1217 [], (* XXX Augeas code needs tests. *)
1218 "define an Augeas variable",
1220 Defines an Augeas variable C<name> whose value is the result
1221 of evaluating C<expr>. If C<expr> is NULL, then C<name> is
1224 On success this returns the number of nodes in C<expr>, or
1225 C<0> if C<expr> evaluates to something which is not a nodeset.");
1227 ("aug_defnode", (RStruct ("nrnodescreated", "int_bool"), [String "name"; String "expr"; String "val"]), 18, [Optional "augeas"],
1228 [], (* XXX Augeas code needs tests. *)
1229 "define an Augeas node",
1231 Defines a variable C<name> whose value is the result of
1234 If C<expr> evaluates to an empty nodeset, a node is created,
1235 equivalent to calling C<guestfs_aug_set> C<expr>, C<value>.
1236 C<name> will be the nodeset containing that single node.
1238 On success this returns a pair containing the
1239 number of nodes in the nodeset, and a boolean flag
1240 if a node was created.");
1242 ("aug_get", (RString "val", [String "augpath"]), 19, [Optional "augeas"],
1243 [], (* XXX Augeas code needs tests. *)
1244 "look up the value of an Augeas path",
1246 Look up the value associated with C<path>. If C<path>
1247 matches exactly one node, the C<value> is returned.");
1249 ("aug_set", (RErr, [String "augpath"; String "val"]), 20, [Optional "augeas"],
1250 [], (* XXX Augeas code needs tests. *)
1251 "set Augeas path to value",
1253 Set the value associated with C<path> to C<val>.
1255 In the Augeas API, it is possible to clear a node by setting
1256 the value to NULL. Due to an oversight in the libguestfs API
1257 you cannot do that with this call. Instead you must use the
1258 C<guestfs_aug_clear> call.");
1260 ("aug_insert", (RErr, [String "augpath"; String "label"; Bool "before"]), 21, [Optional "augeas"],
1261 [], (* XXX Augeas code needs tests. *)
1262 "insert a sibling Augeas node",
1264 Create a new sibling C<label> for C<path>, inserting it into
1265 the tree before or after C<path> (depending on the boolean
1268 C<path> must match exactly one existing node in the tree, and
1269 C<label> must be a label, ie. not contain C</>, C<*> or end
1270 with a bracketed index C<[N]>.");
1272 ("aug_rm", (RInt "nrnodes", [String "augpath"]), 22, [Optional "augeas"],
1273 [], (* XXX Augeas code needs tests. *)
1274 "remove an Augeas path",
1276 Remove C<path> and all of its children.
1278 On success this returns the number of entries which were removed.");
1280 ("aug_mv", (RErr, [String "src"; String "dest"]), 23, [Optional "augeas"],
1281 [], (* XXX Augeas code needs tests. *)
1284 Move the node C<src> to C<dest>. C<src> must match exactly
1285 one node. C<dest> is overwritten if it exists.");
1287 ("aug_match", (RStringList "matches", [String "augpath"]), 24, [Optional "augeas"],
1288 [], (* XXX Augeas code needs tests. *)
1289 "return Augeas nodes which match augpath",
1291 Returns a list of paths which match the path expression C<path>.
1292 The returned paths are sufficiently qualified so that they match
1293 exactly one node in the current tree.");
1295 ("aug_save", (RErr, []), 25, [Optional "augeas"],
1296 [], (* XXX Augeas code needs tests. *)
1297 "write all pending Augeas changes to disk",
1299 This writes all pending changes to disk.
1301 The flags which were passed to C<guestfs_aug_init> affect exactly
1302 how files are saved.");
1304 ("aug_load", (RErr, []), 27, [Optional "augeas"],
1305 [], (* XXX Augeas code needs tests. *)
1306 "load files into the tree",
1308 Load files into the tree.
1310 See C<aug_load> in the Augeas documentation for the full gory
1313 ("aug_ls", (RStringList "matches", [String "augpath"]), 28, [Optional "augeas"],
1314 [], (* XXX Augeas code needs tests. *)
1315 "list Augeas nodes under augpath",
1317 This is just a shortcut for listing C<guestfs_aug_match>
1318 C<path/*> and sorting the resulting nodes into alphabetical order.");
1320 ("rm", (RErr, [Pathname "path"]), 29, [],
1321 [InitBasicFS, Always, TestRun
1324 InitBasicFS, Always, TestLastFail
1326 InitBasicFS, Always, TestLastFail
1331 Remove the single file C<path>.");
1333 ("rmdir", (RErr, [Pathname "path"]), 30, [],
1334 [InitBasicFS, Always, TestRun
1337 InitBasicFS, Always, TestLastFail
1338 [["rmdir"; "/new"]];
1339 InitBasicFS, Always, TestLastFail
1341 ["rmdir"; "/new"]]],
1342 "remove a directory",
1344 Remove the single directory C<path>.");
1346 ("rm_rf", (RErr, [Pathname "path"]), 31, [],
1347 [InitBasicFS, Always, TestOutputFalse
1349 ["mkdir"; "/new/foo"];
1350 ["touch"; "/new/foo/bar"];
1352 ["exists"; "/new"]]],
1353 "remove a file or directory recursively",
1355 Remove the file or directory C<path>, recursively removing the
1356 contents if its a directory. This is like the C<rm -rf> shell
1359 ("mkdir", (RErr, [Pathname "path"]), 32, [],
1360 [InitBasicFS, Always, TestOutputTrue
1362 ["is_dir"; "/new"]];
1363 InitBasicFS, Always, TestLastFail
1364 [["mkdir"; "/new/foo/bar"]]],
1365 "create a directory",
1367 Create a directory named C<path>.");
1369 ("mkdir_p", (RErr, [Pathname "path"]), 33, [],
1370 [InitBasicFS, Always, TestOutputTrue
1371 [["mkdir_p"; "/new/foo/bar"];
1372 ["is_dir"; "/new/foo/bar"]];
1373 InitBasicFS, Always, TestOutputTrue
1374 [["mkdir_p"; "/new/foo/bar"];
1375 ["is_dir"; "/new/foo"]];
1376 InitBasicFS, Always, TestOutputTrue
1377 [["mkdir_p"; "/new/foo/bar"];
1378 ["is_dir"; "/new"]];
1379 (* Regression tests for RHBZ#503133: *)
1380 InitBasicFS, Always, TestRun
1382 ["mkdir_p"; "/new"]];
1383 InitBasicFS, Always, TestLastFail
1385 ["mkdir_p"; "/new"]]],
1386 "create a directory and parents",
1388 Create a directory named C<path>, creating any parent directories
1389 as necessary. This is like the C<mkdir -p> shell command.");
1391 ("chmod", (RErr, [Int "mode"; Pathname "path"]), 34, [],
1392 [], (* XXX Need stat command to test *)
1395 Change the mode (permissions) of C<path> to C<mode>. Only
1396 numeric modes are supported.
1398 I<Note>: When using this command from guestfish, C<mode>
1399 by default would be decimal, unless you prefix it with
1400 C<0> to get octal, ie. use C<0700> not C<700>.
1402 The mode actually set is affected by the umask.");
1404 ("chown", (RErr, [Int "owner"; Int "group"; Pathname "path"]), 35, [],
1405 [], (* XXX Need stat command to test *)
1406 "change file owner and group",
1408 Change the file owner to C<owner> and group to C<group>.
1410 Only numeric uid and gid are supported. If you want to use
1411 names, you will need to locate and parse the password file
1412 yourself (Augeas support makes this relatively easy).");
1414 ("exists", (RBool "existsflag", [Pathname "path"]), 36, [],
1415 [InitISOFS, Always, TestOutputTrue (
1416 [["exists"; "/empty"]]);
1417 InitISOFS, Always, TestOutputTrue (
1418 [["exists"; "/directory"]])],
1419 "test if file or directory exists",
1421 This returns C<true> if and only if there is a file, directory
1422 (or anything) with the given C<path> name.
1424 See also C<guestfs_is_file>, C<guestfs_is_dir>, C<guestfs_stat>.");
1426 ("is_file", (RBool "fileflag", [Pathname "path"]), 37, [],
1427 [InitISOFS, Always, TestOutputTrue (
1428 [["is_file"; "/known-1"]]);
1429 InitISOFS, Always, TestOutputFalse (
1430 [["is_file"; "/directory"]])],
1431 "test if file exists",
1433 This returns C<true> if and only if there is a file
1434 with the given C<path> name. Note that it returns false for
1435 other objects like directories.
1437 See also C<guestfs_stat>.");
1439 ("is_dir", (RBool "dirflag", [Pathname "path"]), 38, [],
1440 [InitISOFS, Always, TestOutputFalse (
1441 [["is_dir"; "/known-3"]]);
1442 InitISOFS, Always, TestOutputTrue (
1443 [["is_dir"; "/directory"]])],
1444 "test if file exists",
1446 This returns C<true> if and only if there is a directory
1447 with the given C<path> name. Note that it returns false for
1448 other objects like files.
1450 See also C<guestfs_stat>.");
1452 ("pvcreate", (RErr, [Device "device"]), 39, [Optional "lvm2"],
1453 [InitEmpty, Always, TestOutputListOfDevices (
1454 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1455 ["pvcreate"; "/dev/sda1"];
1456 ["pvcreate"; "/dev/sda2"];
1457 ["pvcreate"; "/dev/sda3"];
1458 ["pvs"]], ["/dev/sda1"; "/dev/sda2"; "/dev/sda3"])],
1459 "create an LVM physical volume",
1461 This creates an LVM physical volume on the named C<device>,
1462 where C<device> should usually be a partition name such
1465 ("vgcreate", (RErr, [String "volgroup"; DeviceList "physvols"]), 40, [Optional "lvm2"],
1466 [InitEmpty, Always, TestOutputList (
1467 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1468 ["pvcreate"; "/dev/sda1"];
1469 ["pvcreate"; "/dev/sda2"];
1470 ["pvcreate"; "/dev/sda3"];
1471 ["vgcreate"; "VG1"; "/dev/sda1 /dev/sda2"];
1472 ["vgcreate"; "VG2"; "/dev/sda3"];
1473 ["vgs"]], ["VG1"; "VG2"])],
1474 "create an LVM volume group",
1476 This creates an LVM volume group called C<volgroup>
1477 from the non-empty list of physical volumes C<physvols>.");
1479 ("lvcreate", (RErr, [String "logvol"; String "volgroup"; Int "mbytes"]), 41, [Optional "lvm2"],
1480 [InitEmpty, Always, TestOutputList (
1481 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1482 ["pvcreate"; "/dev/sda1"];
1483 ["pvcreate"; "/dev/sda2"];
1484 ["pvcreate"; "/dev/sda3"];
1485 ["vgcreate"; "VG1"; "/dev/sda1 /dev/sda2"];
1486 ["vgcreate"; "VG2"; "/dev/sda3"];
1487 ["lvcreate"; "LV1"; "VG1"; "50"];
1488 ["lvcreate"; "LV2"; "VG1"; "50"];
1489 ["lvcreate"; "LV3"; "VG2"; "50"];
1490 ["lvcreate"; "LV4"; "VG2"; "50"];
1491 ["lvcreate"; "LV5"; "VG2"; "50"];
1493 ["/dev/VG1/LV1"; "/dev/VG1/LV2";
1494 "/dev/VG2/LV3"; "/dev/VG2/LV4"; "/dev/VG2/LV5"])],
1495 "create an LVM logical volume",
1497 This creates an LVM logical volume called C<logvol>
1498 on the volume group C<volgroup>, with C<size> megabytes.");
1500 ("mkfs", (RErr, [String "fstype"; Device "device"]), 42, [],
1501 [InitEmpty, Always, TestOutput (
1502 [["part_disk"; "/dev/sda"; "mbr"];
1503 ["mkfs"; "ext2"; "/dev/sda1"];
1504 ["mount_options"; ""; "/dev/sda1"; "/"];
1505 ["write_file"; "/new"; "new file contents"; "0"];
1506 ["cat"; "/new"]], "new file contents")],
1507 "make a filesystem",
1509 This creates a filesystem on C<device> (usually a partition
1510 or LVM logical volume). The filesystem type is C<fstype>, for
1513 ("sfdisk", (RErr, [Device "device";
1514 Int "cyls"; Int "heads"; Int "sectors";
1515 StringList "lines"]), 43, [DangerWillRobinson],
1517 "create partitions on a block device",
1519 This is a direct interface to the L<sfdisk(8)> program for creating
1520 partitions on block devices.
1522 C<device> should be a block device, for example C</dev/sda>.
1524 C<cyls>, C<heads> and C<sectors> are the number of cylinders, heads
1525 and sectors on the device, which are passed directly to sfdisk as
1526 the I<-C>, I<-H> and I<-S> parameters. If you pass C<0> for any
1527 of these, then the corresponding parameter is omitted. Usually for
1528 'large' disks, you can just pass C<0> for these, but for small
1529 (floppy-sized) disks, sfdisk (or rather, the kernel) cannot work
1530 out the right geometry and you will need to tell it.
1532 C<lines> is a list of lines that we feed to C<sfdisk>. For more
1533 information refer to the L<sfdisk(8)> manpage.
1535 To create a single partition occupying the whole disk, you would
1536 pass C<lines> as a single element list, when the single element being
1537 the string C<,> (comma).
1539 See also: C<guestfs_sfdisk_l>, C<guestfs_sfdisk_N>,
1540 C<guestfs_part_init>");
1542 ("write_file", (RErr, [Pathname "path"; String "content"; Int "size"]), 44, [ProtocolLimitWarning],
1543 [InitBasicFS, Always, TestOutput (
1544 [["write_file"; "/new"; "new file contents"; "0"];
1545 ["cat"; "/new"]], "new file contents");
1546 InitBasicFS, Always, TestOutput (
1547 [["write_file"; "/new"; "\nnew file contents\n"; "0"];
1548 ["cat"; "/new"]], "\nnew file contents\n");
1549 InitBasicFS, Always, TestOutput (
1550 [["write_file"; "/new"; "\n\n"; "0"];
1551 ["cat"; "/new"]], "\n\n");
1552 InitBasicFS, Always, TestOutput (
1553 [["write_file"; "/new"; ""; "0"];
1554 ["cat"; "/new"]], "");
1555 InitBasicFS, Always, TestOutput (
1556 [["write_file"; "/new"; "\n\n\n"; "0"];
1557 ["cat"; "/new"]], "\n\n\n");
1558 InitBasicFS, Always, TestOutput (
1559 [["write_file"; "/new"; "\n"; "0"];
1560 ["cat"; "/new"]], "\n")],
1563 This call creates a file called C<path>. The contents of the
1564 file is the string C<content> (which can contain any 8 bit data),
1565 with length C<size>.
1567 As a special case, if C<size> is C<0>
1568 then the length is calculated using C<strlen> (so in this case
1569 the content cannot contain embedded ASCII NULs).
1571 I<NB.> Owing to a bug, writing content containing ASCII NUL
1572 characters does I<not> work, even if the length is specified.
1573 We hope to resolve this bug in a future version. In the meantime
1574 use C<guestfs_upload>.");
1576 ("umount", (RErr, [String "pathordevice"]), 45, [FishAlias "unmount"],
1577 [InitEmpty, Always, TestOutputListOfDevices (
1578 [["part_disk"; "/dev/sda"; "mbr"];
1579 ["mkfs"; "ext2"; "/dev/sda1"];
1580 ["mount_options"; ""; "/dev/sda1"; "/"];
1581 ["mounts"]], ["/dev/sda1"]);
1582 InitEmpty, Always, TestOutputList (
1583 [["part_disk"; "/dev/sda"; "mbr"];
1584 ["mkfs"; "ext2"; "/dev/sda1"];
1585 ["mount_options"; ""; "/dev/sda1"; "/"];
1588 "unmount a filesystem",
1590 This unmounts the given filesystem. The filesystem may be
1591 specified either by its mountpoint (path) or the device which
1592 contains the filesystem.");
1594 ("mounts", (RStringList "devices", []), 46, [],
1595 [InitBasicFS, Always, TestOutputListOfDevices (
1596 [["mounts"]], ["/dev/sda1"])],
1597 "show mounted filesystems",
1599 This returns the list of currently mounted filesystems. It returns
1600 the list of devices (eg. C</dev/sda1>, C</dev/VG/LV>).
1602 Some internal mounts are not shown.
1604 See also: C<guestfs_mountpoints>");
1606 ("umount_all", (RErr, []), 47, [FishAlias "unmount-all"],
1607 [InitBasicFS, Always, TestOutputList (
1610 (* check that umount_all can unmount nested mounts correctly: *)
1611 InitEmpty, Always, TestOutputList (
1612 [["sfdiskM"; "/dev/sda"; ",100 ,200 ,"];
1613 ["mkfs"; "ext2"; "/dev/sda1"];
1614 ["mkfs"; "ext2"; "/dev/sda2"];
1615 ["mkfs"; "ext2"; "/dev/sda3"];
1616 ["mount_options"; ""; "/dev/sda1"; "/"];
1618 ["mount_options"; ""; "/dev/sda2"; "/mp1"];
1619 ["mkdir"; "/mp1/mp2"];
1620 ["mount_options"; ""; "/dev/sda3"; "/mp1/mp2"];
1621 ["mkdir"; "/mp1/mp2/mp3"];
1624 "unmount all filesystems",
1626 This unmounts all mounted filesystems.
1628 Some internal mounts are not unmounted by this call.");
1630 ("lvm_remove_all", (RErr, []), 48, [DangerWillRobinson; Optional "lvm2"],
1632 "remove all LVM LVs, VGs and PVs",
1634 This command removes all LVM logical volumes, volume groups
1635 and physical volumes.");
1637 ("file", (RString "description", [Dev_or_Path "path"]), 49, [],
1638 [InitISOFS, Always, TestOutput (
1639 [["file"; "/empty"]], "empty");
1640 InitISOFS, Always, TestOutput (
1641 [["file"; "/known-1"]], "ASCII text");
1642 InitISOFS, Always, TestLastFail (
1643 [["file"; "/notexists"]])],
1644 "determine file type",
1646 This call uses the standard L<file(1)> command to determine
1647 the type or contents of the file. This also works on devices,
1648 for example to find out whether a partition contains a filesystem.
1650 This call will also transparently look inside various types
1653 The exact command which runs is C<file -zbsL path>. Note in
1654 particular that the filename is not prepended to the output
1655 (the C<-b> option).");
1657 ("command", (RString "output", [StringList "arguments"]), 50, [ProtocolLimitWarning],
1658 [InitBasicFS, Always, TestOutput (
1659 [["upload"; "test-command"; "/test-command"];
1660 ["chmod"; "0o755"; "/test-command"];
1661 ["command"; "/test-command 1"]], "Result1");
1662 InitBasicFS, Always, TestOutput (
1663 [["upload"; "test-command"; "/test-command"];
1664 ["chmod"; "0o755"; "/test-command"];
1665 ["command"; "/test-command 2"]], "Result2\n");
1666 InitBasicFS, Always, TestOutput (
1667 [["upload"; "test-command"; "/test-command"];
1668 ["chmod"; "0o755"; "/test-command"];
1669 ["command"; "/test-command 3"]], "\nResult3");
1670 InitBasicFS, Always, TestOutput (
1671 [["upload"; "test-command"; "/test-command"];
1672 ["chmod"; "0o755"; "/test-command"];
1673 ["command"; "/test-command 4"]], "\nResult4\n");
1674 InitBasicFS, Always, TestOutput (
1675 [["upload"; "test-command"; "/test-command"];
1676 ["chmod"; "0o755"; "/test-command"];
1677 ["command"; "/test-command 5"]], "\nResult5\n\n");
1678 InitBasicFS, Always, TestOutput (
1679 [["upload"; "test-command"; "/test-command"];
1680 ["chmod"; "0o755"; "/test-command"];
1681 ["command"; "/test-command 6"]], "\n\nResult6\n\n");
1682 InitBasicFS, Always, TestOutput (
1683 [["upload"; "test-command"; "/test-command"];
1684 ["chmod"; "0o755"; "/test-command"];
1685 ["command"; "/test-command 7"]], "");
1686 InitBasicFS, Always, TestOutput (
1687 [["upload"; "test-command"; "/test-command"];
1688 ["chmod"; "0o755"; "/test-command"];
1689 ["command"; "/test-command 8"]], "\n");
1690 InitBasicFS, Always, TestOutput (
1691 [["upload"; "test-command"; "/test-command"];
1692 ["chmod"; "0o755"; "/test-command"];
1693 ["command"; "/test-command 9"]], "\n\n");
1694 InitBasicFS, Always, TestOutput (
1695 [["upload"; "test-command"; "/test-command"];
1696 ["chmod"; "0o755"; "/test-command"];
1697 ["command"; "/test-command 10"]], "Result10-1\nResult10-2\n");
1698 InitBasicFS, Always, TestOutput (
1699 [["upload"; "test-command"; "/test-command"];
1700 ["chmod"; "0o755"; "/test-command"];
1701 ["command"; "/test-command 11"]], "Result11-1\nResult11-2");
1702 InitBasicFS, Always, TestLastFail (
1703 [["upload"; "test-command"; "/test-command"];
1704 ["chmod"; "0o755"; "/test-command"];
1705 ["command"; "/test-command"]])],
1706 "run a command from the guest filesystem",
1708 This call runs a command from the guest filesystem. The
1709 filesystem must be mounted, and must contain a compatible
1710 operating system (ie. something Linux, with the same
1711 or compatible processor architecture).
1713 The single parameter is an argv-style list of arguments.
1714 The first element is the name of the program to run.
1715 Subsequent elements are parameters. The list must be
1716 non-empty (ie. must contain a program name). Note that
1717 the command runs directly, and is I<not> invoked via
1718 the shell (see C<guestfs_sh>).
1720 The return value is anything printed to I<stdout> by
1723 If the command returns a non-zero exit status, then
1724 this function returns an error message. The error message
1725 string is the content of I<stderr> from the command.
1727 The C<$PATH> environment variable will contain at least
1728 C</usr/bin> and C</bin>. If you require a program from
1729 another location, you should provide the full path in the
1732 Shared libraries and data files required by the program
1733 must be available on filesystems which are mounted in the
1734 correct places. It is the caller's responsibility to ensure
1735 all filesystems that are needed are mounted at the right
1738 ("command_lines", (RStringList "lines", [StringList "arguments"]), 51, [ProtocolLimitWarning],
1739 [InitBasicFS, Always, TestOutputList (
1740 [["upload"; "test-command"; "/test-command"];
1741 ["chmod"; "0o755"; "/test-command"];
1742 ["command_lines"; "/test-command 1"]], ["Result1"]);
1743 InitBasicFS, Always, TestOutputList (
1744 [["upload"; "test-command"; "/test-command"];
1745 ["chmod"; "0o755"; "/test-command"];
1746 ["command_lines"; "/test-command 2"]], ["Result2"]);
1747 InitBasicFS, Always, TestOutputList (
1748 [["upload"; "test-command"; "/test-command"];
1749 ["chmod"; "0o755"; "/test-command"];
1750 ["command_lines"; "/test-command 3"]], ["";"Result3"]);
1751 InitBasicFS, Always, TestOutputList (
1752 [["upload"; "test-command"; "/test-command"];
1753 ["chmod"; "0o755"; "/test-command"];
1754 ["command_lines"; "/test-command 4"]], ["";"Result4"]);
1755 InitBasicFS, Always, TestOutputList (
1756 [["upload"; "test-command"; "/test-command"];
1757 ["chmod"; "0o755"; "/test-command"];
1758 ["command_lines"; "/test-command 5"]], ["";"Result5";""]);
1759 InitBasicFS, Always, TestOutputList (
1760 [["upload"; "test-command"; "/test-command"];
1761 ["chmod"; "0o755"; "/test-command"];
1762 ["command_lines"; "/test-command 6"]], ["";"";"Result6";""]);
1763 InitBasicFS, Always, TestOutputList (
1764 [["upload"; "test-command"; "/test-command"];
1765 ["chmod"; "0o755"; "/test-command"];
1766 ["command_lines"; "/test-command 7"]], []);
1767 InitBasicFS, Always, TestOutputList (
1768 [["upload"; "test-command"; "/test-command"];
1769 ["chmod"; "0o755"; "/test-command"];
1770 ["command_lines"; "/test-command 8"]], [""]);
1771 InitBasicFS, Always, TestOutputList (
1772 [["upload"; "test-command"; "/test-command"];
1773 ["chmod"; "0o755"; "/test-command"];
1774 ["command_lines"; "/test-command 9"]], ["";""]);
1775 InitBasicFS, Always, TestOutputList (
1776 [["upload"; "test-command"; "/test-command"];
1777 ["chmod"; "0o755"; "/test-command"];
1778 ["command_lines"; "/test-command 10"]], ["Result10-1";"Result10-2"]);
1779 InitBasicFS, Always, TestOutputList (
1780 [["upload"; "test-command"; "/test-command"];
1781 ["chmod"; "0o755"; "/test-command"];
1782 ["command_lines"; "/test-command 11"]], ["Result11-1";"Result11-2"])],
1783 "run a command, returning lines",
1785 This is the same as C<guestfs_command>, but splits the
1786 result into a list of lines.
1788 See also: C<guestfs_sh_lines>");
1790 ("stat", (RStruct ("statbuf", "stat"), [Pathname "path"]), 52, [],
1791 [InitISOFS, Always, TestOutputStruct (
1792 [["stat"; "/empty"]], [CompareWithInt ("size", 0)])],
1793 "get file information",
1795 Returns file information for the given C<path>.
1797 This is the same as the C<stat(2)> system call.");
1799 ("lstat", (RStruct ("statbuf", "stat"), [Pathname "path"]), 53, [],
1800 [InitISOFS, Always, TestOutputStruct (
1801 [["lstat"; "/empty"]], [CompareWithInt ("size", 0)])],
1802 "get file information for a symbolic link",
1804 Returns file information for the given C<path>.
1806 This is the same as C<guestfs_stat> except that if C<path>
1807 is a symbolic link, then the link is stat-ed, not the file it
1810 This is the same as the C<lstat(2)> system call.");
1812 ("statvfs", (RStruct ("statbuf", "statvfs"), [Pathname "path"]), 54, [],
1813 [InitISOFS, Always, TestOutputStruct (
1814 [["statvfs"; "/"]], [CompareWithInt ("namemax", 255)])],
1815 "get file system statistics",
1817 Returns file system statistics for any mounted file system.
1818 C<path> should be a file or directory in the mounted file system
1819 (typically it is the mount point itself, but it doesn't need to be).
1821 This is the same as the C<statvfs(2)> system call.");
1823 ("tune2fs_l", (RHashtable "superblock", [Device "device"]), 55, [],
1825 "get ext2/ext3/ext4 superblock details",
1827 This returns the contents of the ext2, ext3 or ext4 filesystem
1828 superblock on C<device>.
1830 It is the same as running C<tune2fs -l device>. See L<tune2fs(8)>
1831 manpage for more details. The list of fields returned isn't
1832 clearly defined, and depends on both the version of C<tune2fs>
1833 that libguestfs was built against, and the filesystem itself.");
1835 ("blockdev_setro", (RErr, [Device "device"]), 56, [],
1836 [InitEmpty, Always, TestOutputTrue (
1837 [["blockdev_setro"; "/dev/sda"];
1838 ["blockdev_getro"; "/dev/sda"]])],
1839 "set block device to read-only",
1841 Sets the block device named C<device> to read-only.
1843 This uses the L<blockdev(8)> command.");
1845 ("blockdev_setrw", (RErr, [Device "device"]), 57, [],
1846 [InitEmpty, Always, TestOutputFalse (
1847 [["blockdev_setrw"; "/dev/sda"];
1848 ["blockdev_getro"; "/dev/sda"]])],
1849 "set block device to read-write",
1851 Sets the block device named C<device> to read-write.
1853 This uses the L<blockdev(8)> command.");
1855 ("blockdev_getro", (RBool "ro", [Device "device"]), 58, [],
1856 [InitEmpty, Always, TestOutputTrue (
1857 [["blockdev_setro"; "/dev/sda"];
1858 ["blockdev_getro"; "/dev/sda"]])],
1859 "is block device set to read-only",
1861 Returns a boolean indicating if the block device is read-only
1862 (true if read-only, false if not).
1864 This uses the L<blockdev(8)> command.");
1866 ("blockdev_getss", (RInt "sectorsize", [Device "device"]), 59, [],
1867 [InitEmpty, Always, TestOutputInt (
1868 [["blockdev_getss"; "/dev/sda"]], 512)],
1869 "get sectorsize of block device",
1871 This returns the size of sectors on a block device.
1872 Usually 512, but can be larger for modern devices.
1874 (Note, this is not the size in sectors, use C<guestfs_blockdev_getsz>
1877 This uses the L<blockdev(8)> command.");
1879 ("blockdev_getbsz", (RInt "blocksize", [Device "device"]), 60, [],
1880 [InitEmpty, Always, TestOutputInt (
1881 [["blockdev_getbsz"; "/dev/sda"]], 4096)],
1882 "get blocksize of block device",
1884 This returns the block size of a device.
1886 (Note this is different from both I<size in blocks> and
1887 I<filesystem block size>).
1889 This uses the L<blockdev(8)> command.");
1891 ("blockdev_setbsz", (RErr, [Device "device"; Int "blocksize"]), 61, [],
1893 "set blocksize of block device",
1895 This sets the block size of a device.
1897 (Note this is different from both I<size in blocks> and
1898 I<filesystem block size>).
1900 This uses the L<blockdev(8)> command.");
1902 ("blockdev_getsz", (RInt64 "sizeinsectors", [Device "device"]), 62, [],
1903 [InitEmpty, Always, TestOutputInt (
1904 [["blockdev_getsz"; "/dev/sda"]], 1024000)],
1905 "get total size of device in 512-byte sectors",
1907 This returns the size of the device in units of 512-byte sectors
1908 (even if the sectorsize isn't 512 bytes ... weird).
1910 See also C<guestfs_blockdev_getss> for the real sector size of
1911 the device, and C<guestfs_blockdev_getsize64> for the more
1912 useful I<size in bytes>.
1914 This uses the L<blockdev(8)> command.");
1916 ("blockdev_getsize64", (RInt64 "sizeinbytes", [Device "device"]), 63, [],
1917 [InitEmpty, Always, TestOutputInt (
1918 [["blockdev_getsize64"; "/dev/sda"]], 524288000)],
1919 "get total size of device in bytes",
1921 This returns the size of the device in bytes.
1923 See also C<guestfs_blockdev_getsz>.
1925 This uses the L<blockdev(8)> command.");
1927 ("blockdev_flushbufs", (RErr, [Device "device"]), 64, [],
1928 [InitEmpty, Always, TestRun
1929 [["blockdev_flushbufs"; "/dev/sda"]]],
1930 "flush device buffers",
1932 This tells the kernel to flush internal buffers associated
1935 This uses the L<blockdev(8)> command.");
1937 ("blockdev_rereadpt", (RErr, [Device "device"]), 65, [],
1938 [InitEmpty, Always, TestRun
1939 [["blockdev_rereadpt"; "/dev/sda"]]],
1940 "reread partition table",
1942 Reread the partition table on C<device>.
1944 This uses the L<blockdev(8)> command.");
1946 ("upload", (RErr, [FileIn "filename"; Dev_or_Path "remotefilename"]), 66, [],
1947 [InitBasicFS, Always, TestOutput (
1948 (* Pick a file from cwd which isn't likely to change. *)
1949 [["upload"; "../COPYING.LIB"; "/COPYING.LIB"];
1950 ["checksum"; "md5"; "/COPYING.LIB"]],
1951 Digest.to_hex (Digest.file "COPYING.LIB"))],
1952 "upload a file from the local machine",
1954 Upload local file C<filename> to C<remotefilename> on the
1957 C<filename> can also be a named pipe.
1959 See also C<guestfs_download>.");
1961 ("download", (RErr, [Dev_or_Path "remotefilename"; FileOut "filename"]), 67, [],
1962 [InitBasicFS, Always, TestOutput (
1963 (* Pick a file from cwd which isn't likely to change. *)
1964 [["upload"; "../COPYING.LIB"; "/COPYING.LIB"];
1965 ["download"; "/COPYING.LIB"; "testdownload.tmp"];
1966 ["upload"; "testdownload.tmp"; "/upload"];
1967 ["checksum"; "md5"; "/upload"]],
1968 Digest.to_hex (Digest.file "COPYING.LIB"))],
1969 "download a file to the local machine",
1971 Download file C<remotefilename> and save it as C<filename>
1972 on the local machine.
1974 C<filename> can also be a named pipe.
1976 See also C<guestfs_upload>, C<guestfs_cat>.");
1978 ("checksum", (RString "checksum", [String "csumtype"; Pathname "path"]), 68, [],
1979 [InitISOFS, Always, TestOutput (
1980 [["checksum"; "crc"; "/known-3"]], "2891671662");
1981 InitISOFS, Always, TestLastFail (
1982 [["checksum"; "crc"; "/notexists"]]);
1983 InitISOFS, Always, TestOutput (
1984 [["checksum"; "md5"; "/known-3"]], "46d6ca27ee07cdc6fa99c2e138cc522c");
1985 InitISOFS, Always, TestOutput (
1986 [["checksum"; "sha1"; "/known-3"]], "b7ebccc3ee418311091c3eda0a45b83c0a770f15");
1987 InitISOFS, Always, TestOutput (
1988 [["checksum"; "sha224"; "/known-3"]], "d2cd1774b28f3659c14116be0a6dc2bb5c4b350ce9cd5defac707741");
1989 InitISOFS, Always, TestOutput (
1990 [["checksum"; "sha256"; "/known-3"]], "75bb71b90cd20cb13f86d2bea8dad63ac7194e7517c3b52b8d06ff52d3487d30");
1991 InitISOFS, Always, TestOutput (
1992 [["checksum"; "sha384"; "/known-3"]], "5fa7883430f357b5d7b7271d3a1d2872b51d73cba72731de6863d3dea55f30646af2799bef44d5ea776a5ec7941ac640");
1993 InitISOFS, Always, TestOutput (
1994 [["checksum"; "sha512"; "/known-3"]], "2794062c328c6b216dca90443b7f7134c5f40e56bd0ed7853123275a09982a6f992e6ca682f9d2fba34a4c5e870d8fe077694ff831e3032a004ee077e00603f6");
1995 (* Test for RHBZ#579608, absolute symbolic links. *)
1996 InitISOFS, Always, TestOutput (
1997 [["checksum"; "sha512"; "/abssymlink"]], "5f57d0639bc95081c53afc63a449403883818edc64da48930ad6b1a4fb49be90404686877743fbcd7c99811f3def7df7bc22635c885c6a8cf79c806b43451c1a")],
1998 "compute MD5, SHAx or CRC checksum of file",
2000 This call computes the MD5, SHAx or CRC checksum of the
2003 The type of checksum to compute is given by the C<csumtype>
2004 parameter which must have one of the following values:
2010 Compute the cyclic redundancy check (CRC) specified by POSIX
2011 for the C<cksum> command.
2015 Compute the MD5 hash (using the C<md5sum> program).
2019 Compute the SHA1 hash (using the C<sha1sum> program).
2023 Compute the SHA224 hash (using the C<sha224sum> program).
2027 Compute the SHA256 hash (using the C<sha256sum> program).
2031 Compute the SHA384 hash (using the C<sha384sum> program).
2035 Compute the SHA512 hash (using the C<sha512sum> program).
2039 The checksum is returned as a printable string.
2041 To get the checksum for a device, use C<guestfs_checksum_device>.
2043 To get the checksums for many files, use C<guestfs_checksums_out>.");
2045 ("tar_in", (RErr, [FileIn "tarfile"; Pathname "directory"]), 69, [],
2046 [InitBasicFS, Always, TestOutput (
2047 [["tar_in"; "../images/helloworld.tar"; "/"];
2048 ["cat"; "/hello"]], "hello\n")],
2049 "unpack tarfile to directory",
2051 This command uploads and unpacks local file C<tarfile> (an
2052 I<uncompressed> tar file) into C<directory>.
2054 To upload a compressed tarball, use C<guestfs_tgz_in>
2055 or C<guestfs_txz_in>.");
2057 ("tar_out", (RErr, [String "directory"; FileOut "tarfile"]), 70, [],
2059 "pack directory into tarfile",
2061 This command packs the contents of C<directory> and downloads
2062 it to local file C<tarfile>.
2064 To download a compressed tarball, use C<guestfs_tgz_out>
2065 or C<guestfs_txz_out>.");
2067 ("tgz_in", (RErr, [FileIn "tarball"; Pathname "directory"]), 71, [],
2068 [InitBasicFS, Always, TestOutput (
2069 [["tgz_in"; "../images/helloworld.tar.gz"; "/"];
2070 ["cat"; "/hello"]], "hello\n")],
2071 "unpack compressed tarball to directory",
2073 This command uploads and unpacks local file C<tarball> (a
2074 I<gzip compressed> tar file) into C<directory>.
2076 To upload an uncompressed tarball, use C<guestfs_tar_in>.");
2078 ("tgz_out", (RErr, [Pathname "directory"; FileOut "tarball"]), 72, [],
2080 "pack directory into compressed tarball",
2082 This command packs the contents of C<directory> and downloads
2083 it to local file C<tarball>.
2085 To download an uncompressed tarball, use C<guestfs_tar_out>.");
2087 ("mount_ro", (RErr, [Device "device"; String "mountpoint"]), 73, [],
2088 [InitBasicFS, Always, TestLastFail (
2090 ["mount_ro"; "/dev/sda1"; "/"];
2091 ["touch"; "/new"]]);
2092 InitBasicFS, Always, TestOutput (
2093 [["write_file"; "/new"; "data"; "0"];
2095 ["mount_ro"; "/dev/sda1"; "/"];
2096 ["cat"; "/new"]], "data")],
2097 "mount a guest disk, read-only",
2099 This is the same as the C<guestfs_mount> command, but it
2100 mounts the filesystem with the read-only (I<-o ro>) flag.");
2102 ("mount_options", (RErr, [String "options"; Device "device"; String "mountpoint"]), 74, [],
2104 "mount a guest disk with mount options",
2106 This is the same as the C<guestfs_mount> command, but it
2107 allows you to set the mount options as for the
2108 L<mount(8)> I<-o> flag.
2110 If the C<options> parameter is an empty string, then
2111 no options are passed (all options default to whatever
2112 the filesystem uses).");
2114 ("mount_vfs", (RErr, [String "options"; String "vfstype"; Device "device"; String "mountpoint"]), 75, [],
2116 "mount a guest disk with mount options and vfstype",
2118 This is the same as the C<guestfs_mount> command, but it
2119 allows you to set both the mount options and the vfstype
2120 as for the L<mount(8)> I<-o> and I<-t> flags.");
2122 ("debug", (RString "result", [String "subcmd"; StringList "extraargs"]), 76, [],
2124 "debugging and internals",
2126 The C<guestfs_debug> command exposes some internals of
2127 C<guestfsd> (the guestfs daemon) that runs inside the
2130 There is no comprehensive help for this command. You have
2131 to look at the file C<daemon/debug.c> in the libguestfs source
2132 to find out what you can do.");
2134 ("lvremove", (RErr, [Device "device"]), 77, [Optional "lvm2"],
2135 [InitEmpty, Always, TestOutputList (
2136 [["part_disk"; "/dev/sda"; "mbr"];
2137 ["pvcreate"; "/dev/sda1"];
2138 ["vgcreate"; "VG"; "/dev/sda1"];
2139 ["lvcreate"; "LV1"; "VG"; "50"];
2140 ["lvcreate"; "LV2"; "VG"; "50"];
2141 ["lvremove"; "/dev/VG/LV1"];
2142 ["lvs"]], ["/dev/VG/LV2"]);
2143 InitEmpty, Always, TestOutputList (
2144 [["part_disk"; "/dev/sda"; "mbr"];
2145 ["pvcreate"; "/dev/sda1"];
2146 ["vgcreate"; "VG"; "/dev/sda1"];
2147 ["lvcreate"; "LV1"; "VG"; "50"];
2148 ["lvcreate"; "LV2"; "VG"; "50"];
2149 ["lvremove"; "/dev/VG"];
2151 InitEmpty, Always, TestOutputList (
2152 [["part_disk"; "/dev/sda"; "mbr"];
2153 ["pvcreate"; "/dev/sda1"];
2154 ["vgcreate"; "VG"; "/dev/sda1"];
2155 ["lvcreate"; "LV1"; "VG"; "50"];
2156 ["lvcreate"; "LV2"; "VG"; "50"];
2157 ["lvremove"; "/dev/VG"];
2159 "remove an LVM logical volume",
2161 Remove an LVM logical volume C<device>, where C<device> is
2162 the path to the LV, such as C</dev/VG/LV>.
2164 You can also remove all LVs in a volume group by specifying
2165 the VG name, C</dev/VG>.");
2167 ("vgremove", (RErr, [String "vgname"]), 78, [Optional "lvm2"],
2168 [InitEmpty, Always, TestOutputList (
2169 [["part_disk"; "/dev/sda"; "mbr"];
2170 ["pvcreate"; "/dev/sda1"];
2171 ["vgcreate"; "VG"; "/dev/sda1"];
2172 ["lvcreate"; "LV1"; "VG"; "50"];
2173 ["lvcreate"; "LV2"; "VG"; "50"];
2176 InitEmpty, Always, TestOutputList (
2177 [["part_disk"; "/dev/sda"; "mbr"];
2178 ["pvcreate"; "/dev/sda1"];
2179 ["vgcreate"; "VG"; "/dev/sda1"];
2180 ["lvcreate"; "LV1"; "VG"; "50"];
2181 ["lvcreate"; "LV2"; "VG"; "50"];
2184 "remove an LVM volume group",
2186 Remove an LVM volume group C<vgname>, (for example C<VG>).
2188 This also forcibly removes all logical volumes in the volume
2191 ("pvremove", (RErr, [Device "device"]), 79, [Optional "lvm2"],
2192 [InitEmpty, Always, TestOutputListOfDevices (
2193 [["part_disk"; "/dev/sda"; "mbr"];
2194 ["pvcreate"; "/dev/sda1"];
2195 ["vgcreate"; "VG"; "/dev/sda1"];
2196 ["lvcreate"; "LV1"; "VG"; "50"];
2197 ["lvcreate"; "LV2"; "VG"; "50"];
2199 ["pvremove"; "/dev/sda1"];
2201 InitEmpty, Always, TestOutputListOfDevices (
2202 [["part_disk"; "/dev/sda"; "mbr"];
2203 ["pvcreate"; "/dev/sda1"];
2204 ["vgcreate"; "VG"; "/dev/sda1"];
2205 ["lvcreate"; "LV1"; "VG"; "50"];
2206 ["lvcreate"; "LV2"; "VG"; "50"];
2208 ["pvremove"; "/dev/sda1"];
2210 InitEmpty, Always, TestOutputListOfDevices (
2211 [["part_disk"; "/dev/sda"; "mbr"];
2212 ["pvcreate"; "/dev/sda1"];
2213 ["vgcreate"; "VG"; "/dev/sda1"];
2214 ["lvcreate"; "LV1"; "VG"; "50"];
2215 ["lvcreate"; "LV2"; "VG"; "50"];
2217 ["pvremove"; "/dev/sda1"];
2219 "remove an LVM physical volume",
2221 This wipes a physical volume C<device> so that LVM will no longer
2224 The implementation uses the C<pvremove> command which refuses to
2225 wipe physical volumes that contain any volume groups, so you have
2226 to remove those first.");
2228 ("set_e2label", (RErr, [Device "device"; String "label"]), 80, [],
2229 [InitBasicFS, Always, TestOutput (
2230 [["set_e2label"; "/dev/sda1"; "testlabel"];
2231 ["get_e2label"; "/dev/sda1"]], "testlabel")],
2232 "set the ext2/3/4 filesystem label",
2234 This sets the ext2/3/4 filesystem label of the filesystem on
2235 C<device> to C<label>. Filesystem labels are limited to
2238 You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2label>
2239 to return the existing label on a filesystem.");
2241 ("get_e2label", (RString "label", [Device "device"]), 81, [],
2243 "get the ext2/3/4 filesystem label",
2245 This returns the ext2/3/4 filesystem label of the filesystem on
2248 ("set_e2uuid", (RErr, [Device "device"; String "uuid"]), 82, [],
2249 (let uuid = uuidgen () in
2250 [InitBasicFS, Always, TestOutput (
2251 [["set_e2uuid"; "/dev/sda1"; uuid];
2252 ["get_e2uuid"; "/dev/sda1"]], uuid);
2253 InitBasicFS, Always, TestOutput (
2254 [["set_e2uuid"; "/dev/sda1"; "clear"];
2255 ["get_e2uuid"; "/dev/sda1"]], "");
2256 (* We can't predict what UUIDs will be, so just check the commands run. *)
2257 InitBasicFS, Always, TestRun (
2258 [["set_e2uuid"; "/dev/sda1"; "random"]]);
2259 InitBasicFS, Always, TestRun (
2260 [["set_e2uuid"; "/dev/sda1"; "time"]])]),
2261 "set the ext2/3/4 filesystem UUID",
2263 This sets the ext2/3/4 filesystem UUID of the filesystem on
2264 C<device> to C<uuid>. The format of the UUID and alternatives
2265 such as C<clear>, C<random> and C<time> are described in the
2266 L<tune2fs(8)> manpage.
2268 You can use either C<guestfs_tune2fs_l> or C<guestfs_get_e2uuid>
2269 to return the existing UUID of a filesystem.");
2271 ("get_e2uuid", (RString "uuid", [Device "device"]), 83, [],
2273 "get the ext2/3/4 filesystem UUID",
2275 This returns the ext2/3/4 filesystem UUID of the filesystem on
2278 ("fsck", (RInt "status", [String "fstype"; Device "device"]), 84, [FishOutput FishOutputHexadecimal],
2279 [InitBasicFS, Always, TestOutputInt (
2280 [["umount"; "/dev/sda1"];
2281 ["fsck"; "ext2"; "/dev/sda1"]], 0);
2282 InitBasicFS, Always, TestOutputInt (
2283 [["umount"; "/dev/sda1"];
2284 ["zero"; "/dev/sda1"];
2285 ["fsck"; "ext2"; "/dev/sda1"]], 8)],
2286 "run the filesystem checker",
2288 This runs the filesystem checker (fsck) on C<device> which
2289 should have filesystem type C<fstype>.
2291 The returned integer is the status. See L<fsck(8)> for the
2292 list of status codes from C<fsck>.
2300 Multiple status codes can be summed together.
2304 A non-zero return code can mean \"success\", for example if
2305 errors have been corrected on the filesystem.
2309 Checking or repairing NTFS volumes is not supported
2314 This command is entirely equivalent to running C<fsck -a -t fstype device>.");
2316 ("zero", (RErr, [Device "device"]), 85, [],
2317 [InitBasicFS, Always, TestOutput (
2318 [["umount"; "/dev/sda1"];
2319 ["zero"; "/dev/sda1"];
2320 ["file"; "/dev/sda1"]], "data")],
2321 "write zeroes to the device",
2323 This command writes zeroes over the first few blocks of C<device>.
2325 How many blocks are zeroed isn't specified (but it's I<not> enough
2326 to securely wipe the device). It should be sufficient to remove
2327 any partition tables, filesystem superblocks and so on.
2329 See also: C<guestfs_zero_device>, C<guestfs_scrub_device>.");
2331 ("grub_install", (RErr, [Pathname "root"; Device "device"]), 86, [],
2332 (* Test disabled because grub-install incompatible with virtio-blk driver.
2333 * See also: https://bugzilla.redhat.com/show_bug.cgi?id=479760
2335 [InitBasicFS, Disabled, TestOutputTrue (
2336 [["grub_install"; "/"; "/dev/sda1"];
2337 ["is_dir"; "/boot"]])],
2340 This command installs GRUB (the Grand Unified Bootloader) on
2341 C<device>, with the root directory being C<root>.");
2343 ("cp", (RErr, [Pathname "src"; Pathname "dest"]), 87, [],
2344 [InitBasicFS, Always, TestOutput (
2345 [["write_file"; "/old"; "file content"; "0"];
2346 ["cp"; "/old"; "/new"];
2347 ["cat"; "/new"]], "file content");
2348 InitBasicFS, Always, TestOutputTrue (
2349 [["write_file"; "/old"; "file content"; "0"];
2350 ["cp"; "/old"; "/new"];
2351 ["is_file"; "/old"]]);
2352 InitBasicFS, Always, TestOutput (
2353 [["write_file"; "/old"; "file content"; "0"];
2355 ["cp"; "/old"; "/dir/new"];
2356 ["cat"; "/dir/new"]], "file content")],
2359 This copies a file from C<src> to C<dest> where C<dest> is
2360 either a destination filename or destination directory.");
2362 ("cp_a", (RErr, [Pathname "src"; Pathname "dest"]), 88, [],
2363 [InitBasicFS, Always, TestOutput (
2364 [["mkdir"; "/olddir"];
2365 ["mkdir"; "/newdir"];
2366 ["write_file"; "/olddir/file"; "file content"; "0"];
2367 ["cp_a"; "/olddir"; "/newdir"];
2368 ["cat"; "/newdir/olddir/file"]], "file content")],
2369 "copy a file or directory recursively",
2371 This copies a file or directory from C<src> to C<dest>
2372 recursively using the C<cp -a> command.");
2374 ("mv", (RErr, [Pathname "src"; Pathname "dest"]), 89, [],
2375 [InitBasicFS, Always, TestOutput (
2376 [["write_file"; "/old"; "file content"; "0"];
2377 ["mv"; "/old"; "/new"];
2378 ["cat"; "/new"]], "file content");
2379 InitBasicFS, Always, TestOutputFalse (
2380 [["write_file"; "/old"; "file content"; "0"];
2381 ["mv"; "/old"; "/new"];
2382 ["is_file"; "/old"]])],
2385 This moves a file from C<src> to C<dest> where C<dest> is
2386 either a destination filename or destination directory.");
2388 ("drop_caches", (RErr, [Int "whattodrop"]), 90, [],
2389 [InitEmpty, Always, TestRun (
2390 [["drop_caches"; "3"]])],
2391 "drop kernel page cache, dentries and inodes",
2393 This instructs the guest kernel to drop its page cache,
2394 and/or dentries and inode caches. The parameter C<whattodrop>
2395 tells the kernel what precisely to drop, see
2396 L<http://linux-mm.org/Drop_Caches>
2398 Setting C<whattodrop> to 3 should drop everything.
2400 This automatically calls L<sync(2)> before the operation,
2401 so that the maximum guest memory is freed.");
2403 ("dmesg", (RString "kmsgs", []), 91, [],
2404 [InitEmpty, Always, TestRun (
2406 "return kernel messages",
2408 This returns the kernel messages (C<dmesg> output) from
2409 the guest kernel. This is sometimes useful for extended
2410 debugging of problems.
2412 Another way to get the same information is to enable
2413 verbose messages with C<guestfs_set_verbose> or by setting
2414 the environment variable C<LIBGUESTFS_DEBUG=1> before
2415 running the program.");
2417 ("ping_daemon", (RErr, []), 92, [],
2418 [InitEmpty, Always, TestRun (
2419 [["ping_daemon"]])],
2420 "ping the guest daemon",
2422 This is a test probe into the guestfs daemon running inside
2423 the qemu subprocess. Calling this function checks that the
2424 daemon responds to the ping message, without affecting the daemon
2425 or attached block device(s) in any other way.");
2427 ("equal", (RBool "equality", [Pathname "file1"; Pathname "file2"]), 93, [],
2428 [InitBasicFS, Always, TestOutputTrue (
2429 [["write_file"; "/file1"; "contents of a file"; "0"];
2430 ["cp"; "/file1"; "/file2"];
2431 ["equal"; "/file1"; "/file2"]]);
2432 InitBasicFS, Always, TestOutputFalse (
2433 [["write_file"; "/file1"; "contents of a file"; "0"];
2434 ["write_file"; "/file2"; "contents of another file"; "0"];
2435 ["equal"; "/file1"; "/file2"]]);
2436 InitBasicFS, Always, TestLastFail (
2437 [["equal"; "/file1"; "/file2"]])],
2438 "test if two files have equal contents",
2440 This compares the two files C<file1> and C<file2> and returns
2441 true if their content is exactly equal, or false otherwise.
2443 The external L<cmp(1)> program is used for the comparison.");
2445 ("strings", (RStringList "stringsout", [Pathname "path"]), 94, [ProtocolLimitWarning],
2446 [InitISOFS, Always, TestOutputList (
2447 [["strings"; "/known-5"]], ["abcdefghi"; "jklmnopqr"]);
2448 InitISOFS, Always, TestOutputList (
2449 [["strings"; "/empty"]], []);
2450 (* Test for RHBZ#579608, absolute symbolic links. *)
2451 InitISOFS, Always, TestRun (
2452 [["strings"; "/abssymlink"]])],
2453 "print the printable strings in a file",
2455 This runs the L<strings(1)> command on a file and returns
2456 the list of printable strings found.");
2458 ("strings_e", (RStringList "stringsout", [String "encoding"; Pathname "path"]), 95, [ProtocolLimitWarning],
2459 [InitISOFS, Always, TestOutputList (
2460 [["strings_e"; "b"; "/known-5"]], []);
2461 InitBasicFS, Disabled, TestOutputList (
2462 [["write_file"; "/new"; "\000h\000e\000l\000l\000o\000\n\000w\000o\000r\000l\000d\000\n"; "24"];
2463 ["strings_e"; "b"; "/new"]], ["hello"; "world"])],
2464 "print the printable strings in a file",
2466 This is like the C<guestfs_strings> command, but allows you to
2467 specify the encoding.
2469 See the L<strings(1)> manpage for the full list of encodings.
2471 Commonly useful encodings are C<l> (lower case L) which will
2472 show strings inside Windows/x86 files.
2474 The returned strings are transcoded to UTF-8.");
2476 ("hexdump", (RString "dump", [Pathname "path"]), 96, [ProtocolLimitWarning],
2477 [InitISOFS, Always, TestOutput (
2478 [["hexdump"; "/known-4"]], "00000000 61 62 63 0a 64 65 66 0a 67 68 69 |abc.def.ghi|\n0000000b\n");
2479 (* Test for RHBZ#501888c2 regression which caused large hexdump
2480 * commands to segfault.
2482 InitISOFS, Always, TestRun (
2483 [["hexdump"; "/100krandom"]]);
2484 (* Test for RHBZ#579608, absolute symbolic links. *)
2485 InitISOFS, Always, TestRun (
2486 [["hexdump"; "/abssymlink"]])],
2487 "dump a file in hexadecimal",
2489 This runs C<hexdump -C> on the given C<path>. The result is
2490 the human-readable, canonical hex dump of the file.");
2492 ("zerofree", (RErr, [Device "device"]), 97, [Optional "zerofree"],
2493 [InitNone, Always, TestOutput (
2494 [["part_disk"; "/dev/sda"; "mbr"];
2495 ["mkfs"; "ext3"; "/dev/sda1"];
2496 ["mount_options"; ""; "/dev/sda1"; "/"];
2497 ["write_file"; "/new"; "test file"; "0"];
2498 ["umount"; "/dev/sda1"];
2499 ["zerofree"; "/dev/sda1"];
2500 ["mount_options"; ""; "/dev/sda1"; "/"];
2501 ["cat"; "/new"]], "test file")],
2502 "zero unused inodes and disk blocks on ext2/3 filesystem",
2504 This runs the I<zerofree> program on C<device>. This program
2505 claims to zero unused inodes and disk blocks on an ext2/3
2506 filesystem, thus making it possible to compress the filesystem
2509 You should B<not> run this program if the filesystem is
2512 It is possible that using this program can damage the filesystem
2513 or data on the filesystem.");
2515 ("pvresize", (RErr, [Device "device"]), 98, [Optional "lvm2"],
2517 "resize an LVM physical volume",
2519 This resizes (expands or shrinks) an existing LVM physical
2520 volume to match the new size of the underlying device.");
2522 ("sfdisk_N", (RErr, [Device "device"; Int "partnum";
2523 Int "cyls"; Int "heads"; Int "sectors";
2524 String "line"]), 99, [DangerWillRobinson],
2526 "modify a single partition on a block device",
2528 This runs L<sfdisk(8)> option to modify just the single
2529 partition C<n> (note: C<n> counts from 1).
2531 For other parameters, see C<guestfs_sfdisk>. You should usually
2532 pass C<0> for the cyls/heads/sectors parameters.
2534 See also: C<guestfs_part_add>");
2536 ("sfdisk_l", (RString "partitions", [Device "device"]), 100, [],
2538 "display the partition table",
2540 This displays the partition table on C<device>, in the
2541 human-readable output of the L<sfdisk(8)> command. It is
2542 not intended to be parsed.
2544 See also: C<guestfs_part_list>");
2546 ("sfdisk_kernel_geometry", (RString "partitions", [Device "device"]), 101, [],
2548 "display the kernel geometry",
2550 This displays the kernel's idea of the geometry of C<device>.
2552 The result is in human-readable format, and not designed to
2555 ("sfdisk_disk_geometry", (RString "partitions", [Device "device"]), 102, [],
2557 "display the disk geometry from the partition table",
2559 This displays the disk geometry of C<device> read from the
2560 partition table. Especially in the case where the underlying
2561 block device has been resized, this can be different from the
2562 kernel's idea of the geometry (see C<guestfs_sfdisk_kernel_geometry>).
2564 The result is in human-readable format, and not designed to
2567 ("vg_activate_all", (RErr, [Bool "activate"]), 103, [Optional "lvm2"],
2569 "activate or deactivate all volume groups",
2571 This command activates or (if C<activate> is false) deactivates
2572 all logical volumes in all volume groups.
2573 If activated, then they are made known to the
2574 kernel, ie. they appear as C</dev/mapper> devices. If deactivated,
2575 then those devices disappear.
2577 This command is the same as running C<vgchange -a y|n>");
2579 ("vg_activate", (RErr, [Bool "activate"; StringList "volgroups"]), 104, [Optional "lvm2"],
2581 "activate or deactivate some volume groups",
2583 This command activates or (if C<activate> is false) deactivates
2584 all logical volumes in the listed volume groups C<volgroups>.
2585 If activated, then they are made known to the
2586 kernel, ie. they appear as C</dev/mapper> devices. If deactivated,
2587 then those devices disappear.
2589 This command is the same as running C<vgchange -a y|n volgroups...>
2591 Note that if C<volgroups> is an empty list then B<all> volume groups
2592 are activated or deactivated.");
2594 ("lvresize", (RErr, [Device "device"; Int "mbytes"]), 105, [Optional "lvm2"],
2595 [InitNone, Always, TestOutput (
2596 [["part_disk"; "/dev/sda"; "mbr"];
2597 ["pvcreate"; "/dev/sda1"];
2598 ["vgcreate"; "VG"; "/dev/sda1"];
2599 ["lvcreate"; "LV"; "VG"; "10"];
2600 ["mkfs"; "ext2"; "/dev/VG/LV"];
2601 ["mount_options"; ""; "/dev/VG/LV"; "/"];
2602 ["write_file"; "/new"; "test content"; "0"];
2604 ["lvresize"; "/dev/VG/LV"; "20"];
2605 ["e2fsck_f"; "/dev/VG/LV"];
2606 ["resize2fs"; "/dev/VG/LV"];
2607 ["mount_options"; ""; "/dev/VG/LV"; "/"];
2608 ["cat"; "/new"]], "test content");
2609 InitNone, Always, TestRun (
2610 (* Make an LV smaller to test RHBZ#587484. *)
2611 [["part_disk"; "/dev/sda"; "mbr"];
2612 ["pvcreate"; "/dev/sda1"];
2613 ["vgcreate"; "VG"; "/dev/sda1"];
2614 ["lvcreate"; "LV"; "VG"; "20"];
2615 ["lvresize"; "/dev/VG/LV"; "10"]])],
2616 "resize an LVM logical volume",
2618 This resizes (expands or shrinks) an existing LVM logical
2619 volume to C<mbytes>. When reducing, data in the reduced part
2622 ("resize2fs", (RErr, [Device "device"]), 106, [],
2623 [], (* lvresize tests this *)
2624 "resize an ext2/ext3 filesystem",
2626 This resizes an ext2 or ext3 filesystem to match the size of
2627 the underlying device.
2629 I<Note:> It is sometimes required that you run C<guestfs_e2fsck_f>
2630 on the C<device> before calling this command. For unknown reasons
2631 C<resize2fs> sometimes gives an error about this and sometimes not.
2632 In any case, it is always safe to call C<guestfs_e2fsck_f> before
2633 calling this function.");
2635 ("find", (RStringList "names", [Pathname "directory"]), 107, [ProtocolLimitWarning],
2636 [InitBasicFS, Always, TestOutputList (
2637 [["find"; "/"]], ["lost+found"]);
2638 InitBasicFS, Always, TestOutputList (
2642 ["find"; "/"]], ["a"; "b"; "b/c"; "lost+found"]);
2643 InitBasicFS, Always, TestOutputList (
2644 [["mkdir_p"; "/a/b/c"];
2645 ["touch"; "/a/b/c/d"];
2646 ["find"; "/a/b/"]], ["c"; "c/d"])],
2647 "find all files and directories",
2649 This command lists out all files and directories, recursively,
2650 starting at C<directory>. It is essentially equivalent to
2651 running the shell command C<find directory -print> but some
2652 post-processing happens on the output, described below.
2654 This returns a list of strings I<without any prefix>. Thus
2655 if the directory structure was:
2661 then the returned list from C<guestfs_find> C</tmp> would be
2669 If C<directory> is not a directory, then this command returns
2672 The returned list is sorted.
2674 See also C<guestfs_find0>.");
2676 ("e2fsck_f", (RErr, [Device "device"]), 108, [],
2677 [], (* lvresize tests this *)
2678 "check an ext2/ext3 filesystem",
2680 This runs C<e2fsck -p -f device>, ie. runs the ext2/ext3
2681 filesystem checker on C<device>, noninteractively (C<-p>),
2682 even if the filesystem appears to be clean (C<-f>).
2684 This command is only needed because of C<guestfs_resize2fs>
2685 (q.v.). Normally you should use C<guestfs_fsck>.");
2687 ("sleep", (RErr, [Int "secs"]), 109, [],
2688 [InitNone, Always, TestRun (
2690 "sleep for some seconds",
2692 Sleep for C<secs> seconds.");
2694 ("ntfs_3g_probe", (RInt "status", [Bool "rw"; Device "device"]), 110, [Optional "ntfs3g"],
2695 [InitNone, Always, TestOutputInt (
2696 [["part_disk"; "/dev/sda"; "mbr"];
2697 ["mkfs"; "ntfs"; "/dev/sda1"];
2698 ["ntfs_3g_probe"; "true"; "/dev/sda1"]], 0);
2699 InitNone, Always, TestOutputInt (
2700 [["part_disk"; "/dev/sda"; "mbr"];
2701 ["mkfs"; "ext2"; "/dev/sda1"];
2702 ["ntfs_3g_probe"; "true"; "/dev/sda1"]], 12)],
2703 "probe NTFS volume",
2705 This command runs the L<ntfs-3g.probe(8)> command which probes
2706 an NTFS C<device> for mountability. (Not all NTFS volumes can
2707 be mounted read-write, and some cannot be mounted at all).
2709 C<rw> is a boolean flag. Set it to true if you want to test
2710 if the volume can be mounted read-write. Set it to false if
2711 you want to test if the volume can be mounted read-only.
2713 The return value is an integer which C<0> if the operation
2714 would succeed, or some non-zero value documented in the
2715 L<ntfs-3g.probe(8)> manual page.");
2717 ("sh", (RString "output", [String "command"]), 111, [],
2718 [], (* XXX needs tests *)
2719 "run a command via the shell",
2721 This call runs a command from the guest filesystem via the
2724 This is like C<guestfs_command>, but passes the command to:
2726 /bin/sh -c \"command\"
2728 Depending on the guest's shell, this usually results in
2729 wildcards being expanded, shell expressions being interpolated
2732 All the provisos about C<guestfs_command> apply to this call.");
2734 ("sh_lines", (RStringList "lines", [String "command"]), 112, [],
2735 [], (* XXX needs tests *)
2736 "run a command via the shell returning lines",
2738 This is the same as C<guestfs_sh>, but splits the result
2739 into a list of lines.
2741 See also: C<guestfs_command_lines>");
2743 ("glob_expand", (RStringList "paths", [Pathname "pattern"]), 113, [],
2744 (* Use Pathname here, and hence ABS_PATH (pattern,... in generated
2745 * code in stubs.c, since all valid glob patterns must start with "/".
2746 * There is no concept of "cwd" in libguestfs, hence no "."-relative names.
2748 [InitBasicFS, Always, TestOutputList (
2749 [["mkdir_p"; "/a/b/c"];
2750 ["touch"; "/a/b/c/d"];
2751 ["touch"; "/a/b/c/e"];
2752 ["glob_expand"; "/a/b/c/*"]], ["/a/b/c/d"; "/a/b/c/e"]);
2753 InitBasicFS, Always, TestOutputList (
2754 [["mkdir_p"; "/a/b/c"];
2755 ["touch"; "/a/b/c/d"];
2756 ["touch"; "/a/b/c/e"];
2757 ["glob_expand"; "/a/*/c/*"]], ["/a/b/c/d"; "/a/b/c/e"]);
2758 InitBasicFS, Always, TestOutputList (
2759 [["mkdir_p"; "/a/b/c"];
2760 ["touch"; "/a/b/c/d"];
2761 ["touch"; "/a/b/c/e"];
2762 ["glob_expand"; "/a/*/x/*"]], [])],
2763 "expand a wildcard path",
2765 This command searches for all the pathnames matching
2766 C<pattern> according to the wildcard expansion rules
2769 If no paths match, then this returns an empty list
2770 (note: not an error).
2772 It is just a wrapper around the C L<glob(3)> function
2773 with flags C<GLOB_MARK|GLOB_BRACE>.
2774 See that manual page for more details.");
2776 ("scrub_device", (RErr, [Device "device"]), 114, [DangerWillRobinson; Optional "scrub"],
2777 [InitNone, Always, TestRun ( (* use /dev/sdc because it's smaller *)
2778 [["scrub_device"; "/dev/sdc"]])],
2779 "scrub (securely wipe) a device",
2781 This command writes patterns over C<device> to make data retrieval
2784 It is an interface to the L<scrub(1)> program. See that
2785 manual page for more details.");
2787 ("scrub_file", (RErr, [Pathname "file"]), 115, [Optional "scrub"],
2788 [InitBasicFS, Always, TestRun (
2789 [["write_file"; "/file"; "content"; "0"];
2790 ["scrub_file"; "/file"]])],
2791 "scrub (securely wipe) a file",
2793 This command writes patterns over a file to make data retrieval
2796 The file is I<removed> after scrubbing.
2798 It is an interface to the L<scrub(1)> program. See that
2799 manual page for more details.");
2801 ("scrub_freespace", (RErr, [Pathname "dir"]), 116, [Optional "scrub"],
2802 [], (* XXX needs testing *)
2803 "scrub (securely wipe) free space",
2805 This command creates the directory C<dir> and then fills it
2806 with files until the filesystem is full, and scrubs the files
2807 as for C<guestfs_scrub_file>, and deletes them.
2808 The intention is to scrub any free space on the partition
2811 It is an interface to the L<scrub(1)> program. See that
2812 manual page for more details.");
2814 ("mkdtemp", (RString "dir", [Pathname "template"]), 117, [],
2815 [InitBasicFS, Always, TestRun (
2817 ["mkdtemp"; "/tmp/tmpXXXXXX"]])],
2818 "create a temporary directory",
2820 This command creates a temporary directory. The
2821 C<template> parameter should be a full pathname for the
2822 temporary directory name with the final six characters being
2825 For example: \"/tmp/myprogXXXXXX\" or \"/Temp/myprogXXXXXX\",
2826 the second one being suitable for Windows filesystems.
2828 The name of the temporary directory that was created
2831 The temporary directory is created with mode 0700
2832 and is owned by root.
2834 The caller is responsible for deleting the temporary
2835 directory and its contents after use.
2837 See also: L<mkdtemp(3)>");
2839 ("wc_l", (RInt "lines", [Pathname "path"]), 118, [],
2840 [InitISOFS, Always, TestOutputInt (
2841 [["wc_l"; "/10klines"]], 10000);
2842 (* Test for RHBZ#579608, absolute symbolic links. *)
2843 InitISOFS, Always, TestOutputInt (
2844 [["wc_l"; "/abssymlink"]], 10000)],
2845 "count lines in a file",
2847 This command counts the lines in a file, using the
2848 C<wc -l> external command.");
2850 ("wc_w", (RInt "words", [Pathname "path"]), 119, [],
2851 [InitISOFS, Always, TestOutputInt (
2852 [["wc_w"; "/10klines"]], 10000)],
2853 "count words in a file",
2855 This command counts the words in a file, using the
2856 C<wc -w> external command.");
2858 ("wc_c", (RInt "chars", [Pathname "path"]), 120, [],
2859 [InitISOFS, Always, TestOutputInt (
2860 [["wc_c"; "/100kallspaces"]], 102400)],
2861 "count characters in a file",
2863 This command counts the characters in a file, using the
2864 C<wc -c> external command.");
2866 ("head", (RStringList "lines", [Pathname "path"]), 121, [ProtocolLimitWarning],
2867 [InitISOFS, Always, TestOutputList (
2868 [["head"; "/10klines"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz";"3abcdefghijklmnopqrstuvwxyz";"4abcdefghijklmnopqrstuvwxyz";"5abcdefghijklmnopqrstuvwxyz";"6abcdefghijklmnopqrstuvwxyz";"7abcdefghijklmnopqrstuvwxyz";"8abcdefghijklmnopqrstuvwxyz";"9abcdefghijklmnopqrstuvwxyz"]);
2869 (* Test for RHBZ#579608, absolute symbolic links. *)
2870 InitISOFS, Always, TestOutputList (
2871 [["head"; "/abssymlink"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz";"3abcdefghijklmnopqrstuvwxyz";"4abcdefghijklmnopqrstuvwxyz";"5abcdefghijklmnopqrstuvwxyz";"6abcdefghijklmnopqrstuvwxyz";"7abcdefghijklmnopqrstuvwxyz";"8abcdefghijklmnopqrstuvwxyz";"9abcdefghijklmnopqrstuvwxyz"])],
2872 "return first 10 lines of a file",
2874 This command returns up to the first 10 lines of a file as
2875 a list of strings.");
2877 ("head_n", (RStringList "lines", [Int "nrlines"; Pathname "path"]), 122, [ProtocolLimitWarning],
2878 [InitISOFS, Always, TestOutputList (
2879 [["head_n"; "3"; "/10klines"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz"]);
2880 InitISOFS, Always, TestOutputList (
2881 [["head_n"; "-9997"; "/10klines"]], ["0abcdefghijklmnopqrstuvwxyz";"1abcdefghijklmnopqrstuvwxyz";"2abcdefghijklmnopqrstuvwxyz"]);
2882 InitISOFS, Always, TestOutputList (
2883 [["head_n"; "0"; "/10klines"]], [])],
2884 "return first N lines of a file",
2886 If the parameter C<nrlines> is a positive number, this returns the first
2887 C<nrlines> lines of the file C<path>.
2889 If the parameter C<nrlines> is a negative number, this returns lines
2890 from the file C<path>, excluding the last C<nrlines> lines.
2892 If the parameter C<nrlines> is zero, this returns an empty list.");
2894 ("tail", (RStringList "lines", [Pathname "path"]), 123, [ProtocolLimitWarning],
2895 [InitISOFS, Always, TestOutputList (
2896 [["tail"; "/10klines"]], ["9990abcdefghijklmnopqrstuvwxyz";"9991abcdefghijklmnopqrstuvwxyz";"9992abcdefghijklmnopqrstuvwxyz";"9993abcdefghijklmnopqrstuvwxyz";"9994abcdefghijklmnopqrstuvwxyz";"9995abcdefghijklmnopqrstuvwxyz";"9996abcdefghijklmnopqrstuvwxyz";"9997abcdefghijklmnopqrstuvwxyz";"9998abcdefghijklmnopqrstuvwxyz";"9999abcdefghijklmnopqrstuvwxyz"])],
2897 "return last 10 lines of a file",
2899 This command returns up to the last 10 lines of a file as
2900 a list of strings.");
2902 ("tail_n", (RStringList "lines", [Int "nrlines"; Pathname "path"]), 124, [ProtocolLimitWarning],
2903 [InitISOFS, Always, TestOutputList (
2904 [["tail_n"; "3"; "/10klines"]], ["9997abcdefghijklmnopqrstuvwxyz";"9998abcdefghijklmnopqrstuvwxyz";"9999abcdefghijklmnopqrstuvwxyz"]);
2905 InitISOFS, Always, TestOutputList (
2906 [["tail_n"; "-9998"; "/10klines"]], ["9997abcdefghijklmnopqrstuvwxyz";"9998abcdefghijklmnopqrstuvwxyz";"9999abcdefghijklmnopqrstuvwxyz"]);
2907 InitISOFS, Always, TestOutputList (
2908 [["tail_n"; "0"; "/10klines"]], [])],
2909 "return last N lines of a file",
2911 If the parameter C<nrlines> is a positive number, this returns the last
2912 C<nrlines> lines of the file C<path>.
2914 If the parameter C<nrlines> is a negative number, this returns lines
2915 from the file C<path>, starting with the C<-nrlines>th line.
2917 If the parameter C<nrlines> is zero, this returns an empty list.");
2919 ("df", (RString "output", []), 125, [],
2920 [], (* XXX Tricky to test because it depends on the exact format
2921 * of the 'df' command and other imponderables.
2923 "report file system disk space usage",
2925 This command runs the C<df> command to report disk space used.
2927 This command is mostly useful for interactive sessions. It
2928 is I<not> intended that you try to parse the output string.
2929 Use C<statvfs> from programs.");
2931 ("df_h", (RString "output", []), 126, [],
2932 [], (* XXX Tricky to test because it depends on the exact format
2933 * of the 'df' command and other imponderables.
2935 "report file system disk space usage (human readable)",
2937 This command runs the C<df -h> command to report disk space used
2938 in human-readable format.
2940 This command is mostly useful for interactive sessions. It
2941 is I<not> intended that you try to parse the output string.
2942 Use C<statvfs> from programs.");
2944 ("du", (RInt64 "sizekb", [Pathname "path"]), 127, [],
2945 [InitISOFS, Always, TestOutputInt (
2946 [["du"; "/directory"]], 2 (* ISO fs blocksize is 2K *))],
2947 "estimate file space usage",
2949 This command runs the C<du -s> command to estimate file space
2952 C<path> can be a file or a directory. If C<path> is a directory
2953 then the estimate includes the contents of the directory and all
2954 subdirectories (recursively).
2956 The result is the estimated size in I<kilobytes>
2957 (ie. units of 1024 bytes).");
2959 ("initrd_list", (RStringList "filenames", [Pathname "path"]), 128, [],
2960 [InitISOFS, Always, TestOutputList (
2961 [["initrd_list"; "/initrd"]], ["empty";"known-1";"known-2";"known-3";"known-4"; "known-5"])],
2962 "list files in an initrd",
2964 This command lists out files contained in an initrd.
2966 The files are listed without any initial C</> character. The
2967 files are listed in the order they appear (not necessarily
2968 alphabetical). Directory names are listed as separate items.
2970 Old Linux kernels (2.4 and earlier) used a compressed ext2
2971 filesystem as initrd. We I<only> support the newer initramfs
2972 format (compressed cpio files).");
2974 ("mount_loop", (RErr, [Pathname "file"; Pathname "mountpoint"]), 129, [],
2976 "mount a file using the loop device",
2978 This command lets you mount C<file> (a filesystem image
2979 in a file) on a mount point. It is entirely equivalent to
2980 the command C<mount -o loop file mountpoint>.");
2982 ("mkswap", (RErr, [Device "device"]), 130, [],
2983 [InitEmpty, Always, TestRun (
2984 [["part_disk"; "/dev/sda"; "mbr"];
2985 ["mkswap"; "/dev/sda1"]])],
2986 "create a swap partition",
2988 Create a swap partition on C<device>.");
2990 ("mkswap_L", (RErr, [String "label"; Device "device"]), 131, [],
2991 [InitEmpty, Always, TestRun (
2992 [["part_disk"; "/dev/sda"; "mbr"];
2993 ["mkswap_L"; "hello"; "/dev/sda1"]])],
2994 "create a swap partition with a label",
2996 Create a swap partition on C<device> with label C<label>.
2998 Note that you cannot attach a swap label to a block device
2999 (eg. C</dev/sda>), just to a partition. This appears to be
3000 a limitation of the kernel or swap tools.");
3002 ("mkswap_U", (RErr, [String "uuid"; Device "device"]), 132, [Optional "linuxfsuuid"],
3003 (let uuid = uuidgen () in
3004 [InitEmpty, Always, TestRun (
3005 [["part_disk"; "/dev/sda"; "mbr"];
3006 ["mkswap_U"; uuid; "/dev/sda1"]])]),
3007 "create a swap partition with an explicit UUID",
3009 Create a swap partition on C<device> with UUID C<uuid>.");
3011 ("mknod", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 133, [Optional "mknod"],
3012 [InitBasicFS, Always, TestOutputStruct (
3013 [["mknod"; "0o10777"; "0"; "0"; "/node"];
3014 (* NB: default umask 022 means 0777 -> 0755 in these tests *)
3015 ["stat"; "/node"]], [CompareWithInt ("mode", 0o10755)]);
3016 InitBasicFS, Always, TestOutputStruct (
3017 [["mknod"; "0o60777"; "66"; "99"; "/node"];
3018 ["stat"; "/node"]], [CompareWithInt ("mode", 0o60755)])],
3019 "make block, character or FIFO devices",
3021 This call creates block or character special devices, or
3022 named pipes (FIFOs).
3024 The C<mode> parameter should be the mode, using the standard
3025 constants. C<devmajor> and C<devminor> are the
3026 device major and minor numbers, only used when creating block
3027 and character special devices.
3029 Note that, just like L<mknod(2)>, the mode must be bitwise
3030 OR'd with S_IFBLK, S_IFCHR, S_IFIFO or S_IFSOCK (otherwise this call
3031 just creates a regular file). These constants are
3032 available in the standard Linux header files, or you can use
3033 C<guestfs_mknod_b>, C<guestfs_mknod_c> or C<guestfs_mkfifo>
3034 which are wrappers around this command which bitwise OR
3035 in the appropriate constant for you.
3037 The mode actually set is affected by the umask.");
3039 ("mkfifo", (RErr, [Int "mode"; Pathname "path"]), 134, [Optional "mknod"],
3040 [InitBasicFS, Always, TestOutputStruct (
3041 [["mkfifo"; "0o777"; "/node"];
3042 ["stat"; "/node"]], [CompareWithInt ("mode", 0o10755)])],
3043 "make FIFO (named pipe)",
3045 This call creates a FIFO (named pipe) called C<path> with
3046 mode C<mode>. It is just a convenient wrapper around
3049 The mode actually set is affected by the umask.");
3051 ("mknod_b", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 135, [Optional "mknod"],
3052 [InitBasicFS, Always, TestOutputStruct (
3053 [["mknod_b"; "0o777"; "99"; "66"; "/node"];
3054 ["stat"; "/node"]], [CompareWithInt ("mode", 0o60755)])],
3055 "make block device node",
3057 This call creates a block device node called C<path> with
3058 mode C<mode> and device major/minor C<devmajor> and C<devminor>.
3059 It is just a convenient wrapper around C<guestfs_mknod>.
3061 The mode actually set is affected by the umask.");
3063 ("mknod_c", (RErr, [Int "mode"; Int "devmajor"; Int "devminor"; Pathname "path"]), 136, [Optional "mknod"],
3064 [InitBasicFS, Always, TestOutputStruct (
3065 [["mknod_c"; "0o777"; "99"; "66"; "/node"];
3066 ["stat"; "/node"]], [CompareWithInt ("mode", 0o20755)])],
3067 "make char device node",
3069 This call creates a char device node called C<path> with
3070 mode C<mode> and device major/minor C<devmajor> and C<devminor>.
3071 It is just a convenient wrapper around C<guestfs_mknod>.
3073 The mode actually set is affected by the umask.");
3075 ("umask", (RInt "oldmask", [Int "mask"]), 137, [FishOutput FishOutputOctal],
3076 [InitEmpty, Always, TestOutputInt (
3077 [["umask"; "0o22"]], 0o22)],
3078 "set file mode creation mask (umask)",
3080 This function sets the mask used for creating new files and
3081 device nodes to C<mask & 0777>.
3083 Typical umask values would be C<022> which creates new files
3084 with permissions like \"-rw-r--r--\" or \"-rwxr-xr-x\", and
3085 C<002> which creates new files with permissions like
3086 \"-rw-rw-r--\" or \"-rwxrwxr-x\".
3088 The default umask is C<022>. This is important because it
3089 means that directories and device nodes will be created with
3090 C<0644> or C<0755> mode even if you specify C<0777>.
3092 See also C<guestfs_get_umask>,
3093 L<umask(2)>, C<guestfs_mknod>, C<guestfs_mkdir>.
3095 This call returns the previous umask.");
3097 ("readdir", (RStructList ("entries", "dirent"), [Pathname "dir"]), 138, [],
3099 "read directories entries",
3101 This returns the list of directory entries in directory C<dir>.
3103 All entries in the directory are returned, including C<.> and
3104 C<..>. The entries are I<not> sorted, but returned in the same
3105 order as the underlying filesystem.
3107 Also this call returns basic file type information about each
3108 file. The C<ftyp> field will contain one of the following characters:
3146 The L<readdir(3)> returned a C<d_type> field with an
3151 This function is primarily intended for use by programs. To
3152 get a simple list of names, use C<guestfs_ls>. To get a printable
3153 directory for human consumption, use C<guestfs_ll>.");
3155 ("sfdiskM", (RErr, [Device "device"; StringList "lines"]), 139, [DangerWillRobinson],
3157 "create partitions on a block device",
3159 This is a simplified interface to the C<guestfs_sfdisk>
3160 command, where partition sizes are specified in megabytes
3161 only (rounded to the nearest cylinder) and you don't need
3162 to specify the cyls, heads and sectors parameters which
3163 were rarely if ever used anyway.
3165 See also: C<guestfs_sfdisk>, the L<sfdisk(8)> manpage
3166 and C<guestfs_part_disk>");
3168 ("zfile", (RString "description", [String "meth"; Pathname "path"]), 140, [DeprecatedBy "file"],
3170 "determine file type inside a compressed file",
3172 This command runs C<file> after first decompressing C<path>
3175 C<method> must be one of C<gzip>, C<compress> or C<bzip2>.
3177 Since 1.0.63, use C<guestfs_file> instead which can now
3178 process compressed files.");
3180 ("getxattrs", (RStructList ("xattrs", "xattr"), [Pathname "path"]), 141, [Optional "linuxxattrs"],
3182 "list extended attributes of a file or directory",
3184 This call lists the extended attributes of the file or directory
3187 At the system call level, this is a combination of the
3188 L<listxattr(2)> and L<getxattr(2)> calls.
3190 See also: C<guestfs_lgetxattrs>, L<attr(5)>.");
3192 ("lgetxattrs", (RStructList ("xattrs", "xattr"), [Pathname "path"]), 142, [Optional "linuxxattrs"],
3194 "list extended attributes of a file or directory",
3196 This is the same as C<guestfs_getxattrs>, but if C<path>
3197 is a symbolic link, then it returns the extended attributes
3198 of the link itself.");
3200 ("setxattr", (RErr, [String "xattr";
3201 String "val"; Int "vallen"; (* will be BufferIn *)
3202 Pathname "path"]), 143, [Optional "linuxxattrs"],
3204 "set extended attribute of a file or directory",
3206 This call sets the extended attribute named C<xattr>
3207 of the file C<path> to the value C<val> (of length C<vallen>).
3208 The value is arbitrary 8 bit data.
3210 See also: C<guestfs_lsetxattr>, L<attr(5)>.");
3212 ("lsetxattr", (RErr, [String "xattr";
3213 String "val"; Int "vallen"; (* will be BufferIn *)
3214 Pathname "path"]), 144, [Optional "linuxxattrs"],
3216 "set extended attribute of a file or directory",
3218 This is the same as C<guestfs_setxattr>, but if C<path>
3219 is a symbolic link, then it sets an extended attribute
3220 of the link itself.");
3222 ("removexattr", (RErr, [String "xattr"; Pathname "path"]), 145, [Optional "linuxxattrs"],
3224 "remove extended attribute of a file or directory",
3226 This call removes the extended attribute named C<xattr>
3227 of the file C<path>.
3229 See also: C<guestfs_lremovexattr>, L<attr(5)>.");
3231 ("lremovexattr", (RErr, [String "xattr"; Pathname "path"]), 146, [Optional "linuxxattrs"],
3233 "remove extended attribute of a file or directory",
3235 This is the same as C<guestfs_removexattr>, but if C<path>
3236 is a symbolic link, then it removes an extended attribute
3237 of the link itself.");
3239 ("mountpoints", (RHashtable "mps", []), 147, [],
3243 This call is similar to C<guestfs_mounts>. That call returns
3244 a list of devices. This one returns a hash table (map) of
3245 device name to directory where the device is mounted.");
3247 ("mkmountpoint", (RErr, [String "exemptpath"]), 148, [],
3248 (* This is a special case: while you would expect a parameter
3249 * of type "Pathname", that doesn't work, because it implies
3250 * NEED_ROOT in the generated calling code in stubs.c, and
3251 * this function cannot use NEED_ROOT.
3254 "create a mountpoint",
3256 C<guestfs_mkmountpoint> and C<guestfs_rmmountpoint> are
3257 specialized calls that can be used to create extra mountpoints
3258 before mounting the first filesystem.
3260 These calls are I<only> necessary in some very limited circumstances,
3261 mainly the case where you want to mount a mix of unrelated and/or
3262 read-only filesystems together.
3264 For example, live CDs often contain a \"Russian doll\" nest of
3265 filesystems, an ISO outer layer, with a squashfs image inside, with
3266 an ext2/3 image inside that. You can unpack this as follows
3269 add-ro Fedora-11-i686-Live.iso
3272 mkmountpoint /squash
3275 mount-loop /cd/LiveOS/squashfs.img /squash
3276 mount-loop /squash/LiveOS/ext3fs.img /ext3
3278 The inner filesystem is now unpacked under the /ext3 mountpoint.");
3280 ("rmmountpoint", (RErr, [String "exemptpath"]), 149, [],
3282 "remove a mountpoint",
3284 This calls removes a mountpoint that was previously created
3285 with C<guestfs_mkmountpoint>. See C<guestfs_mkmountpoint>
3286 for full details.");
3288 ("read_file", (RBufferOut "content", [Pathname "path"]), 150, [ProtocolLimitWarning],
3289 [InitISOFS, Always, TestOutputBuffer (
3290 [["read_file"; "/known-4"]], "abc\ndef\nghi");
3291 (* Test various near large, large and too large files (RHBZ#589039). *)
3292 InitBasicFS, Always, TestLastFail (
3294 ["truncate_size"; "/a"; "4194303"]; (* GUESTFS_MESSAGE_MAX - 1 *)
3295 ["read_file"; "/a"]]);
3296 InitBasicFS, Always, TestLastFail (
3298 ["truncate_size"; "/a"; "4194304"]; (* GUESTFS_MESSAGE_MAX *)
3299 ["read_file"; "/a"]]);
3300 InitBasicFS, Always, TestLastFail (
3302 ["truncate_size"; "/a"; "41943040"]; (* GUESTFS_MESSAGE_MAX * 10 *)
3303 ["read_file"; "/a"]])],
3306 This calls returns the contents of the file C<path> as a
3309 Unlike C<guestfs_cat>, this function can correctly
3310 handle files that contain embedded ASCII NUL characters.
3311 However unlike C<guestfs_download>, this function is limited
3312 in the total size of file that can be handled.");
3314 ("grep", (RStringList "lines", [String "regex"; Pathname "path"]), 151, [ProtocolLimitWarning],
3315 [InitISOFS, Always, TestOutputList (
3316 [["grep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"]);
3317 InitISOFS, Always, TestOutputList (
3318 [["grep"; "nomatch"; "/test-grep.txt"]], []);
3319 (* Test for RHBZ#579608, absolute symbolic links. *)
3320 InitISOFS, Always, TestOutputList (
3321 [["grep"; "nomatch"; "/abssymlink"]], [])],
3322 "return lines matching a pattern",
3324 This calls the external C<grep> program and returns the
3327 ("egrep", (RStringList "lines", [String "regex"; Pathname "path"]), 152, [ProtocolLimitWarning],
3328 [InitISOFS, Always, TestOutputList (
3329 [["egrep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"])],
3330 "return lines matching a pattern",
3332 This calls the external C<egrep> program and returns the
3335 ("fgrep", (RStringList "lines", [String "pattern"; Pathname "path"]), 153, [ProtocolLimitWarning],
3336 [InitISOFS, Always, TestOutputList (
3337 [["fgrep"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"])],
3338 "return lines matching a pattern",
3340 This calls the external C<fgrep> program and returns the
3343 ("grepi", (RStringList "lines", [String "regex"; Pathname "path"]), 154, [ProtocolLimitWarning],
3344 [InitISOFS, Always, TestOutputList (
3345 [["grepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])],
3346 "return lines matching a pattern",
3348 This calls the external C<grep -i> program and returns the
3351 ("egrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 155, [ProtocolLimitWarning],
3352 [InitISOFS, Always, TestOutputList (
3353 [["egrepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])],
3354 "return lines matching a pattern",
3356 This calls the external C<egrep -i> program and returns the
3359 ("fgrepi", (RStringList "lines", [String "pattern"; Pathname "path"]), 156, [ProtocolLimitWarning],
3360 [InitISOFS, Always, TestOutputList (
3361 [["fgrepi"; "abc"; "/test-grep.txt"]], ["abc"; "abc123"; "ABC"])],
3362 "return lines matching a pattern",
3364 This calls the external C<fgrep -i> program and returns the
3367 ("zgrep", (RStringList "lines", [String "regex"; Pathname "path"]), 157, [ProtocolLimitWarning],
3368 [InitISOFS, Always, TestOutputList (
3369 [["zgrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])],
3370 "return lines matching a pattern",
3372 This calls the external C<zgrep> program and returns the
3375 ("zegrep", (RStringList "lines", [String "regex"; Pathname "path"]), 158, [ProtocolLimitWarning],
3376 [InitISOFS, Always, TestOutputList (
3377 [["zegrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])],
3378 "return lines matching a pattern",
3380 This calls the external C<zegrep> program and returns the
3383 ("zfgrep", (RStringList "lines", [String "pattern"; Pathname "path"]), 159, [ProtocolLimitWarning],
3384 [InitISOFS, Always, TestOutputList (
3385 [["zfgrep"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"])],
3386 "return lines matching a pattern",
3388 This calls the external C<zfgrep> program and returns the
3391 ("zgrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 160, [ProtocolLimitWarning],
3392 [InitISOFS, Always, TestOutputList (
3393 [["zgrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])],
3394 "return lines matching a pattern",
3396 This calls the external C<zgrep -i> program and returns the
3399 ("zegrepi", (RStringList "lines", [String "regex"; Pathname "path"]), 161, [ProtocolLimitWarning],
3400 [InitISOFS, Always, TestOutputList (
3401 [["zegrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])],
3402 "return lines matching a pattern",
3404 This calls the external C<zegrep -i> program and returns the
3407 ("zfgrepi", (RStringList "lines", [String "pattern"; Pathname "path"]), 162, [ProtocolLimitWarning],
3408 [InitISOFS, Always, TestOutputList (
3409 [["zfgrepi"; "abc"; "/test-grep.txt.gz"]], ["abc"; "abc123"; "ABC"])],
3410 "return lines matching a pattern",
3412 This calls the external C<zfgrep -i> program and returns the
3415 ("realpath", (RString "rpath", [Pathname "path"]), 163, [Optional "realpath"],
3416 [InitISOFS, Always, TestOutput (
3417 [["realpath"; "/../directory"]], "/directory")],
3418 "canonicalized absolute pathname",
3420 Return the canonicalized absolute pathname of C<path>. The
3421 returned path has no C<.>, C<..> or symbolic link path elements.");
3423 ("ln", (RErr, [String "target"; Pathname "linkname"]), 164, [],
3424 [InitBasicFS, Always, TestOutputStruct (
3427 ["stat"; "/b"]], [CompareWithInt ("nlink", 2)])],
3428 "create a hard link",
3430 This command creates a hard link using the C<ln> command.");
3432 ("ln_f", (RErr, [String "target"; Pathname "linkname"]), 165, [],
3433 [InitBasicFS, Always, TestOutputStruct (
3436 ["ln_f"; "/a"; "/b"];
3437 ["stat"; "/b"]], [CompareWithInt ("nlink", 2)])],
3438 "create a hard link",
3440 This command creates a hard link using the C<ln -f> command.
3441 The C<-f> option removes the link (C<linkname>) if it exists already.");
3443 ("ln_s", (RErr, [String "target"; Pathname "linkname"]), 166, [],
3444 [InitBasicFS, Always, TestOutputStruct (
3446 ["ln_s"; "a"; "/b"];
3447 ["lstat"; "/b"]], [CompareWithInt ("mode", 0o120777)])],
3448 "create a symbolic link",
3450 This command creates a symbolic link using the C<ln -s> command.");
3452 ("ln_sf", (RErr, [String "target"; Pathname "linkname"]), 167, [],
3453 [InitBasicFS, Always, TestOutput (
3454 [["mkdir_p"; "/a/b"];
3455 ["touch"; "/a/b/c"];
3456 ["ln_sf"; "../d"; "/a/b/c"];
3457 ["readlink"; "/a/b/c"]], "../d")],
3458 "create a symbolic link",
3460 This command creates a symbolic link using the C<ln -sf> command,
3461 The C<-f> option removes the link (C<linkname>) if it exists already.");
3463 ("readlink", (RString "link", [Pathname "path"]), 168, [],
3464 [] (* XXX tested above *),
3465 "read the target of a symbolic link",
3467 This command reads the target of a symbolic link.");
3469 ("fallocate", (RErr, [Pathname "path"; Int "len"]), 169, [],
3470 [InitBasicFS, Always, TestOutputStruct (
3471 [["fallocate"; "/a"; "1000000"];
3472 ["stat"; "/a"]], [CompareWithInt ("size", 1_000_000)])],
3473 "preallocate a file in the guest filesystem",
3475 This command preallocates a file (containing zero bytes) named
3476 C<path> of size C<len> bytes. If the file exists already, it
3479 Do not confuse this with the guestfish-specific
3480 C<alloc> command which allocates a file in the host and
3481 attaches it as a device.");
3483 ("swapon_device", (RErr, [Device "device"]), 170, [],
3484 [InitPartition, Always, TestRun (
3485 [["mkswap"; "/dev/sda1"];
3486 ["swapon_device"; "/dev/sda1"];
3487 ["swapoff_device"; "/dev/sda1"]])],
3488 "enable swap on device",
3490 This command enables the libguestfs appliance to use the
3491 swap device or partition named C<device>. The increased
3492 memory is made available for all commands, for example
3493 those run using C<guestfs_command> or C<guestfs_sh>.
3495 Note that you should not swap to existing guest swap
3496 partitions unless you know what you are doing. They may
3497 contain hibernation information, or other information that
3498 the guest doesn't want you to trash. You also risk leaking
3499 information about the host to the guest this way. Instead,
3500 attach a new host device to the guest and swap on that.");
3502 ("swapoff_device", (RErr, [Device "device"]), 171, [],
3503 [], (* XXX tested by swapon_device *)
3504 "disable swap on device",
3506 This command disables the libguestfs appliance swap
3507 device or partition named C<device>.
3508 See C<guestfs_swapon_device>.");
3510 ("swapon_file", (RErr, [Pathname "file"]), 172, [],
3511 [InitBasicFS, Always, TestRun (
3512 [["fallocate"; "/swap"; "8388608"];
3513 ["mkswap_file"; "/swap"];
3514 ["swapon_file"; "/swap"];
3515 ["swapoff_file"; "/swap"]])],
3516 "enable swap on file",
3518 This command enables swap to a file.
3519 See C<guestfs_swapon_device> for other notes.");
3521 ("swapoff_file", (RErr, [Pathname "file"]), 173, [],
3522 [], (* XXX tested by swapon_file *)
3523 "disable swap on file",
3525 This command disables the libguestfs appliance swap on file.");
3527 ("swapon_label", (RErr, [String "label"]), 174, [],
3528 [InitEmpty, Always, TestRun (
3529 [["part_disk"; "/dev/sdb"; "mbr"];
3530 ["mkswap_L"; "swapit"; "/dev/sdb1"];
3531 ["swapon_label"; "swapit"];
3532 ["swapoff_label"; "swapit"];
3533 ["zero"; "/dev/sdb"];
3534 ["blockdev_rereadpt"; "/dev/sdb"]])],
3535 "enable swap on labeled swap partition",
3537 This command enables swap to a labeled swap partition.
3538 See C<guestfs_swapon_device> for other notes.");
3540 ("swapoff_label", (RErr, [String "label"]), 175, [],
3541 [], (* XXX tested by swapon_label *)
3542 "disable swap on labeled swap partition",
3544 This command disables the libguestfs appliance swap on
3545 labeled swap partition.");
3547 ("swapon_uuid", (RErr, [String "uuid"]), 176, [Optional "linuxfsuuid"],
3548 (let uuid = uuidgen () in
3549 [InitEmpty, Always, TestRun (
3550 [["mkswap_U"; uuid; "/dev/sdb"];
3551 ["swapon_uuid"; uuid];
3552 ["swapoff_uuid"; uuid]])]),
3553 "enable swap on swap partition by UUID",
3555 This command enables swap to a swap partition with the given UUID.
3556 See C<guestfs_swapon_device> for other notes.");
3558 ("swapoff_uuid", (RErr, [String "uuid"]), 177, [Optional "linuxfsuuid"],
3559 [], (* XXX tested by swapon_uuid *)
3560 "disable swap on swap partition by UUID",
3562 This command disables the libguestfs appliance swap partition
3563 with the given UUID.");
3565 ("mkswap_file", (RErr, [Pathname "path"]), 178, [],
3566 [InitBasicFS, Always, TestRun (
3567 [["fallocate"; "/swap"; "8388608"];
3568 ["mkswap_file"; "/swap"]])],
3569 "create a swap file",
3573 This command just writes a swap file signature to an existing
3574 file. To create the file itself, use something like C<guestfs_fallocate>.");
3576 ("inotify_init", (RErr, [Int "maxevents"]), 179, [Optional "inotify"],
3577 [InitISOFS, Always, TestRun (
3578 [["inotify_init"; "0"]])],
3579 "create an inotify handle",
3581 This command creates a new inotify handle.
3582 The inotify subsystem can be used to notify events which happen to
3583 objects in the guest filesystem.
3585 C<maxevents> is the maximum number of events which will be
3586 queued up between calls to C<guestfs_inotify_read> or
3587 C<guestfs_inotify_files>.
3588 If this is passed as C<0>, then the kernel (or previously set)
3589 default is used. For Linux 2.6.29 the default was 16384 events.
3590 Beyond this limit, the kernel throws away events, but records
3591 the fact that it threw them away by setting a flag
3592 C<IN_Q_OVERFLOW> in the returned structure list (see
3593 C<guestfs_inotify_read>).
3595 Before any events are generated, you have to add some
3596 watches to the internal watch list. See:
3597 C<guestfs_inotify_add_watch>,
3598 C<guestfs_inotify_rm_watch> and
3599 C<guestfs_inotify_watch_all>.
3601 Queued up events should be read periodically by calling
3602 C<guestfs_inotify_read>
3603 (or C<guestfs_inotify_files> which is just a helpful
3604 wrapper around C<guestfs_inotify_read>). If you don't
3605 read the events out often enough then you risk the internal
3608 The handle should be closed after use by calling
3609 C<guestfs_inotify_close>. This also removes any
3610 watches automatically.
3612 See also L<inotify(7)> for an overview of the inotify interface
3613 as exposed by the Linux kernel, which is roughly what we expose
3614 via libguestfs. Note that there is one global inotify handle
3615 per libguestfs instance.");
3617 ("inotify_add_watch", (RInt64 "wd", [Pathname "path"; Int "mask"]), 180, [Optional "inotify"],
3618 [InitBasicFS, Always, TestOutputList (
3619 [["inotify_init"; "0"];
3620 ["inotify_add_watch"; "/"; "1073741823"];
3623 ["inotify_files"]], ["a"; "b"])],
3624 "add an inotify watch",
3626 Watch C<path> for the events listed in C<mask>.
3628 Note that if C<path> is a directory then events within that
3629 directory are watched, but this does I<not> happen recursively
3630 (in subdirectories).
3632 Note for non-C or non-Linux callers: the inotify events are
3633 defined by the Linux kernel ABI and are listed in
3634 C</usr/include/sys/inotify.h>.");
3636 ("inotify_rm_watch", (RErr, [Int(*XXX64*) "wd"]), 181, [Optional "inotify"],
3638 "remove an inotify watch",
3640 Remove a previously defined inotify watch.
3641 See C<guestfs_inotify_add_watch>.");
3643 ("inotify_read", (RStructList ("events", "inotify_event"), []), 182, [Optional "inotify"],
3645 "return list of inotify events",
3647 Return the complete queue of events that have happened
3648 since the previous read call.
3650 If no events have happened, this returns an empty list.
3652 I<Note>: In order to make sure that all events have been
3653 read, you must call this function repeatedly until it
3654 returns an empty list. The reason is that the call will
3655 read events up to the maximum appliance-to-host message
3656 size and leave remaining events in the queue.");
3658 ("inotify_files", (RStringList "paths", []), 183, [Optional "inotify"],
3660 "return list of watched files that had events",
3662 This function is a helpful wrapper around C<guestfs_inotify_read>
3663 which just returns a list of pathnames of objects that were
3664 touched. The returned pathnames are sorted and deduplicated.");
3666 ("inotify_close", (RErr, []), 184, [Optional "inotify"],
3668 "close the inotify handle",
3670 This closes the inotify handle which was previously
3671 opened by inotify_init. It removes all watches, throws
3672 away any pending events, and deallocates all resources.");
3674 ("setcon", (RErr, [String "context"]), 185, [Optional "selinux"],
3676 "set SELinux security context",
3678 This sets the SELinux security context of the daemon
3679 to the string C<context>.
3681 See the documentation about SELINUX in L<guestfs(3)>.");
3683 ("getcon", (RString "context", []), 186, [Optional "selinux"],
3685 "get SELinux security context",
3687 This gets the SELinux security context of the daemon.
3689 See the documentation about SELINUX in L<guestfs(3)>,
3690 and C<guestfs_setcon>");
3692 ("mkfs_b", (RErr, [String "fstype"; Int "blocksize"; Device "device"]), 187, [],
3693 [InitEmpty, Always, TestOutput (
3694 [["part_disk"; "/dev/sda"; "mbr"];
3695 ["mkfs_b"; "ext2"; "4096"; "/dev/sda1"];
3696 ["mount_options"; ""; "/dev/sda1"; "/"];
3697 ["write_file"; "/new"; "new file contents"; "0"];
3698 ["cat"; "/new"]], "new file contents")],
3699 "make a filesystem with block size",
3701 This call is similar to C<guestfs_mkfs>, but it allows you to
3702 control the block size of the resulting filesystem. Supported
3703 block sizes depend on the filesystem type, but typically they
3704 are C<1024>, C<2048> or C<4096> only.");
3706 ("mke2journal", (RErr, [Int "blocksize"; Device "device"]), 188, [],
3707 [InitEmpty, Always, TestOutput (
3708 [["sfdiskM"; "/dev/sda"; ",100 ,"];
3709 ["mke2journal"; "4096"; "/dev/sda1"];
3710 ["mke2fs_J"; "ext2"; "4096"; "/dev/sda2"; "/dev/sda1"];
3711 ["mount_options"; ""; "/dev/sda2"; "/"];
3712 ["write_file"; "/new"; "new file contents"; "0"];
3713 ["cat"; "/new"]], "new file contents")],
3714 "make ext2/3/4 external journal",
3716 This creates an ext2 external journal on C<device>. It is equivalent
3719 mke2fs -O journal_dev -b blocksize device");
3721 ("mke2journal_L", (RErr, [Int "blocksize"; String "label"; Device "device"]), 189, [],
3722 [InitEmpty, Always, TestOutput (
3723 [["sfdiskM"; "/dev/sda"; ",100 ,"];
3724 ["mke2journal_L"; "4096"; "JOURNAL"; "/dev/sda1"];
3725 ["mke2fs_JL"; "ext2"; "4096"; "/dev/sda2"; "JOURNAL"];
3726 ["mount_options"; ""; "/dev/sda2"; "/"];
3727 ["write_file"; "/new"; "new file contents"; "0"];
3728 ["cat"; "/new"]], "new file contents")],
3729 "make ext2/3/4 external journal with label",
3731 This creates an ext2 external journal on C<device> with label C<label>.");
3733 ("mke2journal_U", (RErr, [Int "blocksize"; String "uuid"; Device "device"]), 190, [Optional "linuxfsuuid"],
3734 (let uuid = uuidgen () in
3735 [InitEmpty, Always, TestOutput (
3736 [["sfdiskM"; "/dev/sda"; ",100 ,"];
3737 ["mke2journal_U"; "4096"; uuid; "/dev/sda1"];
3738 ["mke2fs_JU"; "ext2"; "4096"; "/dev/sda2"; uuid];
3739 ["mount_options"; ""; "/dev/sda2"; "/"];
3740 ["write_file"; "/new"; "new file contents"; "0"];
3741 ["cat"; "/new"]], "new file contents")]),
3742 "make ext2/3/4 external journal with UUID",
3744 This creates an ext2 external journal on C<device> with UUID C<uuid>.");
3746 ("mke2fs_J", (RErr, [String "fstype"; Int "blocksize"; Device "device"; Device "journal"]), 191, [],
3748 "make ext2/3/4 filesystem with external journal",
3750 This creates an ext2/3/4 filesystem on C<device> with
3751 an external journal on C<journal>. It is equivalent
3754 mke2fs -t fstype -b blocksize -J device=<journal> <device>
3756 See also C<guestfs_mke2journal>.");
3758 ("mke2fs_JL", (RErr, [String "fstype"; Int "blocksize"; Device "device"; String "label"]), 192, [],
3760 "make ext2/3/4 filesystem with external journal",
3762 This creates an ext2/3/4 filesystem on C<device> with
3763 an external journal on the journal labeled C<label>.
3765 See also C<guestfs_mke2journal_L>.");
3767 ("mke2fs_JU", (RErr, [String "fstype"; Int "blocksize"; Device "device"; String "uuid"]), 193, [Optional "linuxfsuuid"],
3769 "make ext2/3/4 filesystem with external journal",
3771 This creates an ext2/3/4 filesystem on C<device> with
3772 an external journal on the journal with UUID C<uuid>.
3774 See also C<guestfs_mke2journal_U>.");
3776 ("modprobe", (RErr, [String "modulename"]), 194, [Optional "linuxmodules"],
3777 [InitNone, Always, TestRun [["modprobe"; "fat"]]],
3778 "load a kernel module",
3780 This loads a kernel module in the appliance.
3782 The kernel module must have been whitelisted when libguestfs
3783 was built (see C<appliance/kmod.whitelist.in> in the source).");
3785 ("echo_daemon", (RString "output", [StringList "words"]), 195, [],
3786 [InitNone, Always, TestOutput (
3787 [["echo_daemon"; "This is a test"]], "This is a test"
3789 "echo arguments back to the client",
3791 This command concatenate the list of C<words> passed with single spaces between
3792 them and returns the resulting string.
3794 You can use this command to test the connection through to the daemon.
3796 See also C<guestfs_ping_daemon>.");
3798 ("find0", (RErr, [Pathname "directory"; FileOut "files"]), 196, [],
3799 [], (* There is a regression test for this. *)
3800 "find all files and directories, returning NUL-separated list",
3802 This command lists out all files and directories, recursively,
3803 starting at C<directory>, placing the resulting list in the
3804 external file called C<files>.
3806 This command works the same way as C<guestfs_find> with the
3807 following exceptions:
3813 The resulting list is written to an external file.
3817 Items (filenames) in the result are separated
3818 by C<\\0> characters. See L<find(1)> option I<-print0>.
3822 This command is not limited in the number of names that it
3827 The result list is not sorted.
3831 ("case_sensitive_path", (RString "rpath", [Pathname "path"]), 197, [],
3832 [InitISOFS, Always, TestOutput (
3833 [["case_sensitive_path"; "/DIRECTORY"]], "/directory");
3834 InitISOFS, Always, TestOutput (
3835 [["case_sensitive_path"; "/DIRECTORY/"]], "/directory");
3836 InitISOFS, Always, TestOutput (
3837 [["case_sensitive_path"; "/Known-1"]], "/known-1");
3838 InitISOFS, Always, TestLastFail (
3839 [["case_sensitive_path"; "/Known-1/"]]);
3840 InitBasicFS, Always, TestOutput (
3842 ["mkdir"; "/a/bbb"];
3843 ["touch"; "/a/bbb/c"];
3844 ["case_sensitive_path"; "/A/bbB/C"]], "/a/bbb/c");
3845 InitBasicFS, Always, TestOutput (
3847 ["mkdir"; "/a/bbb"];
3848 ["touch"; "/a/bbb/c"];
3849 ["case_sensitive_path"; "/A////bbB/C"]], "/a/bbb/c");
3850 InitBasicFS, Always, TestLastFail (
3852 ["mkdir"; "/a/bbb"];
3853 ["touch"; "/a/bbb/c"];
3854 ["case_sensitive_path"; "/A/bbb/../bbb/C"]])],
3855 "return true path on case-insensitive filesystem",
3857 This can be used to resolve case insensitive paths on
3858 a filesystem which is case sensitive. The use case is
3859 to resolve paths which you have read from Windows configuration
3860 files or the Windows Registry, to the true path.
3862 The command handles a peculiarity of the Linux ntfs-3g
3863 filesystem driver (and probably others), which is that although
3864 the underlying filesystem is case-insensitive, the driver
3865 exports the filesystem to Linux as case-sensitive.
3867 One consequence of this is that special directories such
3868 as C<c:\\windows> may appear as C</WINDOWS> or C</windows>
3869 (or other things) depending on the precise details of how
3870 they were created. In Windows itself this would not be
3873 Bug or feature? You decide:
3874 L<http://www.tuxera.com/community/ntfs-3g-faq/#posixfilenames1>
3876 This function resolves the true case of each element in the
3877 path and returns the case-sensitive path.
3879 Thus C<guestfs_case_sensitive_path> (\"/Windows/System32\")
3880 might return C<\"/WINDOWS/system32\"> (the exact return value
3881 would depend on details of how the directories were originally
3882 created under Windows).
3885 This function does not handle drive names, backslashes etc.
3887 See also C<guestfs_realpath>.");
3889 ("vfs_type", (RString "fstype", [Device "device"]), 198, [],
3890 [InitBasicFS, Always, TestOutput (
3891 [["vfs_type"; "/dev/sda1"]], "ext2")],
3892 "get the Linux VFS type corresponding to a mounted device",
3894 This command gets the block device type corresponding to
3895 a mounted device called C<device>.
3897 Usually the result is the name of the Linux VFS module that
3898 is used to mount this device (probably determined automatically
3899 if you used the C<guestfs_mount> call).");
3901 ("truncate", (RErr, [Pathname "path"]), 199, [],
3902 [InitBasicFS, Always, TestOutputStruct (
3903 [["write_file"; "/test"; "some stuff so size is not zero"; "0"];
3904 ["truncate"; "/test"];
3905 ["stat"; "/test"]], [CompareWithInt ("size", 0)])],
3906 "truncate a file to zero size",
3908 This command truncates C<path> to a zero-length file. The
3909 file must exist already.");
3911 ("truncate_size", (RErr, [Pathname "path"; Int64 "size"]), 200, [],
3912 [InitBasicFS, Always, TestOutputStruct (
3913 [["touch"; "/test"];
3914 ["truncate_size"; "/test"; "1000"];
3915 ["stat"; "/test"]], [CompareWithInt ("size", 1000)])],
3916 "truncate a file to a particular size",
3918 This command truncates C<path> to size C<size> bytes. The file
3919 must exist already. If the file is smaller than C<size> then
3920 the file is extended to the required size with null bytes.");
3922 ("utimens", (RErr, [Pathname "path"; Int64 "atsecs"; Int64 "atnsecs"; Int64 "mtsecs"; Int64 "mtnsecs"]), 201, [],
3923 [InitBasicFS, Always, TestOutputStruct (
3924 [["touch"; "/test"];
3925 ["utimens"; "/test"; "12345"; "67890"; "9876"; "5432"];
3926 ["stat"; "/test"]], [CompareWithInt ("mtime", 9876)])],
3927 "set timestamp of a file with nanosecond precision",
3929 This command sets the timestamps of a file with nanosecond
3932 C<atsecs, atnsecs> are the last access time (atime) in secs and
3933 nanoseconds from the epoch.
3935 C<mtsecs, mtnsecs> are the last modification time (mtime) in
3936 secs and nanoseconds from the epoch.
3938 If the C<*nsecs> field contains the special value C<-1> then
3939 the corresponding timestamp is set to the current time. (The
3940 C<*secs> field is ignored in this case).
3942 If the C<*nsecs> field contains the special value C<-2> then
3943 the corresponding timestamp is left unchanged. (The
3944 C<*secs> field is ignored in this case).");
3946 ("mkdir_mode", (RErr, [Pathname "path"; Int "mode"]), 202, [],
3947 [InitBasicFS, Always, TestOutputStruct (
3948 [["mkdir_mode"; "/test"; "0o111"];
3949 ["stat"; "/test"]], [CompareWithInt ("mode", 0o40111)])],
3950 "create a directory with a particular mode",
3952 This command creates a directory, setting the initial permissions
3953 of the directory to C<mode>.
3955 For common Linux filesystems, the actual mode which is set will
3956 be C<mode & ~umask & 01777>. Non-native-Linux filesystems may
3957 interpret the mode in other ways.
3959 See also C<guestfs_mkdir>, C<guestfs_umask>");
3961 ("lchown", (RErr, [Int "owner"; Int "group"; Pathname "path"]), 203, [],
3963 "change file owner and group",
3965 Change the file owner to C<owner> and group to C<group>.
3966 This is like C<guestfs_chown> but if C<path> is a symlink then
3967 the link itself is changed, not the target.
3969 Only numeric uid and gid are supported. If you want to use
3970 names, you will need to locate and parse the password file
3971 yourself (Augeas support makes this relatively easy).");
3973 ("lstatlist", (RStructList ("statbufs", "stat"), [Pathname "path"; StringList "names"]), 204, [],
3975 "lstat on multiple files",
3977 This call allows you to perform the C<guestfs_lstat> operation
3978 on multiple files, where all files are in the directory C<path>.
3979 C<names> is the list of files from this directory.
3981 On return you get a list of stat structs, with a one-to-one
3982 correspondence to the C<names> list. If any name did not exist
3983 or could not be lstat'd, then the C<ino> field of that structure
3986 This call is intended for programs that want to efficiently
3987 list a directory contents without making many round-trips.
3988 See also C<guestfs_lxattrlist> for a similarly efficient call
3989 for getting extended attributes. Very long directory listings
3990 might cause the protocol message size to be exceeded, causing
3991 this call to fail. The caller must split up such requests
3992 into smaller groups of names.");
3994 ("lxattrlist", (RStructList ("xattrs", "xattr"), [Pathname "path"; StringList "names"]), 205, [Optional "linuxxattrs"],
3996 "lgetxattr on multiple files",
3998 This call allows you to get the extended attributes
3999 of multiple files, where all files are in the directory C<path>.
4000 C<names> is the list of files from this directory.
4002 On return you get a flat list of xattr structs which must be
4003 interpreted sequentially. The first xattr struct always has a zero-length
4004 C<attrname>. C<attrval> in this struct is zero-length
4005 to indicate there was an error doing C<lgetxattr> for this
4006 file, I<or> is a C string which is a decimal number
4007 (the number of following attributes for this file, which could
4008 be C<\"0\">). Then after the first xattr struct are the
4009 zero or more attributes for the first named file.
4010 This repeats for the second and subsequent files.
4012 This call is intended for programs that want to efficiently
4013 list a directory contents without making many round-trips.
4014 See also C<guestfs_lstatlist> for a similarly efficient call
4015 for getting standard stats. Very long directory listings
4016 might cause the protocol message size to be exceeded, causing
4017 this call to fail. The caller must split up such requests
4018 into smaller groups of names.");
4020 ("readlinklist", (RStringList "links", [Pathname "path"; StringList "names"]), 206, [],
4022 "readlink on multiple files",
4024 This call allows you to do a C<readlink> operation
4025 on multiple files, where all files are in the directory C<path>.
4026 C<names> is the list of files from this directory.
4028 On return you get a list of strings, with a one-to-one
4029 correspondence to the C<names> list. Each string is the
4030 value of the symbol link.
4032 If the C<readlink(2)> operation fails on any name, then
4033 the corresponding result string is the empty string C<\"\">.
4034 However the whole operation is completed even if there
4035 were C<readlink(2)> errors, and so you can call this
4036 function with names where you don't know if they are
4037 symbolic links already (albeit slightly less efficient).
4039 This call is intended for programs that want to efficiently
4040 list a directory contents without making many round-trips.
4041 Very long directory listings might cause the protocol
4042 message size to be exceeded, causing
4043 this call to fail. The caller must split up such requests
4044 into smaller groups of names.");
4046 ("pread", (RBufferOut "content", [Pathname "path"; Int "count"; Int64 "offset"]), 207, [ProtocolLimitWarning],
4047 [InitISOFS, Always, TestOutputBuffer (
4048 [["pread"; "/known-4"; "1"; "3"]], "\n");
4049 InitISOFS, Always, TestOutputBuffer (
4050 [["pread"; "/empty"; "0"; "100"]], "")],
4051 "read part of a file",
4053 This command lets you read part of a file. It reads C<count>
4054 bytes of the file, starting at C<offset>, from file C<path>.
4056 This may read fewer bytes than requested. For further details
4057 see the L<pread(2)> system call.");
4059 ("part_init", (RErr, [Device "device"; String "parttype"]), 208, [],
4060 [InitEmpty, Always, TestRun (
4061 [["part_init"; "/dev/sda"; "gpt"]])],
4062 "create an empty partition table",
4064 This creates an empty partition table on C<device> of one of the
4065 partition types listed below. Usually C<parttype> should be
4066 either C<msdos> or C<gpt> (for large disks).
4068 Initially there are no partitions. Following this, you should
4069 call C<guestfs_part_add> for each partition required.
4071 Possible values for C<parttype> are:
4075 =item B<efi> | B<gpt>
4077 Intel EFI / GPT partition table.
4079 This is recommended for >= 2 TB partitions that will be accessed
4080 from Linux and Intel-based Mac OS X. It also has limited backwards
4081 compatibility with the C<mbr> format.
4083 =item B<mbr> | B<msdos>
4085 The standard PC \"Master Boot Record\" (MBR) format used
4086 by MS-DOS and Windows. This partition type will B<only> work
4087 for device sizes up to 2 TB. For large disks we recommend
4092 Other partition table types that may work but are not
4101 =item B<amiga> | B<rdb>
4103 Amiga \"Rigid Disk Block\" format.
4111 DASD, used on IBM mainframes.
4119 Old Mac partition format. Modern Macs use C<gpt>.
4123 NEC PC-98 format, common in Japan apparently.
4131 ("part_add", (RErr, [Device "device"; String "prlogex"; Int64 "startsect"; Int64 "endsect"]), 209, [],
4132 [InitEmpty, Always, TestRun (
4133 [["part_init"; "/dev/sda"; "mbr"];
4134 ["part_add"; "/dev/sda"; "primary"; "1"; "-1"]]);
4135 InitEmpty, Always, TestRun (
4136 [["part_init"; "/dev/sda"; "gpt"];
4137 ["part_add"; "/dev/sda"; "primary"; "34"; "127"];
4138 ["part_add"; "/dev/sda"; "primary"; "128"; "-34"]]);
4139 InitEmpty, Always, TestRun (
4140 [["part_init"; "/dev/sda"; "mbr"];
4141 ["part_add"; "/dev/sda"; "primary"; "32"; "127"];
4142 ["part_add"; "/dev/sda"; "primary"; "128"; "255"];
4143 ["part_add"; "/dev/sda"; "primary"; "256"; "511"];
4144 ["part_add"; "/dev/sda"; "primary"; "512"; "-1"]])],
4145 "add a partition to the device",
4147 This command adds a partition to C<device>. If there is no partition
4148 table on the device, call C<guestfs_part_init> first.
4150 The C<prlogex> parameter is the type of partition. Normally you
4151 should pass C<p> or C<primary> here, but MBR partition tables also
4152 support C<l> (or C<logical>) and C<e> (or C<extended>) partition
4155 C<startsect> and C<endsect> are the start and end of the partition
4156 in I<sectors>. C<endsect> may be negative, which means it counts
4157 backwards from the end of the disk (C<-1> is the last sector).
4159 Creating a partition which covers the whole disk is not so easy.
4160 Use C<guestfs_part_disk> to do that.");
4162 ("part_disk", (RErr, [Device "device"; String "parttype"]), 210, [DangerWillRobinson],
4163 [InitEmpty, Always, TestRun (
4164 [["part_disk"; "/dev/sda"; "mbr"]]);
4165 InitEmpty, Always, TestRun (
4166 [["part_disk"; "/dev/sda"; "gpt"]])],
4167 "partition whole disk with a single primary partition",
4169 This command is simply a combination of C<guestfs_part_init>
4170 followed by C<guestfs_part_add> to create a single primary partition
4171 covering the whole disk.
4173 C<parttype> is the partition table type, usually C<mbr> or C<gpt>,
4174 but other possible values are described in C<guestfs_part_init>.");
4176 ("part_set_bootable", (RErr, [Device "device"; Int "partnum"; Bool "bootable"]), 211, [],
4177 [InitEmpty, Always, TestRun (
4178 [["part_disk"; "/dev/sda"; "mbr"];
4179 ["part_set_bootable"; "/dev/sda"; "1"; "true"]])],
4180 "make a partition bootable",
4182 This sets the bootable flag on partition numbered C<partnum> on
4183 device C<device>. Note that partitions are numbered from 1.
4185 The bootable flag is used by some operating systems (notably
4186 Windows) to determine which partition to boot from. It is by
4187 no means universally recognized.");
4189 ("part_set_name", (RErr, [Device "device"; Int "partnum"; String "name"]), 212, [],
4190 [InitEmpty, Always, TestRun (
4191 [["part_disk"; "/dev/sda"; "gpt"];
4192 ["part_set_name"; "/dev/sda"; "1"; "thepartname"]])],
4193 "set partition name",
4195 This sets the partition name on partition numbered C<partnum> on
4196 device C<device>. Note that partitions are numbered from 1.
4198 The partition name can only be set on certain types of partition
4199 table. This works on C<gpt> but not on C<mbr> partitions.");
4201 ("part_list", (RStructList ("partitions", "partition"), [Device "device"]), 213, [],
4202 [], (* XXX Add a regression test for this. *)
4203 "list partitions on a device",
4205 This command parses the partition table on C<device> and
4206 returns the list of partitions found.
4208 The fields in the returned structure are:
4214 Partition number, counting from 1.
4218 Start of the partition I<in bytes>. To get sectors you have to
4219 divide by the device's sector size, see C<guestfs_blockdev_getss>.
4223 End of the partition in bytes.
4227 Size of the partition in bytes.
4231 ("part_get_parttype", (RString "parttype", [Device "device"]), 214, [],
4232 [InitEmpty, Always, TestOutput (
4233 [["part_disk"; "/dev/sda"; "gpt"];
4234 ["part_get_parttype"; "/dev/sda"]], "gpt")],
4235 "get the partition table type",
4237 This command examines the partition table on C<device> and
4238 returns the partition table type (format) being used.
4240 Common return values include: C<msdos> (a DOS/Windows style MBR
4241 partition table), C<gpt> (a GPT/EFI-style partition table). Other
4242 values are possible, although unusual. See C<guestfs_part_init>
4245 ("fill", (RErr, [Int "c"; Int "len"; Pathname "path"]), 215, [],
4246 [InitBasicFS, Always, TestOutputBuffer (
4247 [["fill"; "0x63"; "10"; "/test"];
4248 ["read_file"; "/test"]], "cccccccccc")],
4249 "fill a file with octets",
4251 This command creates a new file called C<path>. The initial
4252 content of the file is C<len> octets of C<c>, where C<c>
4253 must be a number in the range C<[0..255]>.
4255 To fill a file with zero bytes (sparsely), it is
4256 much more efficient to use C<guestfs_truncate_size>.");
4258 ("available", (RErr, [StringList "groups"]), 216, [],
4259 [InitNone, Always, TestRun [["available"; ""]]],
4260 "test availability of some parts of the API",
4262 This command is used to check the availability of some
4263 groups of functionality in the appliance, which not all builds of
4264 the libguestfs appliance will be able to provide.
4266 The libguestfs groups, and the functions that those
4267 groups correspond to, are listed in L<guestfs(3)/AVAILABILITY>.
4269 The argument C<groups> is a list of group names, eg:
4270 C<[\"inotify\", \"augeas\"]> would check for the availability of
4271 the Linux inotify functions and Augeas (configuration file
4274 The command returns no error if I<all> requested groups are available.
4276 It fails with an error if one or more of the requested
4277 groups is unavailable in the appliance.
4279 If an unknown group name is included in the
4280 list of groups then an error is always returned.
4288 You must call C<guestfs_launch> before calling this function.
4290 The reason is because we don't know what groups are
4291 supported by the appliance/daemon until it is running and can
4296 If a group of functions is available, this does not necessarily
4297 mean that they will work. You still have to check for errors
4298 when calling individual API functions even if they are
4303 It is usually the job of distro packagers to build
4304 complete functionality into the libguestfs appliance.
4305 Upstream libguestfs, if built from source with all
4306 requirements satisfied, will support everything.
4310 This call was added in version C<1.0.80>. In previous
4311 versions of libguestfs all you could do would be to speculatively
4312 execute a command to find out if the daemon implemented it.
4313 See also C<guestfs_version>.
4317 ("dd", (RErr, [Dev_or_Path "src"; Dev_or_Path "dest"]), 217, [],
4318 [InitBasicFS, Always, TestOutputBuffer (
4319 [["write_file"; "/src"; "hello, world"; "0"];
4320 ["dd"; "/src"; "/dest"];
4321 ["read_file"; "/dest"]], "hello, world")],
4322 "copy from source to destination using dd",
4324 This command copies from one source device or file C<src>
4325 to another destination device or file C<dest>. Normally you
4326 would use this to copy to or from a device or partition, for
4327 example to duplicate a filesystem.
4329 If the destination is a device, it must be as large or larger
4330 than the source file or device, otherwise the copy will fail.
4331 This command cannot do partial copies (see C<guestfs_copy_size>).");
4333 ("filesize", (RInt64 "size", [Pathname "file"]), 218, [],
4334 [InitBasicFS, Always, TestOutputInt (
4335 [["write_file"; "/file"; "hello, world"; "0"];
4336 ["filesize"; "/file"]], 12)],
4337 "return the size of the file in bytes",
4339 This command returns the size of C<file> in bytes.
4341 To get other stats about a file, use C<guestfs_stat>, C<guestfs_lstat>,
4342 C<guestfs_is_dir>, C<guestfs_is_file> etc.
4343 To get the size of block devices, use C<guestfs_blockdev_getsize64>.");
4345 ("lvrename", (RErr, [String "logvol"; String "newlogvol"]), 219, [],
4346 [InitBasicFSonLVM, Always, TestOutputList (
4347 [["lvrename"; "/dev/VG/LV"; "/dev/VG/LV2"];
4348 ["lvs"]], ["/dev/VG/LV2"])],
4349 "rename an LVM logical volume",
4351 Rename a logical volume C<logvol> with the new name C<newlogvol>.");
4353 ("vgrename", (RErr, [String "volgroup"; String "newvolgroup"]), 220, [],
4354 [InitBasicFSonLVM, Always, TestOutputList (
4356 ["vg_activate"; "false"; "VG"];
4357 ["vgrename"; "VG"; "VG2"];
4358 ["vg_activate"; "true"; "VG2"];
4359 ["mount_options"; ""; "/dev/VG2/LV"; "/"];
4360 ["vgs"]], ["VG2"])],
4361 "rename an LVM volume group",
4363 Rename a volume group C<volgroup> with the new name C<newvolgroup>.");
4365 ("initrd_cat", (RBufferOut "content", [Pathname "initrdpath"; String "filename"]), 221, [ProtocolLimitWarning],
4366 [InitISOFS, Always, TestOutputBuffer (
4367 [["initrd_cat"; "/initrd"; "known-4"]], "abc\ndef\nghi")],
4368 "list the contents of a single file in an initrd",
4370 This command unpacks the file C<filename> from the initrd file
4371 called C<initrdpath>. The filename must be given I<without> the
4372 initial C</> character.
4374 For example, in guestfish you could use the following command
4375 to examine the boot script (usually called C</init>)
4376 contained in a Linux initrd or initramfs image:
4378 initrd-cat /boot/initrd-<version>.img init
4380 See also C<guestfs_initrd_list>.");
4382 ("pvuuid", (RString "uuid", [Device "device"]), 222, [],
4384 "get the UUID of a physical volume",
4386 This command returns the UUID of the LVM PV C<device>.");
4388 ("vguuid", (RString "uuid", [String "vgname"]), 223, [],
4390 "get the UUID of a volume group",
4392 This command returns the UUID of the LVM VG named C<vgname>.");
4394 ("lvuuid", (RString "uuid", [Device "device"]), 224, [],
4396 "get the UUID of a logical volume",
4398 This command returns the UUID of the LVM LV C<device>.");
4400 ("vgpvuuids", (RStringList "uuids", [String "vgname"]), 225, [],
4402 "get the PV UUIDs containing the volume group",
4404 Given a VG called C<vgname>, this returns the UUIDs of all
4405 the physical volumes that this volume group resides on.
4407 You can use this along with C<guestfs_pvs> and C<guestfs_pvuuid>
4408 calls to associate physical volumes and volume groups.
4410 See also C<guestfs_vglvuuids>.");
4412 ("vglvuuids", (RStringList "uuids", [String "vgname"]), 226, [],
4414 "get the LV UUIDs of all LVs in the volume group",
4416 Given a VG called C<vgname>, this returns the UUIDs of all
4417 the logical volumes created in this volume group.
4419 You can use this along with C<guestfs_lvs> and C<guestfs_lvuuid>
4420 calls to associate logical volumes and volume groups.