JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:ZFS 文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

4.  管理 ZFS 根池组件

5.  管理 Oracle Solaris ZFS 文件系统

管理 ZFS 文件系统(概述)

创建、销毁和重命名 ZFS 文件系统

创建 ZFS 文件系统

销毁 ZFS 文件系统

重命名 ZFS 文件系统

ZFS 属性介绍

ZFS 只读本机属性

used 属性

可设置的 ZFS 本机属性

canmount 属性

casesensitivity 属性

copies 属性

dedup 属性

encryption 属性

recordsize 属性

share.smb 属性

volsize 属性

ZFS 用户属性

查询 ZFS 文件系统信息

列出基本 ZFS 信息

创建复杂的 ZFS 查询

管理 ZFS 属性

设置 ZFS 属性

继承 ZFS 属性

查询 ZFS 属性

查询用于编写脚本的 ZFS 属性

挂载 ZFS 文件系统

管理 ZFS 挂载点

自动挂载点

传统挂载点

挂载 ZFS 文件系统

使用临时挂载属性

取消挂载 ZFS 文件系统

共享和取消共享 ZFS 文件系统

传统的 ZFS 共享语法

新的 ZFS 共享语法

包含每属性继承的 ZFS 共享

旧池中的 ZFS 共享继承

ZFS 命名共享

ZFS 自动共享

显示 ZFS 共享信息

更改 ZFS 共享属性值

发布和取消发布 ZFS 共享

删除 ZFS 共享

非全局区域中的 ZFS 文件共享

ZFS 共享迁移/转换问题

对 ZFS 文件系统共享问题进行故障排除

设置 ZFS 配额和预留空间

设置 ZFS 文件系统的配额

在 ZFS 文件系统中设置用户和组配额

设置 ZFS 文件系统的预留空间

加密 ZFS 文件系统

更改加密 ZFS 文件系统的密钥

管理 ZFS 加密密钥

委托 ZFS 密钥操作权限

挂载加密的 ZFS 文件系统

升级加密的 ZFS 文件系统

ZFS 压缩、重复数据删除和加密属性之间的交互

加密 ZFS 文件系统的示例

迁移 ZFS 文件系统

如何将文件系统迁移到 ZFS 文件系统

ZFS 文件系统迁移故障排除

升级 ZFS 文件系统

6.  使用 Oracle Solaris ZFS 快照和克隆

7.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

8.  Oracle Solaris ZFS 委托管理

9.  Oracle Solaris ZFS 高级主题

10.  Oracle Solaris ZFS 故障排除和池恢复

11.  归档快照和根池恢复

12.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

加密 ZFS 文件系统

加密是对数据进行编码以实现保密性的过程,数据所有者需要使用密钥才能访问已编码的数据。使用 ZFS 加密的优点如下所述:

您可以在创建 ZFS 文件系统时设置加密策略,但是该策略不可更改。例如,在启用了加密属性的情况下创建了 tank/home/darren 文件系统。缺省的加密策略是提示您输入口令短语,口令短语的长度必须至少为 8 个字符。

# zfs create -o encryption=on tank/home/darren
Enter passphrase for 'tank/home/darren': xxxxxxx
Enter again: xxxxxxxx

确认文件系统已启用加密。例如:

# zfs get encryption tank/home/darren
NAME              PROPERTY    VALUE        SOURCE
tank/home/darren  encryption  on           local

当文件系统的加密值为 on 时,缺省的加密算法为 aes-128-ccm

包装密钥用于加密实际的数据加密密钥。如上例所示,在创建加密的文件系统时,会将包装密钥从 zfs 命令传递到内核。包装密钥位于一个文件(采用 raw 或 hex 格式)中,或者派生自口令短语。

包装密钥的格式和位置是在 keysource 属性中指定的,如下所示:

keysource=format,location

如果 keysource 格式为 passphrase,则包装密钥派生自口令短语。否则,keysource 属性值指向实际的包装密钥,为原始字节或十六进制格式。您可以指定口令短语存储在文件中,或者存储在提示输入的原始字节流中,这可能仅适合于编写脚本。

