Specifying Unicode Versions

Oracle Solaris 11.4 SRU 51 introduces Unicode Version 14.0.0 for ZFS file system namespaces in ZFS file system Version 8 and ZFS pool Version 49.

The Unicode 14.0.0 update controls case-sensitivity and normalization only. Regardless of the version, you can use any Unicode character in a file name.

To use the Unicode 14.0.0 mappings, you must upgrade existing ZFS pools and then create a ZFS file system that sets the unicode property value to 14.0.0. Upgrade to at least ZFS pool Version 49 and ZFS file system Version 8, as follows:

% zpool upgrade -v|grep Unicode
49  Support for Unicode versioning
% zfs upgrade -v|grep Unicode
8   Support for Unicode versioning

ZFS version upgrades affect the mounting of file systems as well as the sending and receving of data streams. An updated file system can mount Unicode 5.0.0 and 14.0.0 file systems, and send and receive Unicode 5.0.0 and 14.0.0 data streams. However, a legacy ZFS file system can mount only a Unicode 5.0.0 file system, and send and receive only Unicode 5.0.0 data streams.

The following example shows how Unicode versions are assigned after upgrading to ZFS file system Version 8 and ZFS pool Version 49:

% zpool create pool
% zfs create -o unicode=5.0.0 pool/fs
% zfs create pool/fs14
% zfs create pool/fs/child
% zfs list -o name,unicode -r pool
NAME           UNICODE
pool            14.0.0
pool/fs          5.0.0
pool/fs/child    5.0.0
pool/fs14       14.0.0

The ZFS file system version determines the default Unicode version and which Unicode versions you can specify. As a result, you can use the version property to indirectly specify the Unicode version.

The following example shows that creating a file system with ZFS file system Version 7 uses Unicode 5.0.0 because it's the only available Unicode version:

% zfs create -o version=7 pool/fs_v7
% zfs get unicode pool/fs_v7
NAME        PROPERTY  VALUE  SOURCE
pool/fs_v7  unicode   5.0.0  -

This example shows that creating a file system with ZFS file system Version 8 uses Unicode 14.0.0 because it's the latest available Unicode version:

% zfs create -o version=8 pool/fs_v8
% zfs get unicode pool/fs_v8
NAME        PROPERTY  VALUE  SOURCE
pool/fs_v8  unicode   14.0.0 -

The following example shows how you can specify both the unicode property and the version property to create ZFS file systems. The first command shows that you can specify the Unicode version (5.0.0) that matches the ZFS file system version (7) to create the pool/fs_v7 file system. The second command fails to create pool/fs_v7_14 when you specify a Unicode version (14.0.0) that does not match the ZFS file system version (7).

% zfs create -o version=7 -o unicode=5.0.0 pool/fs_v7
% zfs create -o version=7 -o unicode=14.0.0 pool/fs_v7_14
cannot create 'pool/fs_v7_14': requested property incompatible
with filesystem version