Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/fzfs @ 429:bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 22 Sep 2023 09:22:25 +0200 |
| parents | 824e88618376 |
| children | 9c3b1966ba91 |
| rev | line source |
|---|---|
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 #!/bin/sh |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # -*- indent-tabs-mode: nil; -*- |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
3 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 #: A ZFS management helper tool. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 #: :Author: Franz Glasner |
|
386
84d2735fe7f6
Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents:
380
diff
changeset
|
7 #: :Copyright: (c) 2022-2023 Franz Glasner. |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 #: All rights reserved. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 #: :License: BSD 3-Clause "New" or "Revised" License. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
10 #: See LICENSE for details. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
11 #: If you cannot find LICENSE see |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
12 #: <https://opensource.org/licenses/BSD-3-Clause> |
|
386
84d2735fe7f6
Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents:
380
diff
changeset
|
13 #: :ID: @(#)@@SIMPLEVERSIONTAG@@ |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
14 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
16 set -eu |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
17 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
18 VERSION="@@VERSION@@" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 USAGE=' |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 USAGE: fzfs [ OPTIONS ] COMMAND [ COMMAND OPTIONS ] [ ARG ... ] |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 OPTIONS: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 -V Print the program name and version number to stdout and exit |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 -h Print this help message to stdout and exit |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
28 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
29 COMMANDS: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
30 |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
31 copy-tree [-A] [-M MOUNTPOINT] [-n] [-u] SOURCE-DATASET DEST-DATASET |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
32 |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
33 create-tree [-A] [-M MOUNTPOINT] [-n] [-p] [-u] SOURCE-DATASET DEST-DATASET |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
34 |
|
283
1fc3b04b39fa
Build and package manual pages for fzfs, fzfs-mount and fzfs-umount.
Franz Glasner <fzglas.hg@dom66.de>
parents:
276
diff
changeset
|
35 mount [-O] [-N] [-P] [-u] [-n] DATASET [MOUNTPOINT] |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 umount DATASET |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 unmount |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
41 ' |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
42 |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
43 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
44 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
45 #: Determine some important dataset properties that are set locally |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
46 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
47 #: Args: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
48 #: $1: the dataset |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
49 #: $2 ...: the properties to check for |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
50 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
51 #: Output (stdout): |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
52 #: An option string suited for use in "zfs create" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
53 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
54 _get_local_properties() { |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
55 local ds |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
56 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
57 local _res _prop _value _source |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
58 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
59 ds="${1}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
60 shift |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
61 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
62 _res="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
63 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
64 for _prop in "$@" ; do |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
65 IFS=$'\t' read -r _value _source <<EOF73GHASGJKKJ354 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
66 $(zfs get -H -p -o value,source "${_prop}" "${ds}") |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
67 EOF73GHASGJKKJ354 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
68 case "${_source}" in |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
69 local) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
70 if [ -z "${_res}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
71 _res="-o ${_prop}=${_value}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
72 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
73 _res="${_res} -o ${_prop}=${_value}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
74 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
75 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
76 *) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
77 # VOID |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
78 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
79 esac |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
80 done |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
81 echo "${_res}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
82 } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
83 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
84 |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
85 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
86 #: Implementation of the "mount" command. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
87 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
88 #: Mount a dataset and recursively all its children datasets. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
89 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
90 command_mount() { |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
91 local _dsname _mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
92 local _opt_dry_run _opt_mount_outside _opt_mount_natural |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
93 local _opt_mount_children_only |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
94 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
95 local _name _mp _canmount _mounted _rootds_mountpoint _relative_mp _real_mp |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
96 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
97 _opt_dry_run="" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
98 _opt_mount_outside="" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
99 _opt_mount_natural="" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
100 _opt_mount_children_only="" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
101 while getopts "ONPnu" _opt ; do |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
102 case ${_opt} in |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
103 O) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
104 _opt_mount_outside="yes" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
105 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
106 N) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
107 _opt_mount_natural="yes" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
108 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
109 P) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
110 _opt_mount_children_only="yes" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
111 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
112 n|u) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
113 _opt_dry_run="yes" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
114 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
115 \?|:) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
116 return 2; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
117 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
118 esac |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
119 done |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
120 shift $((OPTIND-1)) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
121 OPTIND=1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
122 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
123 _dsname="${1-}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
124 _mountpoint="${2-}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
125 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
126 if [ -z "${_dsname}" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
127 echo "ERROR: no dataset given" >&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
128 return 2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
129 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
130 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
131 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
132 { echo "ERROR: root dataset does not exist" >&2; return 1; } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
133 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
134 if [ -z "${_mountpoint}" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
135 if [ "${_opt_mount_natural}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
136 _mountpoint="${_rootds_mountpoint}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
137 else |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
138 echo "ERROR: no mountpoint given" >&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
139 return 2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
140 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
141 else |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
142 if [ "${_opt_mount_natural}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
143 echo "ERROR: Cannot have a custom mountpoint when \"-O\" is given" >&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
144 return 2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
145 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
146 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
147 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
148 # Eventually remove a trailing slash |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
149 _mountpoint="${_mountpoint%/}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
150 if [ -z "${_mountpoint}" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
151 echo "ERROR: would mount over the root filesystem" >&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
152 return 1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
153 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
154 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
155 zfs list -H -o name,mountpoint,canmount,mounted -s mountpoint -t filesystem -r "${_dsname}" \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
156 | { |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
157 while IFS=$'\t' read -r _name _mp _canmount _mounted ; do |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
158 # Skip filesystems that are already mounted |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
159 [ "${_mounted}" = "yes" ] && continue |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
160 # Skip filesystems that must not be mounted |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
161 [ "${_canmount}" = "off" ] && continue |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
162 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
163 # Mount only the children and skip the given parent dataset |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
164 # if required |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
165 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
166 [ \( "${_opt_mount_children_only}" = "yes" \) -a \( "${_name}" = "${_dsname}" \) ] && continue |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
167 case "${_mp}" in |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
168 "none"|"legacy") |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
169 # Do nothing for filesystem with unset or legacy mountpoints |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
170 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
171 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
172 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
173 # Handle only mountpoints that have a mountpoint below |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
174 # the parent datasets mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
175 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
176 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
177 # Determine the mountpoint relative to the parent mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
178 _relative_mp="${_mp#${_rootds_mountpoint}}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
179 # Eventually remove a trailing slash |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
180 _relative_mp="${_relative_mp%/}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
181 # The real effective full mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
182 _real_mp="${_mountpoint}${_relative_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
183 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
184 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
185 # Consistency and sanity check: computed real mountpoint must |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
186 # be equal to the configured mountpoint when no custom mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
187 # is given. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
188 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
189 if [ "${_opt_mount_natural}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
190 if [ "${_real_mp}" != "${_mp}" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
191 echo "ERROR: mountpoint mismatch" >&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
192 return 1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
193 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
194 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
195 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
196 if [ "${_opt_dry_run}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
197 echo "Would mount ${_name} on ${_real_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
198 else |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
199 mkdir -p "${_real_mp}" 1> /dev/null 2> /dev/null || \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
200 { echo "ERROR: cannot create mountpoint ${_real_mp}" >&2; return 1; } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
201 echo "Mounting ${_name} on ${_real_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
202 mount -t zfs "${_name}" "${_real_mp}" || return 1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
203 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
204 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
205 *) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
206 if [ "${_opt_mount_outside}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
207 if [ "${_opt_dry_run}" = "yes" ]; then |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
208 echo "Would mount ${_name} on configured ZFS dataset mountpoint ${_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
209 else |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
210 echo "Mounting ${_name} on configured ZFS dataset mountpoint ${_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
211 zfs mount "${_name}" || return 1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
212 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
213 else |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
214 echo "Skipping ${_name} because its configured ZFS mountpoint is not relative to given root dataset" 2>&1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
215 fi |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
216 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
217 esac |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
218 done |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
219 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
220 return 0 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
221 } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
222 } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
223 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
224 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
225 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
226 #: Implement the "umount" command. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
227 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
228 #: Umount a datasets and recursively all its children datasets. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
229 #: |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
230 command_umount() { |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
231 local _dsname |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
232 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
233 local _name _mp _rest _rootds_mountpoint |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
234 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
235 _dsname="${1-}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
236 [ -z "${_dsname}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
237 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
238 # Just determine whether the given dataset name exists |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
239 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || { echo "ERROR: dataset not found" 1>&2; return 1; } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
240 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
241 mount -t zfs -p \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
242 | grep -E "^${_dsname}(/|\s)" \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
243 | sort -n -r \ |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
244 | { |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
245 while IFS=' '$'\t' read -r _name _mp _rest ; do |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
246 echo "Umounting ${_name} on ${_mp}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
247 umount "${_mp}" || return 1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
248 done |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
249 } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
250 return 0 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
251 } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
252 |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
253 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
254 #: |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
255 #: Implementation of "copy-tree" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
256 #: |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
257 command_copy_tree() { |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
258 local _ds_source _ds_target |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
259 local _opt_mountpoint _opt_mount_noauto _opt_nomount _opt_keep _opt_dry_run |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
260 |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
261 local _ds_source_base _ds_source_snapshot _snapshot_suffix |
|
426
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
262 local _ds_tree _ds _ds_relname _ds_canmount |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
263 local _arg_canmount _arg_mp1 _arg_mp2 |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
264 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
265 _opt_mountpoint="" |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
266 _opt_mount_noauto="" |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
267 _opt_nomount="" |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
268 _opt_keep="" |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
269 _opt_dry_run="" |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
270 |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
271 while getopts "AM:knu" _opt ; do |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
272 case ${_opt} in |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
273 A) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
274 _opt_mount_noauto="-o canmount=noauto" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
275 ;; |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
276 M) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
277 _opt_mountpoint="${OPTARG}" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
278 ;; |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
279 k) |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
280 _opt_keep="yes" |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
281 ;; |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
282 n) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
283 _opt_dry_run="-n" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
284 ;; |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
285 u) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
286 _opt_nomount="-u" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
287 ;; |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
288 \?) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
289 return 2; |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
290 ;; |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
291 esac |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
292 done |
|
422
4363929b0a3e
FIX: Typo in variable name "OPTID" -> "OPTIND"
Franz Glasner <fzglas.hg@dom66.de>
parents:
421
diff
changeset
|
293 shift $((OPTIND-1)) |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
294 OPTIND=1 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
295 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
296 _ds_source="${1-}" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
297 _ds_target="${2-}" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
298 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
299 [ -z "${_ds_source}" ] && { echo "ERROR: no source given" 1>&2; return 2; } |
|
423
1d6ee78f06ef
FIX: Another typo in variable name (COPY-PASTE)
Franz Glasner <fzglas.hg@dom66.de>
parents:
422
diff
changeset
|
300 [ -z "${_ds_target}" ] && { echo "ERROR: no target name given" 1>&2; return 2; } |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
301 |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
302 if ! zfs get -H name "${_ds_source}" >/dev/null 2>&1; then |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
303 echo "ERROR: source dataset does not exist: ${_ds_source}" 1>&2; |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
304 return 1; |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
305 fi |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
306 if zfs get -H name "${_ds_target}" >/dev/null 2>&1; then |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
307 echo "ERROR: target dataset already exists: ${_ds_target}" 1>&2; |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
308 return 1; |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
309 fi |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
310 |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
311 _ds_source_base="${_ds_source%@*}" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
312 _ds_source_snapshot="${_ds_source##*@}" |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
313 _snapshot_suffix="@${_ds_source_snapshot}" |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
314 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
315 if [ "${_ds_source_snapshot}" = "${_ds_source_base}" ]; then |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
316 # No snapshot given |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
317 [ "${_ds_source_base}" = "${_ds_source}" ] || { echo "ERROR:" 1>&2; return 1; } |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
318 _ds_source_snapshot="" |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
319 _snapshot_suffix="" |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
320 fi |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
321 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
322 _ds_tree="" |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
323 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
324 while IFS=$'\n' read -r _ds; do |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
325 if [ -z "${_ds_tree}" ]; then |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
326 _ds_tree="${_ds}" |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
327 else |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
328 _ds_tree="${_ds_tree}"$'\n'"${_ds}" |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
329 fi |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
330 done <<EOF20ee7ea0781414fab8c305d3875d15e |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
331 $(zfs list -H -r -t filesystem -o name -s name "${_ds_source_base}") |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
332 EOF20ee7ea0781414fab8c305d3875d15e |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
333 # Check the existence of all intermediate datasets and their shapshots |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
334 IFS=$'\n' |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
335 for _ds in ${_ds_tree}; do |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
336 if ! zfs get -H name "${_ds}${_snapshot_suffix}" >/dev/null 2>&1; then |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
337 echo "ERROR: child dataset does not exist: ${_ds}${_snapshot_suffix}" 1>&2 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
338 return 1 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
339 fi |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
340 done |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
341 IFS=$'\n' |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
342 for _ds in ${_ds_tree}; do |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
343 # Reset IFS |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
344 IFS=$' \t\n' |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
345 |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
346 # Determine the relative name of the dataset |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
347 _ds_relname="${_ds#${_ds_source_base}}" |
|
426
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
348 |
|
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
349 _ds_canmount=$(zfs get -H -o value canmount "${_ds}") |
|
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
350 |
|
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
351 if [ "${_ds_canmount}" = "off" ]; then |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
352 _arg_canmount="-o canmount=off" |
|
426
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
353 else |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
354 _arg_canmount="${_opt_mount_noauto}" |
|
426
2cd4777821fc
More work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
424
diff
changeset
|
355 fi |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
356 |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
357 if [ -z "${_ds_relname}" ]; then |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
358 # |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
359 # Source root to target root |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
360 # |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
361 if [ -z "${_opt_mountpoint}" ]; then |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
362 _arg_mp1=-x |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
363 _arg_mp2=mountpoint |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
364 else |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
365 _arg_mp1=-o |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
366 _arg_mp2="mountpoint=${_opt_mountpoint}" |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
367 fi |
|
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
368 else |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
369 _arg_mp1=-x |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
370 _arg_mp2=mountpoint |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
371 fi |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
372 if [ -z "${_opt_dry_run}" ]; then |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
373 zfs send -Lec -p -v "${_ds}${_snapshot_suffix}" | zfs receive -v ${_opt_nomount} ${_arg_canmount} ${_arg_mp1} "${_arg_mp2}" "${_ds_target}${_ds_relname}" |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
374 else |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
375 echo "Would execute: zfs send -Lec -p -v '${_ds}${_snapshot_suffix}' | zfs receive -v ${_opt_nomount} ${_arg_canmount} ${_arg_mp1} '${_arg_mp2}' '${_ds_target}${_ds_relname}'" |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
376 fi |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
377 # for the loop |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
378 IFS=$'\n' |
|
424
a200c18603c9
Further work on "fzfs copy-tree"
Franz Glasner <fzglas.hg@dom66.de>
parents:
423
diff
changeset
|
379 done |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
380 # Reset to default |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
381 IFS=$' \t\n' |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
382 # Remove received snapshots by default |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
383 if [ -n "${_ds_source_snapshot}" ]; then |
|
429
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
384 if [ -z "${_opt_keep}" ]; then |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
385 if [ -z "${_opt_dry_run}" ]; then |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
386 zfs destroy -rv "${_ds_target}${_snapshot_suffix}" |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
387 else |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
388 echo "Would execute: zfs destroy -rv '${_ds_target}${_snapshot_suffix}'" |
|
bbdb1ab0ea00
Implement "-k" option for "fzfs copy-tree" to keep received snapshots
Franz Glasner <fzglas.hg@dom66.de>
parents:
428
diff
changeset
|
389 fi |
|
428
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
390 fi |
|
824e88618376
The first version of "fzfs copy-tree" completed
Franz Glasner <hg@dom66.de>
parents:
427
diff
changeset
|
391 fi |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
392 } |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
393 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
394 |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
395 #: |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
396 #: Implement the "create-tree" command |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
397 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
398 #: Create a ZFS dataset tree from a source tree tree including important properties |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
399 #: |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
400 command_create_tree() { |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
401 local _source_ds _target_ds |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
402 local _opt_dry_run _opt_mountpoint _opt_noauto _opt_nomount _opt_canmount_parent_only |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
403 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
404 local _opt _source_name _snapshot_name _current_name _current_type _relative_name _zfs_opts _zfs_canmount _zfs_mountpoint |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
405 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
406 _opt_noauto="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
407 _opt_dry_run="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
408 _opt_mountpoint="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
409 _opt_nomount="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
410 _opt_canmount_parent_only="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
411 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
412 while getopts "AM:npu" _opt ; do |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
413 case ${_opt} in |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
414 A) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
415 _opt_noauto="-o canmount=noauto" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
416 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
417 M) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
418 _opt_mountpoint="${OPTARG}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
419 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
420 n) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
421 _opt_dry_run="yes" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
422 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
423 p) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
424 _opt_canmount_parent_only="yes" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
425 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
426 u) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
427 _opt_nomount="-u" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
428 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
429 \?|:) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
430 return 2; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
431 ;; |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
432 esac |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
433 done |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
434 shift $((OPTIND-1)) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
435 OPTIND=1 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
436 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
437 _source_ds="${1-}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
438 _target_ds="${2-}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
439 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
440 [ -z "${_source_ds}" ] && { echo "ERROR: no source dataset given" 1>&2; return 2; } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
441 [ -z "${_target_ds}" ] && { echo "ERROR: no destination dataset given" 1>&2; return 2; } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
442 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
443 _source_name="${_source_ds%@*}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
444 if [ "${_source_name}" != "${_source_ds}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
445 _snapshot_name="${_source_ds##*@}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
446 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
447 _snapshot_name="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
448 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
449 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
450 [ -n "${_snapshot_name}" ] && { echo "ERROR: No snapshot sources are supported yet" 1>&2; return 2; } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
451 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
452 zfs list -H -r -t filesystem -o name,type "${_source_ds}" \ |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
453 | { |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
454 while IFS=$'\t' read -r _current_name _current_type ; do |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
455 # Determine the relative name of the dataset |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
456 _relative_name="${_current_name#${_source_name}}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
457 _relative_name="${_relative_name%@*}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
458 if [ "${_current_type}" != "filesystem" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
459 echo "ERROR: Got a snapshot but expected a filesystem" 1>&2 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
460 return 1 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
461 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
462 _zfs_opts="$(_get_local_properties "${_current_name}" atime exec setuid compression primarycache sync readonly)" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
463 if [ -z "${_relative_name}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
464 # |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
465 # Root |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
466 # |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
467 if [ -z "${_opt_noauto}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
468 _zfs_canmount="$(_get_local_properties "${_current_name}" canmount)" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
469 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
470 _zfs_canmount="${_opt_noauto}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
471 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
472 if [ -n "${_opt_mountpoint}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
473 _zfs_mountpoint="${_opt_mountpoint}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
474 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
475 _zfs_mountpoint="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
476 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
477 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
478 if [ "${_opt_dry_run}" = "yes" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
479 if [ -z "${_zfs_mountpoint}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
480 echo "Would call: zfs create ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} ${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
481 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
482 echo "Would call: zfs create ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} -o mountpoint=${_zfs_mountpoint} ${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
483 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
484 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
485 if [ -z "${_zfs_mountpoint}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
486 zfs create -v ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} "${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
487 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
488 zfs create -v ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} -o "mountpoint=${_zfs_mountpoint}" "${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
489 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
490 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
491 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
492 # |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
493 # Children |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
494 # |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
495 if [ -z "${_opt_noauto}" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
496 if [ "${_opt_canmount_parent_only}" = "yes" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
497 _zfs_canmount="" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
498 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
499 _zfs_canmount="$(_get_local_properties "${_current_name}" canmount)" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
500 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
501 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
502 _zfs_canmount="${_opt_noauto}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
503 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
504 if [ "${_opt_dry_run}" = "yes" ]; then |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
505 echo "Would call: zfs create ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} ${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
506 else |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
507 zfs create -v ${_opt_nomount} ${_zfs_opts} ${_zfs_canmount} "${_target_ds}${_relative_name}" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
508 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
509 fi |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
510 done |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
511 } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
512 return 0 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
513 } |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
514 |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
515 |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
516 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
517 # Global option handling |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
518 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
519 while getopts "Vh" _opt ; do |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
520 case ${_opt} in |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
521 V) |
|
408
bb0a0384b5da
FIX: Program name in fzfs's version string
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
386
diff
changeset
|
522 printf 'fzfs %s\n' '@@SIMPLEVERSIONSTR@@' |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
523 exit 0 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
524 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
525 h) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
526 echo "${USAGE}" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
527 exit 0 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
528 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
529 \?) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
530 exit 2; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
531 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
532 *) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
533 echo "ERROR: option handling failed" 1>&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
534 exit 2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
535 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
536 esac |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
537 done |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
538 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
539 # Reset the Shell's option handling system to prepare for handling |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
540 # command-local options. |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
541 # |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
542 shift $((OPTIND-1)) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
543 OPTIND=1 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
544 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
545 test $# -gt 0 || { echo "ERROR: no command given" 1>&2; exit 2; } |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
546 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
547 command="$1" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
548 shift |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
549 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
550 case "${command}" in |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
551 mount) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
552 command_mount "$@" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
553 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
554 umount|unmount) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
555 command_umount "$@" |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
556 ;; |
|
421
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
557 copy-tree) |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
558 command_copy_tree "$@" |
|
a571a30bcf8a
Begin the implementation of "fzfs copy-tree"
Franz Glasner <hg@dom66.de>
parents:
408
diff
changeset
|
559 ;; |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
560 create-tree) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
561 command_create_tree "$@" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
283
diff
changeset
|
562 ;; |
|
276
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
563 *) |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
564 echo "ERROR: unknown command \`${command}'" 1>&2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
565 exit 2 |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
566 ;; |
|
3c24b07240f2
Move the implementation of "mount" and "umount" into the new tool fzfs.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
567 esac |
