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

文档信息

前言

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

2.  Oracle Solaris ZFS 入门

3.  Oracle Solaris ZFS 与传统文件系统之间的差别

4.  管理 Oracle Solaris ZFS 存储池

5.  管理 ZFS 根池组件

6.  管理 Oracle Solaris ZFS 文件系统

管理 ZFS 文件系统(概述)

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

创建 ZFS 文件系统

销毁 ZFS 文件系统

重命名 ZFS 文件系统

ZFS 属性介绍

ZFS 只读本机属性

used 属性

可设置的 ZFS 本机属性

canmount 属性

casesensitivity 属性

copies 属性

dedup 属性

encryption 属性

recordsize 属性

sharesmb 属性

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 文件系统

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

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

9.  Oracle Solaris ZFS 委托管理

10.  Oracle Solaris ZFS 高级主题

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

12.  归档快照和根池恢复

13.  建议的 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  Tue Oct 12 15:36 2010  local

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

委托 ZFS 密钥操作权限

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

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

挂载已加密的 ZFS 文件系统

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

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

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

加密 ZFS 文件系统的示例

示例 6-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

示例 6-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

示例 6-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

示例 6-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

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