Few new things available from now on: - Data deduplication. - Triple parity RAIDZ (RAIDZ3). - zfs diff. - zpool split. - Snapshot holds. - zpool import -F. Allows to rewind corrupted pool to earlier transaction group. - Possibility to import pool in read-only mode. MFC after: 1 month
76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
#! /usr/bin/python2.6
|
|
#
|
|
# CDDL HEADER START
|
|
#
|
|
# The contents of this file are subject to the terms of the
|
|
# Common Development and Distribution License (the "License").
|
|
# You may not use this file except in compliance with the License.
|
|
#
|
|
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
# or http://www.opensolaris.org/os/licensing.
|
|
# See the License for the specific language governing permissions
|
|
# and limitations under the License.
|
|
#
|
|
# When distributing Covered Code, include this CDDL HEADER in each
|
|
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
# If applicable, add the following below this CDDL HEADER, with the
|
|
# fields enclosed by brackets "[]" replaced with your own identifying
|
|
# information: Portions Copyright [yyyy] [name of copyright owner]
|
|
#
|
|
# CDDL HEADER END
|
|
#
|
|
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
|
|
"""This module implements the "zfs holds" subcommand.
|
|
The only public interface is the zfs.holds.do_holds() function."""
|
|
|
|
import optparse
|
|
import sys
|
|
import errno
|
|
import time
|
|
import zfs.util
|
|
import zfs.dataset
|
|
import zfs.table
|
|
|
|
_ = zfs.util._
|
|
|
|
def do_holds():
|
|
"""Implements the "zfs holds" subcommand."""
|
|
def usage(msg=None):
|
|
parser.print_help()
|
|
if msg:
|
|
print
|
|
parser.exit("zfs: error: " + msg)
|
|
else:
|
|
parser.exit()
|
|
|
|
u = _("""holds [-r] <snapshot> ...""")
|
|
|
|
parser = optparse.OptionParser(usage=u, prog="zfs")
|
|
|
|
parser.add_option("-r", action="store_true", dest="recursive",
|
|
help=_("list holds recursively"))
|
|
|
|
(options, args) = parser.parse_args(sys.argv[2:])
|
|
|
|
if len(args) < 1:
|
|
usage(_("missing snapshot argument"))
|
|
|
|
fields = ("name", "tag", "timestamp")
|
|
rjustfields = ()
|
|
printing = False
|
|
gotone = False
|
|
t = zfs.table.Table(fields, rjustfields)
|
|
for ds in zfs.dataset.snapshots_fromcmdline(args, options.recursive):
|
|
gotone = True
|
|
for tag, tm in ds.get_holds().iteritems():
|
|
val = {"name": ds.name, "tag": tag,
|
|
"timestamp": time.ctime(tm)}
|
|
t.addline(ds.name, val)
|
|
printing = True
|
|
if printing:
|
|
t.printme()
|
|
elif not gotone:
|
|
raise zfs.util.ZFSError(errno.ENOENT, _("no matching datasets"))
|