fish: fuse: Add -m dev:mnt:opts to allow mount options to be specified.

This lets you turn on ACLs and xattrs by doing:

  -m /dev/sda1:/:acl,user_xattr

The extra parameter is passed through to mount_options:

  libguestfs: trace: mount_options "acl,user_xattr" "/dev/sda1" "/"
This commit is contained in:
Richard W.M. Jones
2011-03-28 13:35:53 +01:00
parent feaddb062a
commit 4e529e06a4
5 changed files with 49 additions and 12 deletions

View File

@@ -117,7 +117,7 @@ usage (int status)
" --keys-from-stdin Read passphrases from stdin\n"
" --listen Listen for remote commands\n"
" --live Connect to a live virtual machine\n"
" -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n"
" -m|--mount dev[:mnt[:opts]] Mount dev on mnt (if omitted, /)\n"
" -n|--no-sync Don't autosync\n"
" -N|--new type Create prepared disk (test1.img, ...)\n"
" --progress-bars Enable progress bars even when not interactive\n"

View File

@@ -299,9 +299,9 @@ L</REMOTE CONTROL GUESTFISH OVER A SOCKET> below.
Connect to a live virtual machine.
(Experimental, see L<guestfs(3)/ATTACHING TO RUNNING DAEMONS>).
=item B<-m dev[:mountpoint]>
=item B<-m dev[:mountpoint[:options]]>
=item B<--mount dev[:mountpoint]>
=item B<--mount dev[:mountpoint[:options]]>
Mount the named partition or logical volume on the given mountpoint.
@@ -318,8 +318,17 @@ filesystems and LVs available (see L</list-partitions>,
L</list-filesystems> and L</lvs> commands), or you can use the
L<virt-filesystems(1)> program.
Using this flag is mostly equivalent to using the C<mount-options>
command or the C<mount-ro> command if the I<--ro> flag was given.
The third (and rarely used) part of the mount parameter is the list of
mount options used to mount the underlying filesystem. If this is not
given, then the mount options are either the empty string or C<ro>
(the latter if the I<--ro> flag is used). By specifying the mount
options, you override this default choice. Probably the only time you
would use this is to enable ACLs and/or extended attributes if the
filesystem can support them:
-m /dev/sda1:/:acl,user_xattr
Using this flag is equivalent to using the C<mount-options> command.
=item B<-n>

View File

@@ -1,5 +1,5 @@
/* libguestfs - guestfish and guestmount shared option parsing
* Copyright (C) 2010 Red Hat Inc.
* Copyright (C) 2010-2011 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -106,11 +106,18 @@ mount_mps (struct mp *mp)
if (mp) {
mount_mps (mp->next);
const char *options;
if (mp->options)
options = mp->options;
else if (read_only)
options = "ro";
else
options = "";
/* Don't use guestfs_mount here because that will default to mount
* options -o sync,noatime. For more information, see guestfs(3)
* section "LIBGUESTFS GOTCHAS".
*/
const char *options = read_only ? "ro" : "";
r = guestfs_mount_options (g, options, mp->device, mp->mountpoint);
if (r == -1) {
/* Display possible mountpoints before exiting. */

View File

@@ -1,5 +1,5 @@
/* libguestfs - guestfish and guestmount shared option parsing
* Copyright (C) 2010 Red Hat Inc.
* Copyright (C) 2010-2011 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -109,6 +109,7 @@ struct mp {
struct mp *next;
char *device;
char *mountpoint;
char *options;
};
/* in inspect.c */
@@ -173,12 +174,20 @@ extern int add_libvirt_drives (const char *guest);
perror ("malloc"); \
exit (EXIT_FAILURE); \
} \
mp->options = NULL; \
mp->mountpoint = bad_cast ("/"); \
p = strchr (optarg, ':'); \
if (p) { \
*p = '\0'; \
mp->mountpoint = p+1; \
} else \
mp->mountpoint = bad_cast ("/"); \
p++; \
mp->mountpoint = p; \
p = strchr (p, ':'); \
if (p) { \
*p = '\0'; \
p++; \
mp->options = p; \
} \
} \
mp->device = optarg; \
mp->next = mps; \
mps = mp

View File

@@ -148,7 +148,9 @@ to try to read passphrases from the user by opening C</dev/tty>.
Connect to a live virtual machine.
(Experimental, see L<guestfs(3)/ATTACHING TO RUNNING DAEMONS>).
=item B<-m dev[:mnt]> | B<--mount dev[:mnt]>
=item B<-m dev[:mountpoint[:options]]>
=item B<--mount dev[:mountpoint[:options]]>
Mount the named partition or logical volume on the given mountpoint
B<in the guest> (this has nothing to do with mountpoints in the host).
@@ -156,6 +158,16 @@ B<in the guest> (this has nothing to do with mountpoints in the host).
If the mountpoint is omitted, it defaults to C</>. You have to mount
something on C</>.
The third (and rarely used) part of the mount parameter is the list of
mount options used to mount the underlying filesystem. If this is not
given, then the mount options are either the empty string or C<ro>
(the latter if the I<--ro> flag is used). By specifying the mount
options, you override this default choice. Probably the only time you
would use this is to enable ACLs and/or extended attributes if the
filesystem can support them:
-m /dev/sda1:/:acl,user_xattr
=item B<-n> | B<--no-sync>
By default, we attempt to sync the guest disk when the FUSE mountpoint