如果文件系统的 keysource 属性值标识 passphrase,则包装密钥派生自口令短语(使用 PKCS#5 PBKD2 和按文件系统随机生成的 salt)。这意味着,相同的口令短语在后代文件系统上使用时可生成不同的包装密钥。

文件系统的加密策略由后代文件系统继承,且不可删除。例如:

# zfs snapshot tank/home/darren@now
# zfs clone tank/home/darren@now tank/home/darren-new
Enter passphrase for 'tank/home/darren-new': xxxxxxx
Enter again: xxxxxxxx
# zfs set encryption=off tank/home/darren-new
cannot set property for 'tank/home/darren-new': 'encryption' is readonly

如果需要复制或迁移加密或未加密的 ZFS 文件系统,请注意以下要点:

更改加密 ZFS 文件系统的密钥

通过使用 zfs key -c 命令,可以更改加密文件系统的包装密钥。必须首先已通过以下方式装入了现有的包装密钥:在引导时、通过显式装入文件系统密钥 (zfs key -l) 或者通过挂载文件系统 (zfs mount filesystem)。例如:

# zfs key -c tank/home/darren
Enter new passphrase for 'tank/home/darren': xxxxxxxx
Enter again: xxxxxxxx

在以下示例中,更改了包装密钥,并更改了 keysource 属性值以指定包装密钥来自一个文件。

# zfs key -c -o keysource=raw,file:///media/stick/key tank/home/darren

通过使用 zfs key -K 命令,可以更改加密文件系统的数据加密密钥,但是新的加密密钥仅用于新写入的数据。此功能可用来满足针对数据加密密钥的时限的 NIST 800-57 准则。例如:

# zfs key -K tank/home/darren

在上面的示例中,数据加密密钥不可见,也不是由您直接管理的。此外,您需要具有 keychange 委托才能执行密钥更改操作。

有以下加密算法可用:

ZFS keysource 属性标识用来包装文件系统数据加密密钥的密钥的格式和位置。例如:

# zfs get keysource tank/home/darren
NAME              PROPERTY   VALUE              SOURCE
tank/home/darren  keysource  passphrase,prompt  local

ZFS rekeydate 属性标识上次执行 zfs key -K 操作的日期。例如:

# zfs get rekeydate tank/home/darren
NAME              PROPERTY   VALUE                  SOURCE
tank/home/darren  rekeydate  Wed Jul 25 16:54 2012  local

如果加密文件系统的 creationrekeydate 属性具有相同的值,则表明从未通过 zfs key -K 操作为该文件系统重建密钥。

管理 ZFS 加密密钥

您可以采用不同方式管理 ZFS 加密密钥,具体取决于您的需求,您既可以在本地系统上进行管理,也可以远程管理(如果需要一个中央位置)。

有关管理 ZFS 加密密钥的更多信息,请参见:

http://www.oracle.com/technetwork/articles/servers-storage-admin/manage-zfs-encryption-1715034.html

有关使用 Oracle 密钥管理程序管理密钥信息的信息,请参见:

http://docs.oracle.com/cd/E24472_02/

委托 ZFS 密钥操作权限

查看关于委托密钥操作的以下权限描述:

请考虑针对密钥使用(装入或卸载)和密钥更改授予单独的权限,这样您可以采用“两人”密钥操作模型。例如,确定哪些用户可以使用密钥,哪些用户可以更改这些密钥。或者,两种用户需要同时在场才能进行密钥更改。此模型还允许您构建密钥契约系统。

挂载加密的 ZFS 文件系统

在尝试挂载加密的 ZFS 文件系统时,请检查以下注意事项:

升级加密的 ZFS 文件系统

将 Solaris 11 系统升级到 Solaris 11.1 之前,请确保加密的文件系统已挂载。挂载加密的文件系统并提供口令短语(如果提示)。

# zfs mount -a
Enter passphrase for 'pond/amy': xxxxxxxx
Enter passphrase for 'pond/rory': xxxxxxxx
# zfs mount | grep pond
pond                            /pond
pond/amy                        /pond/amy
pond/rory                       /pond/rory

然后,升级加密的文件系统。

# zfs upgrade -a

如果尝试升级的加密 ZFS 文件系统未挂载,将显示类似于以下内容的消息:

# zfs upgrade -a
cannot set property for 'pond/amy': key not present

此外,zpool status 输出可能显示损坏的数据。

# zpool status -v pond
.
.
.
        pond/amy:<0x1>
        pond/rory:<0x1>

如果出现上述错误,请按上文所述重新挂载加密的文件系统。然后,清理并清除池错误。

# zpool scrub pond
# zpool clear pond

有关升级文件系统的更多信息,请参见升级 ZFS 文件系统

ZFS 压缩、重复数据删除和加密属性之间的交互

在使用 ZFS 压缩、重复数据删除和加密属性时,请检查以下注意事项:

加密 ZFS 文件系统的示例

示例 5-1 通过使用原始密钥加密 ZFS 文件系统

在以下示例中,通过使用 pktool 命令生成了一个 aes-256-ccm 加密密钥,并将其写入了文件 /cindykey.file 中。

# pktool genkey keystore=file outkey=/cindykey.file keytype=aes keylen=256

然后,在创建 tank/home/cindy 文件系统时指定了 /cindykey.file

# zfs create -o encryption=aes-256-ccm -o keysource=raw,file:///cindykey.file 
tank/home/cindy

示例 5-2 使用不同的加密算法加密 ZFS 文件系统

您可以创建一个 ZFS 存储池,并让该存储池中的所有文件系统都继承加密算法。在此示例中,创建了 users 池,创建了 users/home 文件系统,并通过使用口令短语对该文件系统进行了加密。缺省的加密算法是 aes-128-ccm

然后,创建了 users/home/mark 文件系统,并通过使用 aes-256-ccm 加密算法对其进行了加密。

# zpool create -O encryption=on users mirror c0t1d0 c1t1d0 mirror c2t1d0 c3t1d0
Enter passphrase for 'users': xxxxxxxx
Enter again: xxxxxxxx
# zfs create users/home
# zfs get encryption users/home
NAME        PROPERTY    VALUE        SOURCE
users/home  encryption  on           inherited from users
# zfs create -o encryption=aes-256-ccm users/home/mark
# zfs get encryption users/home/mark
NAME               PROPERTY    VALUE        SOURCE
users/home/mark    encryption  aes-256-ccm  local

示例 5-3 克隆加密的 ZFS 文件系统

如果克隆文件系统从与其源快照相同的文件系统继承了 keysource 属性,则新的 keysource 是不必要的,并且如果 keysource=passphra e,prompt,系统也不会提示您输入新的口令短语。将为克隆使用相同的 keysource。例如:

缺省情况下,在克隆加密文件系统的后代时,系统不会提示您输入密钥。

# zfs create -o encryption=on tank/ws
Enter passphrase for 'tank/ws': xxxxxxxx
Enter again: xxxxxxxx
# zfs create tank/ws/fs1
# zfs snapshot tank/ws/fs1@snap1
# zfs clone tank/ws/fs1@snap1 tank/ws/fs1clone

如果要为克隆文件系统创建新密钥,请使用 zfs clone -K 命令。

如果是克隆加密的文件系统而不是加密的后代文件系统,则系统将提示您提供新密钥。例如:

# zfs create -o encryption=on tank/ws
Enter passphrase for 'tank/ws': xxxxxxxx
Enter again: xxxxxxxx
# zfs snapshot tank/ws@1
# zfs clone tank/ws@1 tank/ws1clone
Enter passphrase for 'tank/ws1clone': xxxxxxxx
Enter again: xxxxxxxx

示例 5-4 发送和接收加密的 ZFS 文件系统

在下面的示例中,根据加密的 /tank/home/darren 文件系统创建了 tank/home/darren@snap1 快照。然后,将快照发送到 bpool/snaps,由于已启用了加密属性,因此会加密生成的接收数据。但是,在发送过程中,tank/home/darren@snap1 流未加密。

# zfs get encryption tank/home/darren
NAME              PROPERTY    VALUE        SOURCE
tank/home/darren  encryption  on           local
# zfs snapshot tank/home/darren@snap1
# zfs get encryption bpool/snaps
NAME         PROPERTY    VALUE        SOURCE
bpool/snaps  encryption  on           inherited from bpool
# zfs send tank/home/darren@snap1 | zfs receive bpool/snaps/darren1012
# zfs get encryption bpool/snaps/darren1012
NAME                    PROPERTY    VALUE        SOURCE
bpool/snaps/darren1012  encryption  on           inherited from bpool

在这种情况下,将为接收的加密文件系统自动生成新密钥。