[要約] RFC 5664は、オブジェクトベースの並列NFS(pNFS)操作に関する仕様であり、pNFSの目的は、NFSプロトコルを拡張して、並列アクセスと高いパフォーマンスを提供することです。

Internet Engineering Task Force (IETF)                         B. Halevy
Request for Comments: 5664                                      B. Welch
Category: Standards Track                                     J. Zelenka
ISSN: 2070-1721                                                  Panasas
                                                            January 2010
        

Object-Based Parallel NFS (pNFS) Operations

オブジェクトベースの並列NFS(PNFS)操作

Abstract

概要

Parallel NFS (pNFS) extends Network File System version 4 (NFSv4) to allow clients to directly access file data on the storage used by the NFSv4 server. This ability to bypass the server for data access can increase both performance and parallelism, but requires additional client functionality for data access, some of which is dependent on the class of storage used, a.k.a. the Layout Type. The main pNFS operations and data types in NFSv4 Minor version 1 specify a layout-type-independent layer; layout-type-specific information is conveyed using opaque data structures whose internal structure is further defined by the particular layout type specification. This document specifies the NFSv4.1 Object-Based pNFS Layout Type as a companion to the main NFSv4 Minor version 1 specification.

Parallel NFS(PNFS)は、ネットワークファイルシステムバージョン4(NFSV4)を拡張して、NFSV4サーバーが使用するストレージ上のファイルデータに直接アクセスできるようにします。データアクセスのためにサーバーをバイパスするこの機能は、パフォーマンスと並列性の両方を向上させる可能性がありますが、データアクセスには追加のクライアント機能が必要です。その一部は、使用されるストレージのクラス、レイアウトタイプに依存します。NFSV4マイナーバージョン1の主なPNFS操作とデータ型は、レイアウトタイプに依存しないレイヤーを指定します。レイアウトタイプ固有の情報は、特定のレイアウトタイプの仕様によって内部構造がさらに定義される不透明なデータ構造を使用して伝えられます。このドキュメントは、NFSV4.1オブジェクトベースのPNFSレイアウトタイプをメインNFSV4マイナーバージョン1仕様のコンパニオンとして指定します。

Status of This Memo

本文書の位置付け

This is an Internet Standards Track document.

これは、インターネット標準トラックドキュメントです。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

このドキュメントは、インターネットエンジニアリングタスクフォース(IETF)の製品です。IETFコミュニティのコンセンサスを表しています。公開レビューを受けており、インターネットエンジニアリングステアリンググループ(IESG)からの出版が承認されています。インターネット標準の詳細については、RFC 5741のセクション2で入手できます。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc5664.

このドキュメントの現在のステータス、任意のERRATA、およびそのフィードバックを提供する方法に関する情報は、http://www.rfc-editor.org/info/rfc5664で取得できます。

Copyright Notice

著作権表示

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved.

Copyright(c)2010 IETF Trustおよび文書著者として特定された人。全著作権所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

このドキュメントは、BCP 78およびIETFドキュメント(http://trustee.ietf.org/license-info)に関連するIETF Trustの法的規定の対象となります。この文書に関するあなたの権利と制限を説明するので、これらの文書を注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、セクション4.Eで説明されている法的規定のセクション4.Eで説明されており、単純化されたBSDライセンスで説明されているように保証なしで提供される簡略化されたBSDライセンステキストを含める必要があります。

Table of Contents

目次

   1. Introduction ....................................................3
      1.1. Requirements Language ......................................4
   2. XDR Description of the Objects-Based Layout Protocol ............4
      2.1. Code Components Licensing Notice ...........................4
   3. Basic Data Type Definitions .....................................6
      3.1. pnfs_osd_objid4 ............................................6
      3.2. pnfs_osd_version4 ..........................................6
      3.3. pnfs_osd_object_cred4 ......................................7
      3.4. pnfs_osd_raid_algorithm4 ...................................8
   4. Object Storage Device Addressing and Discovery ..................8
      4.1. pnfs_osd_targetid_type4 ...................................10
      4.2. pnfs_osd_deviceaddr4 ......................................10
           4.2.1. SCSI Target Identifier .............................11
           4.2.2. Device Network Address .............................11
   5. Object-Based Layout ............................................12
      5.1. pnfs_osd_data_map4 ........................................13
      5.2. pnfs_osd_layout4 ..........................................14
      5.3. Data Mapping Schemes ......................................14
           5.3.1. Simple Striping ....................................15
           5.3.2. Nested Striping ....................................16
           5.3.3. Mirroring ..........................................17
      5.4. RAID Algorithms ...........................................18
           5.4.1. PNFS_OSD_RAID_0 ....................................18
           5.4.2. PNFS_OSD_RAID_4 ....................................18
           5.4.3. PNFS_OSD_RAID_5 ....................................18
           5.4.4. PNFS_OSD_RAID_PQ ...................................19
           5.4.5. RAID Usage and Implementation Notes ................19
   6. Object-Based Layout Update .....................................20
      6.1. pnfs_osd_deltaspaceused4 ..................................20
      6.2. pnfs_osd_layoutupdate4 ....................................21
   7. Recovering from Client I/O Errors ..............................21
      8. Object-Based Layout Return .....................................22
      8.1. pnfs_osd_errno4 ...........................................23
      8.2. pnfs_osd_ioerr4 ...........................................24
      8.3. pnfs_osd_layoutreturn4 ....................................24
   9. Object-Based Creation Layout Hint ..............................25
      9.1. pnfs_osd_layouthint4 ......................................25
   10. Layout Segments ...............................................26
      10.1. CB_LAYOUTRECALL and LAYOUTRETURN .........................27
      10.2. LAYOUTCOMMIT .............................................27
   11. Recalling Layouts .............................................27
      11.1. CB_RECALL_ANY ............................................28
   12. Client Fencing ................................................29
   13. Security Considerations .......................................29
      13.1. OSD Security Data Types ..................................30
      13.2. The OSD Security Protocol ................................30
      13.3. Protocol Privacy Requirements ............................32
      13.4. Revoking Capabilities ....................................32
   14. IANA Considerations ...........................................33
   15. References ....................................................33
      15.1. Normative References .....................................33
      15.2. Informative References ...................................34
   Appendix A.  Acknowledgments ......................................35
        
1. Introduction
1. はじめに

In pNFS, the file server returns typed layout structures that describe where file data is located. There are different layouts for different storage systems and methods of arranging data on storage devices. This document describes the layouts used with object-based storage devices (OSDs) that are accessed according to the OSD storage protocol standard (ANSI INCITS 400-2004 [1]).

PNFSでは、ファイルサーバーは、ファイルデータがどこにあるかを説明するタイプ付きレイアウト構造を返します。さまざまなストレージシステムとストレージデバイスのデータを配置する方法にはさまざまなレイアウトがあります。このドキュメントでは、OSDストレージプロトコル標準に従ってアクセスされるオブジェクトベースのストレージデバイス(OSD)で使用されるレイアウトについて説明します(ANSIは400-2004 [1])。

An "object" is a container for data and attributes, and files are stored in one or more objects. The OSD protocol specifies several operations on objects, including READ, WRITE, FLUSH, GET ATTRIBUTES, SET ATTRIBUTES, CREATE, and DELETE. However, using the object-based layout the client only uses the READ, WRITE, GET ATTRIBUTES, and FLUSH commands. The other commands are only used by the pNFS server.

「オブジェクト」はデータと属性のコンテナであり、ファイルは1つ以上のオブジェクトに保存されます。OSDプロトコルは、読み取り、書き込み、フラッシュ、属性の取得、設定属性、作成、削除など、オブジェクトのいくつかの操作を指定します。ただし、オブジェクトベースのレイアウトを使用して、クライアントは読み取り、書き込み、属性の取得、およびフラッシュコマンドのみを使用します。他のコマンドは、PNFSサーバーによってのみ使用されます。

An object-based layout for pNFS includes object identifiers, capabilities that allow clients to READ or WRITE those objects, and various parameters that control how file data is striped across their component objects. The OSD protocol has a capability-based security scheme that allows the pNFS server to control what operations and what objects can be used by clients. This scheme is described in more detail in the "Security Considerations" section (Section 13).

PNFSのオブジェクトベースのレイアウトには、オブジェクト識別子、クライアントがそれらのオブジェクトを読み書きできるか書き込みできる機能、およびコンポーネントオブジェクト全体でファイルデータが縞模様になる方法を制御するさまざまなパラメーターが含まれます。OSDプロトコルには、PNFSサーバーがクライアントが使用できるオブジェクトを制御できるようにする機能ベースのセキュリティスキームがあります。このスキームについては、「セキュリティ上の考慮事項」セクション(セクション13)で詳細に説明します。

1.1. Requirements Language
1.1. 要件言語

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [2].

「必須」、「そうしない」、「必須」、「必要」、「しない」、「そうしない」、「そうではない」、「そうでない」、「推奨」、「5月」、および「オプション」は、RFC 2119 [2]に記載されているように解釈される。

2. XDR Description of the Objects-Based Layout Protocol
2. XDRオブジェクトベースのレイアウトプロトコルの説明

This document contains the external data representation (XDR [3]) description of the NFSv4.1 objects layout protocol. The XDR description is embedded in this document in a way that makes it simple for the reader to extract into a ready-to-compile form. The reader can feed this document into the following shell script to produce the machine readable XDR description of the NFSv4.1 objects layout protocol:

このドキュメントには、NFSV4.1オブジェクトレイアウトプロトコルの外部データ表現(XDR [3])の説明が含まれています。XDRの説明は、このドキュメントに組み込まれており、読者がすぐにコンパイルできるフォームに抽出できるようにします。読者はこのドキュメントを次のシェルスクリプトに送り込み、NFSV4.1オブジェクトレイアウトプロトコルの機械読み取り可能なXDR説明を作成できます。

   #!/bin/sh
   grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
        

That is, if the above script is stored in a file called "extract.sh", and this document is in a file called "spec.txt", then the reader can do:

つまり、上記のスクリプトが「extract.sh」というファイルに保存され、このドキュメントが「spec.txt」というファイルにある場合、読者は次のことができます。

sh extract.sh < spec.txt > pnfs_osd_prot.x

sh extract.sh <Spec.txt> pnfs_osd_prot.x

The effect of the script is to remove leading white space from each line, plus a sentinel sequence of "///".

スクリプトの効果は、各ラインから先頭の空白を削除することと、「///」のセンチネルシーケンスを削除することです。

The embedded XDR file header follows. Subsequent XDR descriptions, with the sentinel sequence are embedded throughout the document.

埋め込まれたXDRファイルヘッダーが続きます。その後のXDRの説明、センチネルシーケンスがドキュメント全体に埋め込まれています。

Note that the XDR code contained in this document depends on types from the NFSv4.1 nfs4_prot.x file ([4]). This includes both nfs types that end with a 4, such as offset4, length4, etc., as well as more generic types such as uint32_t and uint64_t.

このドキュメントに含まれるXDRコードは、NFSV4.1 NFS4_Prot.xファイル([4])のタイプに依存することに注意してください。これには、Offset4、length4などなど、4で終了するNFSタイプと、UINT32_TやUINT64_Tなどのより一般的なタイプが含まれます。

2.1. Code Components Licensing Notice
2.1. コードコンポーネントライセンス通知

The XDR description, marked with lines beginning with the sequence "///", as well as scripts for extracting the XDR description are Code Components as described in Section 4 of "Legal Provisions Relating to IETF Documents" [5]. These Code Components are licensed according to the terms of Section 4 of "Legal Provisions Relating to IETF Documents".

シーケンス「///」で始まる行でマークされたXDRの説明と、XDR説明を抽出するためのスクリプトは、「IETFドキュメントに関連する法的規定」のセクション4で説明されているコードコンポーネントです[5]。これらのコードコンポーネントは、「IETFドキュメントに関連する法的規定」のセクション4の条件に従ってライセンスされています。

   /// /*
   ///  * Copyright (c) 2010 IETF Trust and the persons identified
   ///  * as authors of the code.  All rights reserved.
   ///  *
   ///  * Redistribution and use in source and binary forms, with
   ///  * or without modification, are permitted provided that the
   ///  * following conditions are met:
   ///  *
   ///  * o Redistributions of source code must retain the above
   ///  *   copyright notice, this list of conditions and the
   ///  *   following disclaimer.
   ///  *
   ///  * o Redistributions in binary form must reproduce the above
   ///  *   copyright notice, this list of conditions and the
   ///  *   following disclaimer in the documentation and/or other
   ///  *   materials provided with the distribution.
   ///  *
   ///  * o Neither the name of Internet Society, IETF or IETF
   ///  *   Trust, nor the names of specific contributors, may be
   ///  *   used to endorse or promote products derived from this
   ///  *   software without specific prior written permission.
   ///  *
   ///  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
   ///  *   AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
   ///  *   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   ///  *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   ///  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
   ///  *   EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   ///  *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   ///  *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   ///  *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   ///  *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   ///  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   ///  *   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   ///  *   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
   ///  *   IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   ///  *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   ///  *
   ///  * This code was derived from RFC 5664.
   ///  * Please reproduce this note if possible.
   ///  */
   ///
   /// /*
   ///  * pnfs_osd_prot.x
   ///  */
   ///
   /// %#include <nfs4_prot.x>
   ///
        
3. Basic Data Type Definitions
3. 基本的なデータ型定義

The following sections define basic data types and constants used by the Object-Based Layout protocol.

次のセクションでは、オブジェクトベースのレイアウトプロトコルで使用される基本データ型と定数を定義します。

3.1. pnfs_osd_objid4
3.1. pnfs_osd_objid4

An object is identified by a number, somewhat like an inode number. The object storage model has a two-level scheme, where the objects within an object storage device are grouped into partitions.

オブジェクトは、数字で識別されます。オブジェクトストレージモデルには2レベルのスキームがあり、オブジェクトストレージデバイス内のオブジェクトがパーティションにグループ化されます。

   /// struct pnfs_osd_objid4 {
   ///     deviceid4       oid_device_id;
   ///     uint64_t        oid_partition_id;
   ///     uint64_t        oid_object_id;
   /// };
   ///
        

The pnfs_osd_objid4 type is used to identify an object within a partition on a specified object storage device. "oid_device_id" selects the object storage device from the set of available storage devices. The device is identified with the deviceid4 type, which is an index into addressing information about that device returned by the GETDEVICELIST and GETDEVICEINFO operations. The deviceid4 data type is defined in NFSv4.1 [6]. Within an OSD, a partition is identified with a 64-bit number, "oid_partition_id". Within a partition, an object is identified with a 64-bit number, "oid_object_id". Creation and management of partitions is outside the scope of this document, and is a facility provided by the object-based storage file system.

PNFS_OSD_OBJID4タイプは、指定されたオブジェクトストレージデバイス上のパーティション内のオブジェクトを識別するために使用されます。「OID_DEVICE_ID」は、使用可能なストレージデバイスのセットからオブジェクトストレージデバイスを選択します。このデバイスは、GetDeviceListおよびgetDeviceInfo操作によって返されたデバイスに関する情報に対処するインデックスであるDeviceID4タイプで識別されます。DeviceID4データ型は、NFSV4.1 [6]で定義されています。OSD内で、パーティションは64ビット番号「OID_PARTITION_ID」で識別されます。パーティション内で、オブジェクトは64ビット番号「OID_OBJECT_ID」で識別されます。パーティションの作成と管理は、このドキュメントの範囲外であり、オブジェクトベースのストレージファイルシステムが提供する機能です。

3.2. pnfs_osd_version4
3.2. pnfs_osd_version4
   /// enum pnfs_osd_version4 {
   ///     PNFS_OSD_MISSING    = 0,
   ///     PNFS_OSD_VERSION_1  = 1,
   ///     PNFS_OSD_VERSION_2  = 2
   /// };
   ///
        

pnfs_osd_version4 is used to indicate the OSD protocol version or whether an object is missing (i.e., unavailable). Some of the object-based layout-supported RAID algorithms encode redundant information and can compensate for missing components, but the data placement algorithm needs to know what parts are missing.

PNFS_OSD_Version4は、OSDプロトコルバージョンまたはオブジェクトが欠落しているかどうかを示すために使用されます(つまり、利用できません)。オブジェクトベースのレイアウトサポートされたRAIDアルゴリズムの一部は、冗長な情報をエンコードし、不足しているコンポーネントを補正できますが、データ配置アルゴリズムはどの部分が欠落しているかを知る必要があります。

At this time, the OSD standard is at version 1.0, and we anticipate a version 2.0 of the standard (SNIA T10/1729-D [14]). The second generation OSD protocol has additional proposed features to support more robust error recovery, snapshots, and byte-range capabilities. Therefore, the OSD version is explicitly called out in the information returned in the layout. (This information can also be deduced by looking inside the capability type at the format field, which is the first byte. The format value is 0x1 for an OSD v1 capability. However, it seems most robust to call out the version explicitly.)

この時点で、OSD標準はバージョン1.0にあり、標準のバージョン2.0(SNIA T10/1729-D [14])が予想されます。第2世代のOSDプロトコルには、より堅牢なエラー回復、スナップショット、およびバイト範囲の機能をサポートするための追加の提案機能があります。したがって、OSDバージョンは、レイアウトで返された情報で明示的に呼び出されます。(この情報は、最初のバイトであるフォーマットフィールドの機能タイプの内部を調べることで推定することもできます。OSDV1機能の形式値は0x1です。ただし、バージョンを明示的に呼び出すことは最も堅牢です。)

3.3. pnfs_osd_object_cred4
3.3. pnfs_osd_object_cred4
   /// enum pnfs_osd_cap_key_sec4 {
   ///     PNFS_OSD_CAP_KEY_SEC_NONE = 0,
   ///     PNFS_OSD_CAP_KEY_SEC_SSV  = 1
   /// };
   ///
   /// struct pnfs_osd_object_cred4 {
   ///     pnfs_osd_objid4         oc_object_id;
   ///     pnfs_osd_version4       oc_osd_version;
   ///     pnfs_osd_cap_key_sec4   oc_cap_key_sec;
   ///     opaque                  oc_capability_key<>;
   ///     opaque                  oc_capability<>;
   /// };
   ///
        

The pnfs_osd_object_cred4 structure is used to identify each component comprising the file. The "oc_object_id" identifies the component object, the "oc_osd_version" represents the osd protocol version, or whether that component is unavailable, and the "oc_capability" and "oc_capability_key", along with the "oda_systemid" from the pnfs_osd_deviceaddr4, provide the OSD security credentials needed to access that object. The "oc_cap_key_sec" value denotes the method used to secure the oc_capability_key (see Section 13.1 for more details).

pnfs_osd_object_cred4構造は、ファイルを構成する各コンポーネントを識別するために使用されます。「oc_object_id」は、コンポーネントオブジェクト、「oc_osd_version」はOSDプロトコルバージョン、またはそのコンポーネントが利用できないかどうか、「oc_capability」と「oc_capability_key」を表し、pnfs_osd_osd_deveaddr4からの「oda_-systemid」を表します。そのオブジェクトにアクセスするために必要な資格情報。「oc_cap_key_sec」値は、oc_capability_keyを保護するために使用されるメソッドを示します(詳細については、セクション13.1を参照)。

To comply with the OSD security requirements, the capability key SHOULD be transferred securely to prevent eavesdropping (see Section 13). Therefore, a client SHOULD either issue the LAYOUTGET or GETDEVICEINFO operations via RPCSEC_GSS with the privacy service or previously establish a secret state verifier (SSV) for the sessions via the NFSv4.1 SET_SSV operation. The pnfs_osd_cap_key_sec4 type is used to identify the method used by the server to secure the capability key.

OSDセキュリティ要件を遵守するには、盗聴を防ぐために機能キーを安全に転送する必要があります(セクション13を参照)。したがって、クライアントは、RPCSEC_GSSを介してプライバシーサービスを使用してレイアウトゲットまたはGetDeviceInfo操作を発行するか、NFSV4.1 SET_SSV操作を介してセッションのSecret State Verifier(SSV)を以前に確立する必要があります。PNFS_OSD_CAP_KEY_SEC4タイプは、機能キーを保護するためにサーバーが使用するメソッドを識別するために使用されます。

o PNFS_OSD_CAP_KEY_SEC_NONE denotes that the oc_capability_key is not encrypted, in which case the client SHOULD issue the LAYOUTGET or GETDEVICEINFO operations with RPCSEC_GSS with the privacy service or the NFSv4.1 transport should be secured by using methods that are external to NFSv4.1 like the use of IPsec [15] for transporting the NFSV4.1 protocol.

o pnfs_osd_cap_key_sec_noneは、oc_capability_keyが暗号化されていないことを示しています。その場合、クライアントはプライバシーサービスでRPCSEC_GSSを使用してレイアウトゲットまたはgetDeviceInfo操作を発行する必要があります。NFSV4.1プロトコルを輸送するためのIPSEC [15]。

o PNFS_OSD_CAP_KEY_SEC_SSV denotes that the oc_capability_key contents are encrypted using the SSV GSS context and the capability key as inputs to the GSS_Wrap() function (see GSS-API [7]) with the conf_req_flag set to TRUE. The client MUST use the secret SSV key as part of the client's GSS context to decrypt the capability key using the value of the oc_capability_key field as the input_message to the GSS_unwrap() function. Note that to prevent eavesdropping of the SSV key, the client SHOULD issue SET_SSV via RPCSEC_GSS with the privacy service.

o pnfs_osd_cap_key_sec_ssvは、oc_capabilityのコンテンツがssv gssコンテキストを使用して暗号化され、conf_req_flagセットを使用してgss_wrap()関数への入力(gss-api [7]を参照)としてssv gssコンテキストを使用して暗号化されていることを示します。クライアントは、secret SSVキーをクライアントのGSSコンテキストの一部として使用して、gss_unwrap()関数のinput_messageとしてoc_capability_keyフィールドの値を使用して機能キーを復号化する必要があります。SSVキーの盗聴を防ぐために、クライアントはプライバシーサービスでRPCSEC_GSSを介してSET_SSVを発行する必要があることに注意してください。

The actual method chosen depends on whether the client established a SSV key with the server and whether it issued the operation with the RPCSEC_GSS privacy method. Naturally, if the client did not establish an SSV key via SET_SSV, the server MUST use the PNFS_OSD_CAP_KEY_SEC_NONE method. Otherwise, if the operation was not issued with the RPCSEC_GSS privacy method, the server SHOULD secure the oc_capability_key with the PNFS_OSD_CAP_KEY_SEC_SSV method. The server MAY use the PNFS_OSD_CAP_KEY_SEC_SSV method also when the operation was issued with the RPCSEC_GSS privacy method.

選択した実際のメソッドは、クライアントがサーバーでSSVキーを確立したかどうか、およびRPCSEC_GSSプライバシー法で操作を発行したかどうかによって異なります。当然のことながら、クライアントがSET_SSVを介してSSVキーを確立しなかった場合、サーバーはPNFS_OSD_CAP_KEY_SEC_NONEメソッドを使用する必要があります。それ以外の場合、操作がRPCSEC_GSSプライバシーメソッドで発行されていない場合、サーバーはPNFS_OSD_CAP_KEY_SEC_SSVメソッドでOC_CAPABILITY_KEYを保護する必要があります。サーバーは、RPCSEC_GSSプライバシーメソッドで操作が発行された場合にも、PNFS_OSD_CAP_KEY_SEC_SSVメソッドを使用できます。

3.4. pnfs_osd_raid_algorithm4
3.4. PNFS_OSD_RAID_ALGORITHM4
   /// enum pnfs_osd_raid_algorithm4 {
   ///     PNFS_OSD_RAID_0     = 1,
   ///     PNFS_OSD_RAID_4     = 2,
   ///     PNFS_OSD_RAID_5     = 3,
   ///     PNFS_OSD_RAID_PQ    = 4     /* Reed-Solomon P+Q */
   /// };
   ///
        

pnfs_osd_raid_algorithm4 represents the data redundancy algorithm used to protect the file's contents. See Section 5.4 for more details.

PNFS_OSD_RAID_ALGORITHM4は、ファイルの内容を保護するために使用されるデータ冗長性アルゴリズムを表します。詳細については、セクション5.4を参照してください。

4. Object Storage Device Addressing and Discovery
4. オブジェクトストレージデバイスアドレス指定と発見

Data operations to an OSD require the client to know the "address" of each OSD's root object. The root object is synonymous with the Small Computer System Interface (SCSI) logical unit. The client specifies SCSI logical units to its SCSI protocol stack using a representation local to the client. Because these representations are local, GETDEVICEINFO must return information that can be used by the client to select the correct local representation.

OSDへのデータ操作では、クライアントが各OSDのルートオブジェクトの「アドレス」を知る必要があります。ルートオブジェクトは、小さなコンピューターシステムインターフェイス(SCSI)論理ユニットと同義です。クライアントは、クライアントにローカルな表現を使用して、SCSIプロトコルスタックにSCSI論理ユニットを指定します。これらの表現はローカルであるため、getDeviceInfoは、クライアントが使用して正しいローカル表現を選択できる情報を返す必要があります。

In the block world, a set offset (logical block number or track/ sector) contains a disk label. This label identifies the disk uniquely. In contrast, an OSD has a standard set of attributes on its root object. For device identification purposes, the OSD System ID (root information attribute number 3) and the OSD Name (root information attribute number 9) are used as the label. These appear in the pnfs_osd_deviceaddr4 type below under the "oda_systemid" and "oda_osdname" fields.

ブロックの世界では、セットオフセット(論理ブロック番号またはトラック/セクター)にはディスクラベルが含まれています。このラベルは、ディスクをユニークに識別します。対照的に、OSDには、ルートオブジェクトに標準の属性セットがあります。デバイスの識別目的では、OSDシステムID(ルート情報属性番号3)とOSD名(ルート情報属性番号9)がラベルとして使用されます。これらは、「ODA_SYSTEMID」および「ODA_OSDNAME」フィールドの下に下のPNFS_OSD_DEVICEADDR4タイプに表示されます。

In some situations, SCSI target discovery may need to be driven based on information contained in the GETDEVICEINFO response. One example of this is Internet SCSI (iSCSI) targets that are not known to the client until a layout has been requested. The information provided as the "oda_targetid", "oda_targetaddr", and "oda_lun" fields in the pnfs_osd_deviceaddr4 type described below (see Section 4.2) allows the client to probe a specific device given its network address and optionally its iSCSI Name (see iSCSI [8]), or when the device network address is omitted, allows it to discover the object storage device using the provided device name or SCSI Device Identifier (see SPC-3 [9].)

状況によっては、SCSIターゲットの発見は、GetDeviceInfo応答に含まれる情報に基づいて推進する必要がある場合があります。この一例は、レイアウトが要求されるまでクライアントに知られていないインターネットSCSI(ISCSI)ターゲットです。「ODA_TARGETID」、「ODA_TARGETADDR」、およびPNFS_OSD_DEVICEADDR4タイプの「ODA_LUN」フィールドとして提供される情報は、以下に説明する(セクション4.2を参照)により、クライアントはネットワークアドレスとオプションのISCSI名を指定した特定のデバイスをプローブできます(ISCSI [参照[ISCSI]8])、またはデバイスネットワークアドレスが省略されている場合、提供されたデバイス名またはSCSIデバイス識別子を使用してオブジェクトストレージデバイスを検出できます(SPC-3 [9]を参照)。

The oda_systemid is implicitly used by the client, by using the object credential signing key to sign each request with the request integrity check value. This method protects the client from unintentionally accessing a device if the device address mapping was changed (or revoked). The server computes the capability key using its own view of the systemid associated with the respective deviceid present in the credential. If the client's view of the deviceid mapping is stale, the client will use the wrong systemid (which must be system-wide unique) and the I/O request to the OSD will fail to pass the integrity check verification.

ODA_SystemIDは、オブジェクトの資格情報署名キーを使用して各リクエストにリクエスト整合性チェック値で署名することにより、クライアントが暗黙的に使用します。この方法は、デバイスアドレスマッピングが変更された(または取り消された)場合、クライアントがデバイスに意図せずにアクセスすることを保護します。サーバーは、資格情報に存在するそれぞれのDeviceIDに関連付けられたSystemIDの独自のビューを使用して、機能キーを計算します。DeviceIDマッピングのクライアントのビューが古くなっている場合、クライアントは間違ったSystemID(システム全体の一意でなければなりません)を使用し、OSDへのI/O要求は整合性チェック検証に合格しません。

To recover from this condition the client should report the error and return the layout using LAYOUTRETURN, and invalidate all the device address mappings associated with this layout. The client can then ask for a new layout if it wishes using LAYOUTGET and resolve the referenced deviceids using GETDEVICEINFO or GETDEVICELIST.

この条件から回復するには、クライアントはエラーを報告し、LayouTreturnを使用してレイアウトを返し、このレイアウトに関連付けられたすべてのデバイスアドレスマッピングを無効にします。その後、クライアントは、レイアウトゲットの使用を希望する場合は新しいレイアウトを要求し、getDeviceInfoまたはgetDeviceListを使用して参照されたDeviceIDを解決できます。

The server MUST provide the oda_systemid and SHOULD also provide the oda_osdname. When the OSD name is present, the client SHOULD get the root information attributes whenever it establishes communication with the OSD and verify that the OSD name it got from the OSD matches the one sent by the metadata server. To do so, the client uses the root_obj_cred credentials.

サーバーはODA_SystemIDを提供する必要があり、ODA_OSDNAMEも提供する必要があります。OSD名が存在する場合、クライアントはOSDとの通信を確立し、OSDから得たOSD名がメタデータサーバーによって送信されたものと一致することを確認するたびに、ルート情報属性を取得する必要があります。そのために、クライアントはroot_obj_cred資格情報を使用します。

4.1. pnfs_osd_targetid_type4
4.1. PNFS_OSD_TARGETID_TYPE4

The following enum specifies the manner in which a SCSI target can be specified. The target can be specified as a SCSI Name, or as an SCSI Device Identifier.

次の列挙は、SCSIターゲットを指定できる方法を指定します。ターゲットは、SCSI名として、またはSCSIデバイス識別子として指定できます。

   /// enum pnfs_osd_targetid_type4 {
   ///     OBJ_TARGET_ANON             = 1,
   ///     OBJ_TARGET_SCSI_NAME        = 2,
   ///     OBJ_TARGET_SCSI_DEVICE_ID   = 3
   /// };
   ///
        
4.2. pnfs_osd_deviceaddr4
4.2. PNFS_OSD_DEVICEADDR4

The specification for an object device address is as follows:

オブジェクトデバイスアドレスの仕様は次のとおりです。

/// union pnfs_osd_targetid4 switch (pnfs_osd_targetid_type4 oti_type) {
///     case OBJ_TARGET_SCSI_NAME:
///         string              oti_scsi_name<>;
///
///     case OBJ_TARGET_SCSI_DEVICE_ID:
///         opaque              oti_scsi_device_id<>;
///
///     default:
///         void;
/// };
///
/// union pnfs_osd_targetaddr4 switch (bool ota_available) {
///     case TRUE:
///         netaddr4            ota_netaddr;
///     case FALSE:
///         void;
/// };
///
/// struct pnfs_osd_deviceaddr4 {
///     pnfs_osd_targetid4      oda_targetid;
///     pnfs_osd_targetaddr4    oda_targetaddr;
///     opaque                  oda_lun[8];
///     opaque                  oda_systemid<>;
///     pnfs_osd_object_cred4   oda_root_obj_cred;
///     opaque                  oda_osdname<>;
/// };
///
4.2.1.  SCSI Target Identifier
        

When "oda_targetid" is specified as an OBJ_TARGET_SCSI_NAME, the "oti_scsi_name" string MUST be formatted as an "iSCSI Name" as specified in iSCSI [8] and [10]. Note that the specification of the oti_scsi_name string format is outside the scope of this document. Parsing the string is based on the string prefix, e.g., "iqn.", "eui.", or "naa." and more formats MAY be specified in the future in accordance with iSCSI Names properties.

「ODA_TARGETID」がOBJ_TARGET_SCSI_NAMEとして指定されている場合、「OTI_SCSI_NAME」文字列は、ISCSI [8]および[10]で指定されている「ISCSI名」としてフォーマットする必要があります。OTI_SCSI_NAME文字列形式の仕様は、このドキュメントの範囲外であることに注意してください。文字列の解析は、文字列のプレフィックス、例えば「iqn」、「eui。」、または「naa。」に基づいています。ISCSI名のプロパティに従って、将来、より多くの形式が指定される場合があります。

Currently, the iSCSI Name provides for naming the target device using a string formatted as an iSCSI Qualified Name (IQN) or as an Extended Unique Identifier (EUI) [11] string. Those are typically used to identify iSCSI or Secure Routing Protocol (SRP) [16] devices. The Network Address Authority (NAA) string format (see [10]) provides for naming the device using globally unique identifiers, as defined in Fibre Channel Framing and Signaling (FC-FS) [17]. These are typically used to identify Fibre Channel or SAS [18] (Serial Attached SCSI) devices. In particular, such devices that are dual-attached both over Fibre Channel or SAS and over iSCSI.

現在、ISCSI名は、ISCSI適格名(IQN)としてフォーマットされた文字列または拡張一意の識別子(EUI)[11]文字列としてターゲットデバイスに名前を付けることを規定しています。これらは通常、ISCSIまたは安全なルーティングプロトコル(SRP)[16]デバイスを識別するために使用されます。ネットワークアドレス権限(NAA)文字列形式([10]を参照)は、ファイバーチャネルフレーミングとシグナル伝達(FC-FS)で定義されているように、グローバルに一意の識別子を使用してデバイスの名前を付けることを規定しています[17]。これらは通常、ファイバーチャネルまたはSAS [18](シリアル接続SCSI)デバイスを識別するために使用されます。特に、ファイバーチャネルまたはSASおよびISCSI上の両方でデュアル接続されているこのようなデバイス。

When "oda_targetid" is specified as an OBJ_TARGET_SCSI_DEVICE_ID, the "oti_scsi_device_id" opaque field MUST be formatted as a SCSI Device Identifier as defined in SPC-3 [9] VPD Page 83h (Section 7.6.3. "Device Identification VPD Page"). If the Device Identifier is identical to the OSD System ID, as given by oda_systemid, the server SHOULD provide a zero-length oti_scsi_device_id opaque value. Note that similarly to the "oti_scsi_name", the specification of the oti_scsi_device_id opaque contents is outside the scope of this document and more formats MAY be specified in the future in accordance with SPC-3.

「ODA_TARGETID」がOBJ_TARGET_SCSI_DEVICE_IDとして指定されている場合、「OTI_SCSI_DEVICE_ID」不透明フィールドは、SPC-3 [9] VPD Page 83Hで定義されたSCSIデバイス識別子としてフォーマットする必要があります(セクション7.6.3。Device IdentifierがOSDシステムIDと同一である場合、ODA_SystemIDによって与えられたように、サーバーはゼロ長OTI_SCSI_DEVICE_ID OPAQUE値を提供する必要があります。「OTI_SCSI_NAME」と同様に、OTI_SCSI_DEVICE_ID不透明コンテンツの仕様はこのドキュメントの範囲外であり、SPC-3に従って将来、より多くの形式が指定される可能性があることに注意してください。

The OBJ_TARGET_ANON pnfs_osd_targetid_type4 MAY be used for providing no target identification. In this case, only the OSD System ID, and optionally the provided network address, are used to locate the device.

obj_target_anon pnfs_osd_targetid_type4は、ターゲット識別を提供しないために使用できます。この場合、OSDシステムID、およびオプションで提供されたネットワークアドレスのみが、デバイスを見つけるために使用されます。

4.2.2. Device Network Address
4.2.2. デバイスネットワークアドレス

The optional "oda_targetaddr" field MAY be provided by the server as a hint to accelerate device discovery over, e.g., the iSCSI transport protocol. The network address is given with the netaddr4 type, which specifies a TCP/IP based endpoint (as specified in NFSv4.1 [6]). When given, the client SHOULD use it to probe for the SCSI device at the given network address. The client MAY still use other discovery mechanisms such as Internet Storage Name Service (iSNS) [12] to locate the device using the oda_targetid. In particular, such an external name service SHOULD be used when the devices may be attached to the network using multiple connections, and/or multiple storage fabrics (e.g., Fibre-Channel and iSCSI).

オプションの「ODA_TARGETADDR」フィールドは、ISCSI輸送プロトコルなどのデバイスの発見を加速するためのヒントとしてサーバーによって提供される場合があります。ネットワークアドレスは、TCP/IPベースのエンドポイント(NFSV4.1 [6]で指定されているように)を指定するNetADDR4タイプで指定されています。指定された場合、クライアントはそれを使用して、指定されたネットワークアドレスでSCSIデバイスのプローブを使用する必要があります。クライアントは、Internet Storage Name Service(ISNS)[12]などの他の発見メカニズムを使用して、ODA_TargetIDを使用してデバイスを見つけることができます。特に、このような外部名サービスは、複数の接続および/または複数のストレージファブリック(Fibre-ChannelやISCSIなど)を使用してデバイスをネットワークに接続できる場合に使用する必要があります。

The "oda_lun" field identifies the OSD 64-bit Logical Unit Number, formatted in accordance with SAM-3 [13]. The client uses the Logical Unit Number to communicate with the specific OSD Logical Unit. Its use is defined in detail by the SCSI transport protocol, e.g., iSCSI [8].

「ODA_LUN」フィールドは、SAM-3に従ってフォーマットされたOSD 64ビットの論理単位数を識別します[13]。クライアントは、論理ユニット番号を使用して、特定のOSD論理ユニットと通信します。その使用は、SCSI輸送プロトコル、例えばISCSI [8]によって詳細に定義されています。

5. Object-Based Layout
5. オブジェクトベースのレイアウト

The layout4 type is defined in the NFSv4.1 [6] as follows:

レイアウト4タイプは、次のようにNFSV4.1 [6]で定義されています。

enum layouttype4 { LAYOUT4_NFSV4_1_FILES = 1, LAYOUT4_OSD2_OBJECTS = 2, LAYOUT4_BLOCK_VOLUME = 3 };

enum layouttype4 {layout4_nfsv4_1_files = 1、layout4_osd2_objects = 2、layout4_block_volume = 3};

   struct layout_content4 {
       layouttype4             loc_type;
       opaque                  loc_body<>;
   };
        
   struct layout4 {
       offset4                 lo_offset;
       length4                 lo_length;
       layoutiomode4           lo_iomode;
       layout_content4         lo_content;
   };
        

This document defines structure associated with the layouttype4 value, LAYOUT4_OSD2_OBJECTS. The NFSv4.1 [6] specifies the loc_body structure as an XDR type "opaque". The opaque layout is uninterpreted by the generic pNFS client layers, but obviously must be interpreted by the object storage layout driver. This section defines the structure of this opaque value, pnfs_osd_layout4.

このドキュメントは、layoutType4値、layout4_osd2_objectsに関連付けられた構造を定義します。NFSV4.1 [6]は、loc_body構造をXDRタイプ「不透明」として指定します。不透明なレイアウトは、汎用PNFSクライアントレイヤーによって解釈されませんが、明らかにオブジェクトストレージレイアウトドライバーによって解釈する必要があります。このセクションでは、この不透明な値であるPNFS_OSD_LAYOUT4の構造を定義します。

5.1. pnfs_osd_data_map4
5.1. PNFS_OSD_DATA_MAP4
   /// struct pnfs_osd_data_map4 {
   ///     uint32_t                    odm_num_comps;
   ///     length4                     odm_stripe_unit;
   ///     uint32_t                    odm_group_width;
   ///     uint32_t                    odm_group_depth;
   ///     uint32_t                    odm_mirror_cnt;
   ///     pnfs_osd_raid_algorithm4    odm_raid_algorithm;
   /// };
   ///
        

The pnfs_osd_data_map4 structure parameterizes the algorithm that maps a file's contents over the component objects. Instead of limiting the system to simple striping scheme where loss of a single component object results in data loss, the map parameters support mirroring and more complicated schemes that protect against loss of a component object.

PNFS_OSD_DATA_MAP4構造は、コンポーネントオブジェクトにファイルの内容をマップするアルゴリズムをパラメーター化します。単一のコンポーネントオブジェクトの損失がデータ損失をもたらす単純なストライピングスキームにシステムを制限する代わりに、MAPパラメーターはミラーリングとコンポーネントオブジェクトの損失から保護するより複雑なスキームをサポートします。

"odm_num_comps" is the number of component objects the file is striped over. The server MAY grow the file by adding more components to the stripe while clients hold valid layouts until the file has reached its final stripe width. The file length in this case MUST be limited to the number of bytes in a full stripe.

「ODM_NUM_COMPS」は、ファイルがストライプしているコンポーネントオブジェクトの数です。サーバーは、ファイルが最終的なストライプ幅に達するまで、クライアントが有効なレイアウトを保持している間に、ストライプにコンポーネントを追加することでファイルを成長させる場合があります。この場合のファイルの長さは、完全なストライプのバイト数に制限する必要があります。

The "odm_stripe_unit" is the number of bytes placed on one component before advancing to the next one in the list of components. The number of bytes in a full stripe is odm_stripe_unit times the number of components. In some RAID schemes, a stripe includes redundant information (i.e., parity) that lets the system recover from loss or damage to a component object.

「ODM_STRIPE_UNIT」は、コンポーネントのリストの次のコンポーネントに進む前に、1つのコンポーネントに配置されたバイトの数です。完全なストライプのバイト数は、odm_stripe_unit倍のコンポーネント数です。一部のRAIDスキームでは、ストライプには、システムがコンポーネントオブジェクトの損失または損傷から回復できる冗長な情報(つまり、パリティ)が含まれます。

The "odm_group_width" and "odm_group_depth" parameters allow a nested striping pattern (see Section 5.3.2 for details). If there is no nesting, then odm_group_width and odm_group_depth MUST be zero. The size of the components array MUST be a multiple of odm_group_width.

「ODM_GROUP_WIDTH」および「ODM_GROUP_DEPTH」パラメーターは、ネストされたストライピングパターンを許可します(詳細については、セクション5.3.2を参照)。ネストがない場合は、odm_group_widthとodm_group_depthがゼロでなければなりません。コンポーネントアレイのサイズは、odm_group_widthの倍数である必要があります。

The "odm_mirror_cnt" is used to replicate a file by replicating its component objects. If there is no mirroring, then odm_mirror_cnt MUST be 0. If odm_mirror_cnt is greater than zero, then the size of the component array MUST be a multiple of (odm_mirror_cnt+1).

「ODM_MIRROR_CNT」は、コンポーネントオブジェクトを複製することにより、ファイルを複製するために使用されます。ミラーリングがない場合、ODM_MIRROR_CNTは0でなければなりません。ODM_MIRROR_CNTがゼロより大きい場合、コンポーネント配列のサイズは倍数(ODM_MIRROR_CNT 1)でなければなりません。

See Section 5.3 for more details.

詳細については、セクション5.3を参照してください。

5.2. pnfs_osd_layout4
5.2. pnfs_osd_layout4
   /// struct pnfs_osd_layout4 {
   ///     pnfs_osd_data_map4      olo_map;
   ///     uint32_t                olo_comps_index;
   ///     pnfs_osd_object_cred4   olo_components<>;
   /// };
   ///
        

The pnfs_osd_layout4 structure specifies a layout over a set of component objects. The "olo_components" field is an array of object identifiers and security credentials that grant access to each object. The organization of the data is defined by the pnfs_osd_data_map4 type that specifies how the file's data is mapped onto the component objects (i.e., the striping pattern). The data placement algorithm that maps file data onto component objects assumes that each component object occurs exactly once in the array of components. Therefore, component objects MUST appear in the olo_components array only once. The components array may represent all objects comprising the file, in which case "olo_comps_index" is set to zero and the number of entries in the olo_components array is equal to olo_map.odm_num_comps. The server MAY return fewer components than odm_num_comps, provided that the returned components are sufficient to access any byte in the layout's data range (e.g., a sub-stripe of "odm_group_width" components). In this case, olo_comps_index represents the position of the returned components array within the full array of components that comprise the file.

PNFS_OSD_LAYOUT4構造は、コンポーネントオブジェクトのセット上のレイアウトを指定します。「OLO_COMPONENTS」フィールドは、各オブジェクトへのアクセスを付与するオブジェクト識別子とセキュリティ資格情報の配列です。データの構成は、ファイルのデータがコンポーネントオブジェクトにマッピングされる方法を指定するPNFS_OSD_DATA_MAP4タイプによって定義されます(つまり、ストライピングパターン)。コンポーネントオブジェクトにデータをマップするデータ配置アルゴリズムは、各コンポーネントオブジェクトがコンポーネントの配列で正確に1回発生することを前提としています。したがって、コンポーネントオブジェクトは、olo_componentsアレイに1回だけ表示する必要があります。コンポーネントアレイは、ファイルを含むすべてのオブジェクトを表す場合があります。この場合、「olo_comps_index」はゼロに設定され、olo_componentsアレイのエントリ数はolo_map.odm_num_compsに等しくなります。返されたコンポーネントがレイアウトのデータ範囲内のバイトにアクセスするのに十分である場合、サーバーはODM_NUM_COMPSよりも少ないコンポーネントを返す場合があります(たとえば、「ODM_GROUP_WIDTH」コンポーネントのサブストライプ。この場合、olo_comps_indexは、ファイルを構成するコンポーネントの完全な配列内の返されたコンポーネント配列の位置を表します。

Note that the layout depends on the file size, which the client learns from the generic return parameters of LAYOUTGET, by doing GETATTR commands to the metadata server. The client uses the file size to decide if it should fill holes with zeros or return a short read. Striping patterns can cause cases where component objects are shorter than other components because a hole happens to correspond to the last part of the component object.

レイアウトはファイルサイズに依存します。ファイルサイズは、メタデータサーバーにgetATTRコマンドを実行することにより、レイアウトゲットの汎用パラメーターから学習することに依存します。クライアントは、ファイルサイズを使用して、Zerosで穴を埋めるか、短い読み取りを返すかを決定します。穴がコンポーネントオブジェクトの最後の部分に対応するため、ストライピングパターンは、コンポーネントオブジェクトが他のコンポーネントよりも短いケースを引き起こす可能性があります。

5.3. Data Mapping Schemes
5.3. データマッピングスキーム

This section describes the different data mapping schemes in detail. The object layout always uses a "dense" layout as described in NFSv4.1 [6]. This means that the second stripe unit of the file starts at offset 0 of the second component, rather than at offset stripe_unit bytes. After a full stripe has been written, the next stripe unit is appended to the first component object in the list without any holes in the component objects.

このセクションでは、さまざまなデータマッピングスキームについて詳しく説明します。オブジェクトレイアウトは、NFSV4.1 [6]で説明されているように、常に「密な」レイアウトを使用します。これは、ファイルの2番目のストライプユニットが、オフセットStripe_unitバイトではなく、2番目のコンポーネントのオフセット0から始まることを意味します。完全なストライプが書かれた後、次のストライプユニットは、コンポーネントオブジェクトに穴が開けずにリスト内の最初のコンポーネントオブジェクトに追加されます。

5.3.1. Simple Striping
5.3.1. シンプルなストライピング

The mapping from the logical offset within a file (L) to the component object C and object-specific offset O is defined by the following equations:

ファイル内の論理オフセット(L)からコンポーネントオブジェクトCおよびオブジェクト固有のオフセットOへのマッピングは、次の方程式によって定義されます。

   L = logical offset into the file
   W = total number of components
   S = W * stripe_unit
   N = L / S
   C = (L-(N*S)) / stripe_unit
   O = (N*stripe_unit)+(L%stripe_unit)
        

In these equations, S is the number of bytes in a full stripe, and N is the stripe number. C is an index into the array of components, so it selects a particular object storage device. Both N and C count from zero. O is the offset within the object that corresponds to the file offset. Note that this computation does not accommodate the same object appearing in the olo_components array multiple times.

これらの方程式では、Sは完全なストライプのバイト数、nはストライプ数です。Cはコンポーネントの配列へのインデックスであるため、特定のオブジェクトストレージデバイスを選択します。NとCの両方がゼロからカウントされます。oは、ファイルオフセットに対応するオブジェクト内のオフセットです。この計算は、olo_componentsアレイに複数回表示される同じオブジェクトに対応していないことに注意してください。

For example, consider an object striped over four devices, <D0 D1 D2 D3>. The stripe_unit is 4096 bytes. The stripe width S is thus 4 * 4096 = 16384.

たとえば、4つのデバイスに縞模様のオブジェクト、<D0 D1 D2 D3>を考えてみましょう。stripe_unitは4096バイトです。したがって、ストライプ幅Sは4 * 4096 = 16384です。

   Offset 0:
     N = 0 / 16384 = 0
     C = 0-0/4096 = 0 (D0)
     O = 0*4096 + (0%4096) = 0
        
   Offset 4096:
     N = 4096 / 16384 = 0
     C = (4096-(0*16384)) / 4096 = 1 (D1)
     O = (0*4096)+(4096%4096) = 0
        
   Offset 9000:
     N = 9000 / 16384 = 0
     C = (9000-(0*16384)) / 4096 = 2 (D2)
     O = (0*4096)+(9000%4096) = 808
        
   Offset 132000:
     N = 132000 / 16384 = 8
     C = (132000-(8*16384)) / 4096 = 0 (D0)
     O = (8*4096) + (132000%4096) = 33696
        
5.3.2. Nested Striping
5.3.2. ネストされた縞模様

The odm_group_width and odm_group_depth parameters allow a nested striping pattern. odm_group_width defines the width of a data stripe and odm_group_depth defines how many stripes are written before advancing to the next group of components in the list of component objects for the file. The math used to map from a file offset to a component object and offset within that object is shown below. The computations map from the logical offset L to the component index C and offset relative O within that component object.

ODM_GROUP_WIDTHおよびODM_GROUP_DEPTHパラメーターは、ネストされたストライピングパターンを可能にします。odm_group_widthデータストライプの幅を定義し、odm_group_depthは、ファイルのコンポーネントオブジェクトのリストにある次のコンポーネントグループに進む前に書かれたストライプの数を定義します。ファイルオフセットからコンポーネントオブジェクトにマッピングされ、そのオブジェクト内のオフセットに使用される数学を以下に示します。計算は、論理オフセットlからコンポーネントインデックスcにマップし、そのコンポーネントオブジェクト内の相対Oをオフセットします。

   L = logical offset into the file
   W = total number of components
   S = stripe_unit * group_depth * W
   T = stripe_unit * group_depth * group_width
   U = stripe_unit * group_width
   M = L / S
   G = (L - (M * S)) / T
   H = (L - (M * S)) % T
   N = H / U
   C = (H - (N * U)) / stripe_unit + G * group_width
   O = L % stripe_unit + N * stripe_unit + M * group_depth * stripe_unit
        

In these equations, S is the number of bytes striped across all component objects before the pattern repeats. T is the number of bytes striped within a group of component objects before advancing to the next group. U is the number of bytes in a stripe within a group. M is the "major" (i.e., across all components) stripe number, and N is the "minor" (i.e., across the group) stripe number. G counts the groups from the beginning of the major stripe, and H is the byte offset within the group.

これらの方程式では、Sはパターンが繰り返される前にすべてのコンポーネントオブジェクトに縞模様のバイト数です。Tは、次のグループに進む前に、コンポーネントオブジェクトのグループ内で縞模様のバイト数です。Uは、グループ内のストライプ内のバイト数です。mは「メジャー」(つまり、すべてのコンポーネントにわたって)ストライプ番号であり、nは「マイナー」(つまり、グループ全体)のストライプ番号です。Gはメジャーストライプの最初からグループをカウントし、Hはグループ内のバイトオフセットです。

For example, consider an object striped over 100 devices with a group_width of 10, a group_depth of 50, and a stripe_unit of 1 MB. In this scheme, 500 MB are written to the first 10 components, and 5000 MB are written before the pattern wraps back around to the first component in the array.

たとえば、Group_Widthが10、Group_Depth 50、Stripe_unitを1 MBの100を超えるデバイスに縞模様にしたオブジェクトを考えてみましょう。このスキームでは、500 MBが最初の10個のコンポーネントに書き込まれ、5000 MBがパターンが配列の最初のコンポーネントに戻る前に書き込まれます。

   Offset 0:
     W = 100
     S = 1 MB * 50 * 100 = 5000 MB
     T = 1 MB * 50 * 10 = 500 MB
     U = 1 MB * 10 = 10 MB
     M = 0 / 5000 MB = 0
     G = (0 - (0 * 5000 MB)) / 500 MB = 0
     H = (0 - (0 * 5000 MB)) % 500 MB = 0
     N = 0 / 10 MB = 0
     C = (0 - (0 * 10 MB)) / 1 MB + 0 * 10 = 0
     O = 0 % 1 MB + 0 * 1 MB + 0 * 50 * 1 MB = 0
        
   Offset 27 MB:
     M = 27 MB / 5000 MB = 0
     G = (27 MB - (0 * 5000 MB)) / 500 MB = 0
     H = (27 MB - (0 * 5000 MB)) % 500 MB = 27 MB
     N = 27 MB / 10 MB = 2
     C = (27 MB - (2 * 10 MB)) / 1 MB + 0 * 10 = 7
     O = 27 MB % 1 MB + 2 * 1 MB + 0 * 50 * 1 MB = 2 MB
        
   Offset 7232 MB:
     M = 7232 MB / 5000 MB = 1
     G = (7232 MB - (1 * 5000 MB)) / 500 MB = 4
     H = (7232 MB - (1 * 5000 MB)) % 500 MB = 232 MB
     N = 232 MB / 10 MB = 23
     C = (232 MB - (23 * 10 MB)) / 1 MB + 4 * 10 = 42
     O = 7232 MB % 1 MB + 23 * 1 MB + 1 * 50 * 1 MB = 73 MB
        
5.3.3. Mirroring
5.3.3. ミラーリング

The odm_mirror_cnt is used to replicate a file by replicating its component objects. If there is no mirroring, then odm_mirror_cnt MUST be 0. If odm_mirror_cnt is greater than zero, then the size of the olo_components array MUST be a multiple of (odm_mirror_cnt+1). Thus, for a classic mirror on two objects, odm_mirror_cnt is one. Note that mirroring can be defined over any RAID algorithm and striping pattern (either simple or nested). If odm_group_width is also non-zero, then the size of the olo_components array MUST be a multiple of odm_group_width * (odm_mirror_cnt+1). Replicas are adjacent in the olo_components array, and the value C produced by the above equations is not a direct index into the olo_components array. Instead, the following equations determine the replica component index RCi, where i ranges from 0 to odm_mirror_cnt.

ODM_MIRROR_CNTは、コンポーネントオブジェクトを複製することにより、ファイルを複製するために使用されます。ミラーリングがない場合、ODM_MIRROR_CNTは0でなければなりません。ODM_MIRROR_CNTがゼロより大きい場合、OLO_COMPONENTSアレイのサイズは倍数(ODM_MIRROR_CNT 1)でなければなりません。したがって、2つのオブジェクトのクラシックミラーの場合、ODM_MIRROR_CNTは1つです。ミラーリングは、RAIDアルゴリズムとストライピングパターン(単純またはネスト)で定義できることに注意してください。odm_group_widthもゼロではない場合、olo_componentsアレイのサイズはodm_group_width *(odm_mirror_cnt 1)の倍数でなければなりません。ReplicasはOlo_Componentsアレイに隣接しており、上記の方程式によって生成される値Cは、OLO_COMPONENTSアレイへの直接インデックスではありません。代わりに、次の方程式がレプリカコンポーネントインデックスRCIを決定します。ここで、0からODM_MIRROR_CNTまでの範囲です。

   C = component index for striping or two-level striping
   i ranges from 0 to odm_mirror_cnt, inclusive
   RCi = C * (odm_mirror_cnt+1) + i
        
5.4. RAID Algorithms
5.4. RAIDアルゴリズム

pnfs_osd_raid_algorithm4 determines the algorithm and placement of redundant data. This section defines the different redundancy algorithms. Note: The term "RAID" (Redundant Array of Independent Disks) is used in this document to represent an array of component objects that store data for an individual file. The objects are stored on independent object-based storage devices. File data is encoded and striped across the array of component objects using algorithms developed for block-based RAID systems.

PNFS_OSD_RAID_ALGORITHM4は、冗長データのアルゴリズムと配置を決定します。このセクションでは、異なる冗長アルゴリズムを定義します。注:「RAID」という用語(独立したディスクの冗長な配列)は、このドキュメントで使用され、個々のファイルのデータを保存するコンポーネントオブジェクトの配列を表します。オブジェクトは、独立したオブジェクトベースのストレージデバイスに保存されます。ファイルデータは、ブロックベースのRAIDシステム用に開発されたアルゴリズムを使用して、コンポーネントオブジェクトの配列全体にエンコードおよびストライプされます。

5.4.1. PNFS_OSD_RAID_0
5.4.1. PNFS_OSD_RAID_0

PNFS_OSD_RAID_0 means there is no parity data, so all bytes in the component objects are data bytes located by the above equations for C and O. If a component object is marked as PNFS_OSD_MISSING, the pNFS client MUST either return an I/O error if this component is attempted to be read or, alternatively, it can retry the READ against the pNFS server.

PNFS_OSD_RAID_0はパリティデータがないことを意味するため、コンポーネントオブジェクトのすべてのバイトはCおよびOの上記の方程式によって配置されたデータバイトです。コンポーネントオブジェクトがPNFS_OSD_MISSINGとしてマークされている場合、PNFSクライアントはI/Oエラーを返す必要があります。コンポーネントは読み取られようと試みます。あるいは、PNFSサーバーに対して読み取りを再試行することもできます。

5.4.2. PNFS_OSD_RAID_4
5.4.2. PNFS_OSD_RAID_4

PNFS_OSD_RAID_4 means that the last component object, or the last in each group (if odm_group_width is greater than zero), contains parity information computed over the rest of the stripe with an XOR operation. If a component object is unavailable, the client can read the rest of the stripe units in the damaged stripe and recompute the missing stripe unit by XORing the other stripe units in the stripe. Or the client can replay the READ against the pNFS server that will presumably perform the reconstructed read on the client's behalf.

PNFS_OSD_RAID_4とは、最後のコンポーネントオブジェクト、または各グループの最後のオブジェクト(ODM_GROUP_WIDTHがゼロより大きい場合)には、XOR操作のストライプの残りの部分に計算されたパリティ情報が含まれていることを意味します。コンポーネントオブジェクトが利用できない場合、クライアントは損傷したストライプの残りのストライプユニットを読み取り、ストライプの他のストライプユニットをXaringすることで欠落しているストライプユニットを再計算できます。または、クライアントは、おそらくクライアントに代わって再構築された読み取りを実行するPNFSサーバーに対して読み取りを再生することができます。

When parity is present in the file, then there is an additional computation to map from the file offset L to the offset that accounts for embedded parity, L'. First compute L', and then use L' in the above equations for C and O.

ファイルにパリティが存在する場合、ファイルオフセットlから埋め込みパリティl 'を占めるオフセットにマッピングする追加の計算があります。最初にl 'を計算し、次にcおよびoの上記の方程式でl'を使用します。

   L = file offset, not accounting for parity
   P = number of parity devices in each stripe
   W = group_width, if not zero, else size of olo_components array
   N = L / (W-P * stripe_unit)
   L' = N * (W * stripe_unit) +
        (L % (W-P * stripe_unit))
        
5.4.3. PNFS_OSD_RAID_5
5.4.3. PNFS_OSD_RAID_5

PNFS_OSD_RAID_5 means that the position of the parity data is rotated on each stripe or each group (if odm_group_width is greater than zero). In the first stripe, the last component holds the parity. In the second stripe, the next-to-last component holds the parity, and so on. In this scheme, all stripe units are rotated so that I/O is evenly spread across objects as the file is read sequentially. The rotated parity layout is illustrated here, with numbers indicating the stripe unit.

PNFS_OSD_RAID_5とは、パリティデータの位置が各ストライプまたは各グループで回転することを意味します(ODM_GROUP_WIDTHがゼロより大きい場合)。最初のストライプでは、最後のコンポーネントがパリティを保持します。2番目のストライプでは、次の次のコンポーネントがパリティなどを保持します。このスキームでは、すべてのストライプユニットが回転しているため、ファイルが順次読み取られるとI/Oがオブジェクト全体に均等に広がります。回転したパリティレイアウトをここに示し、数字はストライプユニットを示しています。

0 1 2 P 4 5 P 3 8 P 6 7 P 9 a b

0 1 2 p 4 5 p 3 8 p 6 7 p 9 a b

To compute the component object C, first compute the offset that accounts for parity L' and use that to compute C. Then rotate C to get C'. Finally, increase C' by one if the parity information comes at or before C' within that stripe. The following equations illustrate this by computing I, which is the index of the component that contains parity for a given stripe.

コンポーネントオブジェクトCを計算するには、最初にパリティL 'を説明するオフセットを計算し、それを使用してCを計算し、Cを回転させてC'を取得します。最後に、パリティ情報がそのストライプ内でCまたは前に来る場合、C 'を1だけ増やします。次の方程式は、Iを計算することによってこれを示しています。これは、特定のストライプのパリティを含むコンポーネントのインデックスです。

   L = file offset, not accounting for parity
   W = odm_group_width, if not zero, else size of olo_components array
   N = L / (W-1 * stripe_unit)
   (Compute L' as describe above)
   (Compute C based on L' as described above)
   C' = (C - (N%W)) % W
   I = W - (N%W) - 1
   if (C' <= I) {
     C'++
   }
        
5.4.4. PNFS_OSD_RAID_PQ
5.4.4. pnfs_osd_raid_pq

PNFS_OSD_RAID_PQ is a double-parity scheme that uses the Reed-Solomon P+Q encoding scheme [19]. In this layout, the last two component objects hold the P and Q data, respectively. P is parity computed with XOR, and Q is a more complex equation that is not described here. The equations given above for embedded parity can be used to map a file offset to the correct component object by setting the number of parity components to 2 instead of 1 for RAID4 or RAID5. Clients may simply choose to read data through the metadata server if two components are missing or damaged.

PNFS_OSD_RAID_PQは、Reed-Solomon P Qエンコードスキームを使用する二重特性スキームです[19]。このレイアウトでは、最後の2つのコンポーネントオブジェクトがそれぞれPとQのデータを保持します。PはXORで計算されたパリティであり、Qはここでは説明されていないより複雑な方程式です。埋め込まれたパリティの上記の式を使用して、RAID4またはRAID5の場合はパリティコンポーネントの数を1ではなく2に設定することにより、ファイルオフセットを正しいコンポーネントオブジェクトにマッピングできます。クライアントは、2つのコンポーネントが欠落または破損している場合、メタデータサーバーを介してデータを読み取ることを選択できます。

5.4.5. RAID Usage and Implementation Notes
5.4.5. RAIDの使用と実装ノート

RAID layouts with redundant data in their stripes require additional serialization of updates to ensure correct operation. Otherwise, if two clients simultaneously write to the same logical range of an object, the result could include different data in the same ranges of mirrored tuples, or corrupt parity information. It is the responsibility of the metadata server to enforce serialization requirements such as this. For example, the metadata server may do so by not granting overlapping write layouts within mirrored objects.

ストライプに冗長データを備えたRAIDレイアウトには、正しい操作を確実にするために、更新の追加のシリアル化が必要です。それ以外の場合、2つのクライアントがオブジェクトの同じ論理範囲に同時に書き込む場合、結果には、同じ範囲のミラー化されたタプルまたは破損したパリティ情報に異なるデータを含めることができます。このようなシリアル化要件を実施することは、メタデータサーバーの責任です。たとえば、メタデータサーバーは、ミラー化されたオブジェクト内の重複する書き込みレイアウトを許可しないことでそうすることができます。

6. Object-Based Layout Update
6. オブジェクトベースのレイアウトアップデート

layoutupdate4 is used in the LAYOUTCOMMIT operation to convey updates to the layout and additional information to the metadata server. It is defined in the NFSv4.1 [6] as follows:

LayoutUpDate4は、レイアウトコミット操作で使用され、レイアウトの更新とメタデータサーバーへの追加情報を伝えます。NFSV4.1 [6]で次のように定義されています。

   struct layoutupdate4 {
       layouttype4             lou_type;
       opaque                  lou_body<>;
   };
        

The layoutupdate4 type is an opaque value at the generic pNFS client level. If the lou_type layout type is LAYOUT4_OSD2_OBJECTS, then the lou_body opaque value is defined by the pnfs_osd_layoutupdate4 type.

LayoutUpDate4タイプは、汎用PNFSクライアントレベルでの不透明な値です。lou_typeレイアウトタイプがlayout4_osd2_objectsの場合、lou_bodyオパイク値はpnfs_osd_layoutupdate4タイプによって定義されます。

Object-Based pNFS clients are not allowed to modify the layout. Therefore, the information passed in pnfs_osd_layoutupdate4 is used only to update the file's attributes. In addition to the generic information the client can pass to the metadata server in LAYOUTCOMMIT such as the highest offset the client wrote to and the last time it modified the file, the client MAY use pnfs_osd_layoutupdate4 to convey the capacity consumed (or released) by writes using the layout, and to indicate that I/O errors were encountered by such writes.

オブジェクトベースのPNFSクライアントは、レイアウトを変更することはできません。したがって、pnfs_osd_layoutupdate4で渡された情報は、ファイルの属性を更新するためにのみ使用されます。一般的な情報に加えて、クライアントはクライアントが書いた最高のオフセットなど、レイアウトコミットでメタデータサーバーに渡すことができ、ファイルを最後に変更したときに、クライアントはPNFS_OSD_LAYOUTUPDATE4を使用して、書き込みによって消費される(またはリリース)容量を伝えることができます。レイアウトを使用し、I/Oエラーがそのような書き込みによって遭遇したことを示すために。

6.1. pnfs_osd_deltaspaceused4
6.1. PNFS_OSD_DELTASPACEUSED4
   /// union pnfs_osd_deltaspaceused4 switch (bool dsu_valid) {
   ///     case TRUE:
   ///         int64_t     dsu_delta;
   ///     case FALSE:
   ///         void;
   /// };
   ///
        

pnfs_osd_deltaspaceused4 is used to convey space utilization information at the time of LAYOUTCOMMIT. For the file system to properly maintain capacity-used information, it needs to track how much capacity was consumed by WRITE operations performed by the client. In this protocol, the OSD returns the capacity consumed by a write (*), which can be different than the number of bytes written because of internal overhead like block-level allocation and indirect blocks, and the client reflects this back to the pNFS server so it can accurately track quota. The pNFS server can choose to trust this information coming from the clients and therefore avoid querying the OSDs at the time of LAYOUTCOMMIT. If the client is unable to obtain this information from the OSD, it simply returns invalid olu_delta_space_used.

PNFS_OSD_DELTASPACEUSED4は、レイアウトコミット時にスペース使用率情報を伝えるために使用されます。ファイルシステムが容量使用された情報を適切に維持するには、クライアントが実行する書き込み操作によって消費された容量の量を追跡する必要があります。このプロトコルでは、OSDは書き込み(*)によって消費される容量を返します。これは、ブロックレベルの割り当てや間接ブロックなどの内部オーバーヘッドのために書かれたバイト数とは異なる場合があります。クライアントはこれをPNFSサーバーに反映します。そのため、クォータを正確に追跡できます。PNFSサーバーは、クライアントからのこの情報を信頼することを選択でき、したがって、レイアウトコミット時にOSDをクエリすることを避けます。クライアントがOSDからこの情報を取得できない場合、単に無効なOLU_DELTA_SPACE_USEDを返します。

6.2. pnfs_osd_layoutupdate4
6.2. pnfs_osd_layoutupdate4
   /// struct pnfs_osd_layoutupdate4 {
   ///     pnfs_osd_deltaspaceused4    olu_delta_space_used;
   ///     bool                        olu_ioerr_flag;
   /// };
   ///
        

"olu_delta_space_used" is used to convey capacity usage information back to the metadata server.

「olu_delta_space_used」は、容量使用情報をメタデータサーバーに伝達するために使用されます。

The "olu_ioerr_flag" is used when I/O errors were encountered while writing the file. The client MUST report the errors using the pnfs_osd_ioerr4 structure (see Section 8.1) at LAYOUTRETURN time.

「olu_ioerr_flag」は、ファイルの書き込み中にI/Oエラーが発生したときに使用されます。クライアントは、layoutreturn時間にpnfs_osd_ioerr4構造(セクション8.1を参照)を使用してエラーを報告する必要があります。

If the client updated the file successfully before hitting the I/O errors, it MAY use LAYOUTCOMMIT to update the metadata server as described above. Typically, in the error-free case, the server MAY turn around and update the file's attributes on the storage devices. However, if I/O errors were encountered, the server better not attempt to write the new attributes on the storage devices until it receives the I/O error report; therefore, the client MUST set the olu_ioerr_flag to true. Note that in this case, the client SHOULD send both the LAYOUTCOMMIT and LAYOUTRETURN operations in the same COMPOUND RPC.

クライアントがI/Oエラーを押す前にファイルを正常に更新した場合、上記のようにメタデータサーバーを更新するためにレイアウトコミットを使用する場合があります。通常、エラーのないケースでは、サーバーはストレージデバイス上のファイルの属性を回転させて更新する場合があります。ただし、I/Oエラーが発生した場合、サーバーはI/Oエラーレポートを受信するまでストレージデバイスに新しい属性を書き込もうとしない方が良い。したがって、クライアントはOLU_IOERR_FLAGをTRUEに設定する必要があります。この場合、クライアントは同じ複合RPCにレイアウトコミット操作とlayoutreturn操作の両方を送信する必要があることに注意してください。

7. Recovering from Client I/O Errors
7. クライアントI/Oエラーからの回復

The pNFS client may encounter errors when directly accessing the object storage devices. However, it is the responsibility of the metadata server to handle the I/O errors. When the LAYOUT4_OSD2_OBJECTS layout type is used, the client MUST report the I/O errors to the server at LAYOUTRETURN time using the pnfs_osd_ioerr4 structure (see Section 8.1).

PNFSクライアントは、オブジェクトストレージデバイスに直接アクセスするときにエラーに遭遇する場合があります。ただし、I/Oエラーを処理するのはメタデータサーバーの責任です。layout4_osd2_objectsレイアウトタイプを使用すると、PNFS_OSD_IOERR4構造を使用して、LayoutReturn TimeでI/Oエラーをサーバーに報告する必要があります(セクション8.1を参照)。

The metadata server analyzes the error and determines the required recovery operations such as repairing any parity inconsistencies, recovering media failures, or reconstructing missing objects.

メタデータサーバーはエラーを分析し、パリティの不一致の修復、メディアの障害の回復、欠落しているオブジェクトの再構築など、必要な回復操作を決定します。

The metadata server SHOULD recall any outstanding layouts to allow it exclusive write access to the stripes being recovered and to prevent other clients from hitting the same error condition. In these cases, the server MUST complete recovery before handing out any new layouts to the affected byte ranges.

メタデータサーバーは、回復中のストライプへの排他的な書き込みアクセスを許可し、他のクライアントが同じエラー条件にぶつかるのを防ぐために、未解決のレイアウトをリコールする必要があります。これらの場合、影響を受けるバイト範囲に新しいレイアウトを配る前に、サーバーは回復を完了する必要があります。

Although it MAY be acceptable for the client to propagate a corresponding error to the application that initiated the I/O operation and drop any unwritten data, the client SHOULD attempt to retry the original I/O operation by requesting a new layout using LAYOUTGET and retry the I/O operation(s) using the new layout, or the client MAY just retry the I/O operation(s) using regular NFS READ or WRITE operations via the metadata server. The client SHOULD attempt to retrieve a new layout and retry the I/O operation using OSD commands first and only if the error persists, retry the I/O operation via the metadata server.

クライアントがI/O操作を開始したアプリケーションに対応するエラーを伝播し、書かれていないデータをドロップすることは許容される場合がありますが、クライアントはレイアウトと再試行を使用して新しいレイアウトを要求して元のI/O操作を再試行しようとする必要があります新しいレイアウトを使用したI/O操作、またはクライアントは、メタデータサーバーを介して通常のNFS読み取りまたは書き込み操作を使用してI/O操作を再試行することができます。クライアントは、新しいレイアウトを取得し、最初にOSDコマンドを使用してI/O操作を再試行しようとする必要があります。エラーが持続した場合にのみ、メタデータサーバーを介してI/O操作を再試行します。

8. Object-Based Layout Return
8. オブジェクトベースのレイアウトリターン

layoutreturn_file4 is used in the LAYOUTRETURN operation to convey layout-type specific information to the server. It is defined in the NFSv4.1 [6] as follows:

layoutreturn_file4は、layoutreturn操作で使用され、レイアウトタイプの特定の情報をサーバーに伝えます。NFSV4.1 [6]で次のように定義されています。

   struct layoutreturn_file4 {
           offset4         lrf_offset;
           length4         lrf_length;
           stateid4        lrf_stateid;
           /* layouttype4 specific data */
           opaque          lrf_body<>;
   };
        
   union layoutreturn4 switch(layoutreturn_type4 lr_returntype) {
           case LAYOUTRETURN4_FILE:
                   layoutreturn_file4      lr_layout;
           default:
                   void;
   };
        
   struct LAYOUTRETURN4args {
           /* CURRENT_FH: file */
           bool                    lora_reclaim;
           layoutreturn_stateid    lora_recallstateid;
           layouttype4             lora_layout_type;
           layoutiomode4           lora_iomode;
           layoutreturn4           lora_layoutreturn;
   };
        

If the lora_layout_type layout type is LAYOUT4_OSD2_OBJECTS, then the lrf_body opaque value is defined by the pnfs_osd_layoutreturn4 type.

lora_layout_typeレイアウトタイプがlayout4_osd2_objectsである場合、lrf_bodyの不透明値はpnfs_osd_layoutreturn4タイプによって定義されます。

The pnfs_osd_layoutreturn4 type allows the client to report I/O error information back to the metadata server as defined below.

PNFS_OSD_LAYOUTRETURN4タイプにより、クライアントは以下に定義するようにI/Oエラー情報をメタデータサーバーに報告することができます。

8.1. pnfs_osd_errno4
8.1. PNFS_OSD_ERRNO4
   /// enum pnfs_osd_errno4 {
   ///     PNFS_OSD_ERR_EIO            = 1,
   ///     PNFS_OSD_ERR_NOT_FOUND      = 2,
   ///     PNFS_OSD_ERR_NO_SPACE       = 3,
   ///     PNFS_OSD_ERR_BAD_CRED       = 4,
   ///     PNFS_OSD_ERR_NO_ACCESS      = 5,
   ///     PNFS_OSD_ERR_UNREACHABLE    = 6,
   ///     PNFS_OSD_ERR_RESOURCE       = 7
   /// };
   ///
        

pnfs_osd_errno4 is used to represent error types when read/write errors are reported to the metadata server. The error codes serve as hints to the metadata server that may help it in diagnosing the exact reason for the error and in repairing it.

PNFS_OSD_ERRNO4は、読み取り/書き込みエラーがメタデータサーバーに報告されたときにエラータイプを表すために使用されます。エラーコードは、メタデータサーバーのヒントとして機能し、エラーの正確な理由を診断し、それを修復するのに役立ちます。

o PNFS_OSD_ERR_EIO indicates the operation failed because the object storage device experienced a failure trying to access the object. The most common source of these errors is media errors, but other internal errors might cause this as well. In this case, the metadata server should go examine the broken object more closely; hence, it should be used as the default error code.

o PNFS_OSD_ERR_EIOは、オブジェクトストレージデバイスがオブジェクトにアクセスしようとして失敗したために操作が失敗したことを示します。これらのエラーの最も一般的なソースはメディアエラーですが、他の内部エラーもこれを引き起こす可能性があります。この場合、メタデータサーバーは、壊れたオブジェクトをより詳細に調べてみる必要があります。したがって、デフォルトのエラーコードとして使用する必要があります。

o PNFS_OSD_ERR_NOT_FOUND indicates the object ID specifies an object that does not exist on the object storage device.

o PNFS_OSD_ERR_NOT_FOUNDオブジェクトIDがオブジェクトストレージデバイスに存在しないオブジェクトを指定するオブジェクトIDを示します。

o PNFS_OSD_ERR_NO_SPACE indicates the operation failed because the object storage device ran out of free capacity during the operation.

o PNFS_OSD_ERR_SPACEは、オブジェクトストレージデバイスが動作中に自由容量がなくなったため、動作が失敗したことを示します。

o PNFS_OSD_ERR_BAD_CRED indicates the security parameters are not valid. The primary cause of this is that the capability has expired, or the access policy tag (a.k.a., capability version number) has been changed to revoke capabilities. The client will need to return the layout and get a new one with fresh capabilities.

o PNFS_OSD_ERR_BAD_CREDは、セキュリティパラメーターが有効でないことを示します。これの主な原因は、機能が期限切れになったこと、またはアクセスポリシータグ(別名、機能バージョン番号)が機能を取り消すために変更されたことです。クライアントは、レイアウトを返し、新しい機能を備えた新しいレイアウトを取得する必要があります。

o PNFS_OSD_ERR_NO_ACCESS indicates the capability does not allow the requested operation. This should not occur in normal operation because the metadata server should give out correct capabilities, or none at all.

o PNFS_OSD_ERR_NO_ACCESSは、要求された操作を許可しない機能を示します。メタデータサーバーは正しい機能を提供するか、まったく提供されないため、これは通常の操作では発生しないでください。

o PNFS_OSD_ERR_UNREACHABLE indicates the client did not complete the I/O operation at the object storage device due to a communication failure. Whether or not the I/O operation was executed by the OSD is undetermined.

o PNFS_OSD_ERR_UNREACHABLEは、通信障害のためにクライアントがオブジェクトストレージデバイスでI/O操作を完了しなかったことを示します。I/O操作がOSDによって実行されたかどうかは未定です。

o PNFS_OSD_ERR_RESOURCE indicates the client did not issue the I/O operation due to a local problem on the initiator (i.e., client) side, e.g., when running out of memory. The client MUST guarantee that the OSD command was never dispatched to the OSD.

o PNFS_OSD_ERR_RESOURCEは、イニシエーター(つまり、クライアント)側のローカルな問題のために、クライアントがI/O操作を発行しなかったことを示しています。クライアントは、OSDコマンドがOSDに発送されないことを保証する必要があります。

8.2. pnfs_osd_ioerr4
8.2. PNFS_OSD_IOERR4
   /// struct pnfs_osd_ioerr4 {
   ///     pnfs_osd_objid4     oer_component;
   ///     length4             oer_comp_offset;
   ///     length4             oer_comp_length;
   ///     bool                oer_iswrite;
   ///     pnfs_osd_errno4     oer_errno;
   /// };
   ///
        

The pnfs_osd_ioerr4 structure is used to return error indications for objects that generated errors during data transfers. These are hints to the metadata server that there are problems with that object. For each error, "oer_component", "oer_comp_offset", and "oer_comp_length" represent the object and byte range within the component object in which the error occurred; "oer_iswrite" is set to "true" if the failed OSD operation was data modifying, and "oer_errno" represents the type of error.

PNFS_OSD_IOERR4構造は、データ転送中にエラーを生成したオブジェクトのエラー表示を返すために使用されます。これらは、そのオブジェクトに問題があることをメタデータサーバーに示唆しています。各エラーについて、「oer_component」、「oer_comp_offset」、および「oer_comp_length」は、エラーが発生したコンポーネントオブジェクト内のオブジェクトとバイト範囲を表します。「OER_ISWRITE」は、失敗したOSD操作がデータ変更であり、「OER_ERRNO」がエラーのタイプを表す場合、「True」に設定されます。

Component byte ranges in the optional pnfs_osd_ioerr4 structure are used for recovering the object and MUST be set by the client to cover all failed I/O operations to the component.

オプションのPNFS_OSD_IOERR4構造のコンポーネントバイト範囲は、オブジェクトの回復に使用され、クライアントがすべての失敗したI/O操作をコンポーネントにカバーする必要があります。

8.3. pnfs_osd_layoutreturn4
8.3. pnfs_osd_layoutreturn4
   /// struct pnfs_osd_layoutreturn4 {
   ///     pnfs_osd_ioerr4             olr_ioerr_report<>;
   /// };
   ///
      When OSD I/O operations failed, "olr_ioerr_report<>" is used to
   report these errors to the metadata server as an array of elements of
   type pnfs_osd_ioerr4.  Each element in the array represents an error
   that occurred on the object specified by oer_component.  If no errors
   are to be reported, the size of the olr_ioerr_report<> array is set
   to zero.
        
9. Object-Based Creation Layout Hint
9. オブジェクトベースの作成レイアウトヒント

The layouthint4 type is defined in the NFSv4.1 [6] as follows:

Layouthint4タイプは、NFSV4.1 [6]で次のように定義されています。

   struct layouthint4 {
       layouttype4           loh_type;
       opaque                loh_body<>;
   };
        

The layouthint4 structure is used by the client to pass a hint about the type of layout it would like created for a particular file. If the loh_type layout type is LAYOUT4_OSD2_OBJECTS, then the loh_body opaque value is defined by the pnfs_osd_layouthint4 type.

Layouthint4構造は、特定のファイル用に作成したいレイアウトの種類に関するヒントを渡すためにクライアントによって使用されます。loh_typeレイアウトタイプがlayout4_osd2_objectsである場合、loh_bodyの不透明値はpnfs_osd_layouthint4タイプによって定義されます。

9.1. pnfs_osd_layouthint4
9.1. pnfs_osd_layouthint4
   /// union pnfs_osd_max_comps_hint4 switch (bool omx_valid) {
   ///     case TRUE:
   ///         uint32_t            omx_max_comps;
   ///     case FALSE:
   ///         void;
   /// };
   ///
   /// union pnfs_osd_stripe_unit_hint4 switch (bool osu_valid) {
   ///     case TRUE:
   ///         length4             osu_stripe_unit;
   ///     case FALSE:
   ///         void;
   /// };
   ///
   /// union pnfs_osd_group_width_hint4 switch (bool ogw_valid) {
   ///     case TRUE:
   ///         uint32_t            ogw_group_width;
   ///     case FALSE:
   ///         void;
   /// };
   ///
   /// union pnfs_osd_group_depth_hint4 switch (bool ogd_valid) {
   ///     case TRUE:
   ///         uint32_t            ogd_group_depth;
   ///     case FALSE:
        
   ///         void;
   /// };
   ///
   /// union pnfs_osd_mirror_cnt_hint4 switch (bool omc_valid) {
   ///     case TRUE:
   ///         uint32_t            omc_mirror_cnt;
   ///     case FALSE:
   ///         void;
   /// };
   ///
   /// union pnfs_osd_raid_algorithm_hint4 switch (bool ora_valid) {
   ///     case TRUE:
   ///         pnfs_osd_raid_algorithm4    ora_raid_algorithm;
   ///     case FALSE:
   ///         void;
   /// };
   ///
   /// struct pnfs_osd_layouthint4 {
   ///     pnfs_osd_max_comps_hint4        olh_max_comps_hint;
   ///     pnfs_osd_stripe_unit_hint4      olh_stripe_unit_hint;
   ///     pnfs_osd_group_width_hint4      olh_group_width_hint;
   ///     pnfs_osd_group_depth_hint4      olh_group_depth_hint;
   ///     pnfs_osd_mirror_cnt_hint4       olh_mirror_cnt_hint;
   ///     pnfs_osd_raid_algorithm_hint4   olh_raid_algorithm_hint;
   /// };
   ///
        

This type conveys hints for the desired data map. All parameters are optional so the client can give values for only the parameters it cares about, e.g. it can provide a hint for the desired number of mirrored components, regardless of the RAID algorithm selected for the file. The server should make an attempt to honor the hints, but it can ignore any or all of them at its own discretion and without failing the respective CREATE operation.

このタイプは、目的のデータマップのヒントを伝えます。すべてのパラメーターはオプションであるため、クライアントは気にかけているパラメーターのみの値を与えることができます。ファイルに選択されたRAIDアルゴリズムに関係なく、希望する数のミラー化されたコンポーネントのヒントを提供できます。サーバーはヒントを尊重しようとする必要がありますが、それぞれの裁量で、それぞれの作成操作を失敗することなく、それらのいずれかまたはすべてを無視することができます。

The "olh_max_comps_hint" can be used to limit the total number of component objects comprising the file. All other hints correspond directly to the different fields of pnfs_osd_data_map4.

「OLH_MAX_COMPS_HINT」を使用して、ファイルを含むコンポーネントオブジェクトの総数を制限できます。他のすべてのヒントは、PNFS_OSD_DATA_MAP4の異なるフィールドに直接対応しています。

10. Layout Segments
10. レイアウトセグメント

The pnfs layout operations operate on logical byte ranges. There is no requirement in the protocol for any relationship between byte ranges used in LAYOUTGET to acquire layouts and byte ranges used in CB_LAYOUTRECALL, LAYOUTCOMMIT, or LAYOUTRETURN. However, using OSD byte-range capabilities poses limitations on these operations since the capabilities associated with layout segments cannot be merged or split. The following guidelines should be followed for proper operation of object-based layouts.

PNFSレイアウト操作は、論理バイト範囲で動作します。レイアウトで使用されるバイト範囲と、cb_layoutrecall、layoutcommit、またはlayoutreturnで使用されるバイト範囲とバイト範囲の関係について、プロトコルには要件はありません。ただし、OSDバイトレンジ機能を使用すると、レイアウトセグメントに関連付けられている機能をマージまたは分割できないため、これらの操作に制限があります。オブジェクトベースのレイアウトを適切に操作するために、次のガイドラインに従う必要があります。

10.1. CB_LAYOUTRECALL and LAYOUTRETURN
10.1. CB_LAYOUTRECALLおよびLAYOUTRETURN

In general, the object-based layout driver should keep track of each layout segment it got, keeping record of the segment's iomode, offset, and length. The server should allow the client to get multiple overlapping layout segments but is free to recall the layout to prevent overlap.

一般に、オブジェクトベースのレイアウトドライバーは、取得した各レイアウトセグメントを追跡し、セグメントのiomode、オフセット、および長さの記録を保持する必要があります。サーバーは、クライアントが複数の重複レイアウトセグメントを取得できるようにする必要がありますが、オーバーラップを防ぐためにレイアウトを自由にリコールできます。

In response to CB_LAYOUTRECALL, the client should return all layout segments matching the given iomode and overlapping with the recalled range. When returning the layouts for this byte range with LAYOUTRETURN, the client MUST NOT return a sub-range of a layout segment it has; each LAYOUTRETURN sent MUST completely cover at least one outstanding layout segment.

CB_LayoutreCallに応じて、クライアントは、指定されたIOMODEに一致するすべてのレイアウトセグメントを返し、リコールされた範囲と重複する必要があります。Layoutreturnを使用してこのバイト範囲のレイアウトを返すとき、クライアントは、レイアウトセグメントのサブレンジを返してはなりません。送信される各layoutreturnは、少なくとも1つの未解決のレイアウトセグメントを完全にカバーする必要があります。

The server, in turn, should release any segment that exactly matches the clientid, iomode, and byte range given in LAYOUTRETURN. If no exact match is found, then the server should release all layout segments matching the clientid and iomode and that are fully contained in the returned byte range. If none are found and the byte range is a subset of an outstanding layout segment with for the same clientid and iomode, then the client can be considered malfunctioning and the server SHOULD recall all layouts from this client to reset its state. If this behavior repeats, the server SHOULD deny all LAYOUTGETs from this client.

サーバーは、layoutreturnで与えられたClientID、IOMODE、およびバイト範囲に正確に一致するセグメントをリリースする必要があります。正確な一致が見つからない場合、サーバーはClientIDとIOMODEに一致するすべてのレイアウトセグメントをリリースする必要があり、それは返されたバイト範囲に完全に含まれています。何も見つかりませんが、バイト範囲が同じClientIDとIOMODEの顕著なレイアウトセグメントのサブセットである場合、クライアントは誤動作と見なされ、サーバーはこのクライアントからのすべてのレイアウトを思い出して状態をリセットする必要があります。この動作が繰り返される場合、サーバーはこのクライアントからすべてのレイアウトゲットを拒否する必要があります。

10.2. LAYOUTCOMMIT
10.2. レイアウトコミット

LAYOUTCOMMIT is only used by object-based pNFS to convey modified attributes hints and/or to report the presence of I/O errors to the metadata server (MDS). Therefore, the offset and length in LAYOUTCOMMIT4args are reserved for future use and should be set to 0.

LayOutCommitは、オブジェクトベースのPNFによってのみ使用され、変更された属性のヒントを伝達したり、I/Oエラーの存在をメタデータサーバー(MDS)に報告したりします。したがって、レイアウトコミット4ARGのオフセットと長さは将来の使用のために予約されており、0に設定する必要があります。

11. Recalling Layouts
11. レイアウトをリコールします

The object-based metadata server should recall outstanding layouts in the following cases:

オブジェクトベースのメタデータサーバーは、次の場合に未解決のレイアウトを思い出す必要があります。

o When the file's security policy changes, i.e., Access Control Lists (ACLs) or permission mode bits are set.

o ファイルのセキュリティポリシーが変更された場合、つまりアクセス制御リスト(ACLS)または許可モードビットが設定されています。

o When the file's aggregation map changes, rendering outstanding layouts invalid.

o ファイルの集約マップが変更されると、未払いのレイアウトが無効になります。

o When there are sharing conflicts. For example, the server will issue stripe-aligned layout segments for RAID-5 objects. To prevent corruption of the file's parity, multiple clients must not hold valid write layouts for the same stripes. An outstanding READ/WRITE (RW) layout should be recalled when a conflicting LAYOUTGET is received from a different client for LAYOUTIOMODE4_RW and for a byte range overlapping with the outstanding layout segment.

o 共有競合があるとき。たとえば、サーバーは、RAID-5オブジェクトのストライプアライメントレイアウトセグメントを発行します。ファイルのパリティの破損を防ぐために、複数のクライアントが同じストライプの有効な書き込みレイアウトを保持してはなりません。顕著な読み取り/書き込み(RW)レイアウトは、reautiomode4_RWの別のクライアントから競合するレイアウトゲットが受信され、未解決のレイアウトセグメントと重複するバイト範囲の場合、競合するレイアウトゲットが受信されたときにリコールする必要があります。

11.1. CB_RECALL_ANY
11.1. cb_recall_any

The metadata server can use the CB_RECALL_ANY callback operation to notify the client to return some or all of its layouts. The NFSv4.1 [6] defines the following types:

メタデータサーバーは、cb_recall_anyコールバック操作を使用して、クライアントに通知してレイアウトの一部またはすべてを返すことができます。NFSV4.1 [6]は、次のタイプを定義します。

   const RCA4_TYPE_MASK_OBJ_LAYOUT_MIN     = 8;
   const RCA4_TYPE_MASK_OBJ_LAYOUT_MAX     = 9;
        
   struct  CB_RECALL_ANY4args      {
       uint32_t        craa_objects_to_keep;
       bitmap4         craa_type_mask;
   };
        

Typically, CB_RECALL_ANY will be used to recall client state when the server needs to reclaim resources. The craa_type_mask bitmap specifies the type of resources that are recalled and the craa_objects_to_keep value specifies how many of the recalled objects the client is allowed to keep. The object-based layout type mask flags are defined as follows. They represent the iomode of the recalled layouts. In response, the client SHOULD return layouts of the recalled iomode that it needs the least, keeping at most craa_objects_to_keep object-based layouts.

通常、CB_RECALL_ANYは、サーバーがリソースを取り戻す必要があるときにクライアント状態を思い出すために使用されます。CRAA_TYPE_MASK BITMAPは、リコールされるリソースのタイプを指定し、CRAA_OBJECTS_TO_KEEP値は、クライアントが保持できるリコールされたオブジェクトの数を指定します。オブジェクトベースのレイアウトタイプマスクフラグは、次のように定義されています。それらは、リコールされたレイアウトのiomodeを表します。これに応じて、クライアントは、最大のCRAA_OBJECTS_TO_KEEPオブジェクトベースのレイアウトを維持して、リコールされたIOMODEのレイアウトをリコールしたiomodeのレイアウトを返す必要があります。

   /// enum pnfs_osd_cb_recall_any_mask {
   ///     PNFS_OSD_RCA4_TYPE_MASK_READ = 8,
   ///     PNFS_OSD_RCA4_TYPE_MASK_RW   = 9
   /// };
   ///
        

The PNFS_OSD_RCA4_TYPE_MASK_READ flag notifies the client to return layouts of iomode LAYOUTIOMODE4_READ. Similarly, the PNFS_OSD_RCA4_TYPE_MASK_RW flag notifies the client to return layouts of iomode LAYOUTIOMODE4_RW. When both mask flags are set, the client is notified to return layouts of either iomode.

PNFS_OSD_RCA4_TYPE_MASK_READフラグは、クライアントにIOMODE LayOutiOMode4_Readのレイアウトを返すように通知します。同様に、PNFS_OSD_RCA4_TYPE_MASK_RWフラグは、クライアントにIOMODE LayOutiOMode4_RWのレイアウトを返すように通知します。両方のマスクフラグが設定されると、クライアントはどちらのiomodeのレイアウトを返すように通知されます。

12. Client Fencing
12. クライアントフェンシング

In cases where clients are uncommunicative and their lease has expired or when clients fail to return recalled layouts within a lease period at the least (see "Recalling a Layout"[6]), the server MAY revoke client layouts and/or device address mappings and reassign these resources to other clients. To avoid data corruption, the metadata server MUST fence off the revoked clients from the respective objects as described in Section 13.4.

クライアントが共産的であり、リースが終了した場合、またはクライアントが少なくともリース期間内にリコールされたレイアウトを返していない場合(「レイアウトのリコール」[6]を参照)、サーバーはクライアントのレイアウトやデバイスアドレスマッピングを取り消すことができますこれらのリソースを他のクライアントに再割り当てします。データの破損を回避するために、メタデータサーバーは、セクション13.4で説明されているように、それぞれのオブジェクトから取り消されたクライアントをフェンスで囲む必要があります。

13. Security Considerations
13. セキュリティに関する考慮事項

The pNFS extension partitions the NFSv4 file system protocol into two parts, the control path and the data path (storage protocol). The control path contains all the new operations described by this extension; all existing NFSv4 security mechanisms and features apply to the control path. The combination of components in a pNFS system is required to preserve the security properties of NFSv4 with respect to an entity accessing data via a client, including security countermeasures to defend against threats that NFSv4 provides defenses for in environments where these threats are considered significant.

PNFS拡張機能は、NFSV4ファイルシステムプロトコルを2つの部分、制御パスとデータパス(ストレージプロトコル)にパーティション化します。制御パスには、この拡張機能によって記述されたすべての新しい操作が含まれています。既存のすべてのNFSV4セキュリティメカニズムと機能は、制御パスに適用されます。PNFSシステム内のコンポーネントの組み合わせは、NFSV4がこれらの脅威が重要と見なされる環境の防御を提供する脅威から防御するためのセキュリティ対策を含む、クライアントを介してデータにアクセスするエンティティに関するNFSV4のセキュリティプロパティを保持するために必要です。

The metadata server enforces the file access-control policy at LAYOUTGET time. The client should use suitable authorization credentials for getting the layout for the requested iomode (READ or RW) and the server verifies the permissions and ACL for these credentials, possibly returning NFS4ERR_ACCESS if the client is not allowed the requested iomode. If the LAYOUTGET operation succeeds the client receives, as part of the layout, a set of object capabilities allowing it I/O access to the specified objects corresponding to the requested iomode. When the client acts on I/O operations on behalf of its local users, it MUST authenticate and authorize the user by issuing respective OPEN and ACCESS calls to the metadata server, similar to having NFSv4 data delegations. If access is allowed, the client uses the corresponding (READ or RW) capabilities to perform the I/O operations at the object storage devices. When the metadata server receives a request to change a file's permissions or ACL, it SHOULD recall all layouts for that file and it MUST change the capability version attribute on all objects comprising the file to implicitly invalidate any outstanding capabilities before committing to the new permissions and ACL. Doing this will ensure that clients re-authorize their layouts according to the modified permissions and ACL by requesting new layouts. Recalling the layouts in this case is courtesy of the server intended to prevent clients from getting an error on I/Os done after the capability version changed.

メタデータサーバーは、LayoutGet時間にファイルアクセス制御ポリシーを実施します。クライアントは、要求されたIOMODE(読み取りまたはRW)のレイアウトを取得するために適切な承認資格情報を使用し、サーバーはこれらの資格情報の許可とACLを検証します。レイアウトゲット操作が成功した場合、クライアントはレイアウトの一部として受信します。オブジェクト機能のセットを使用して、要求されたiomodeに対応する指定されたオブジェクトにI/oアクセスできるようにします。クライアントがローカルユーザーに代わってI/O操作に基づいて行動する場合、NFSV4データ代表団を持つのと同様に、メタデータサーバーへのそれぞれのオープンコールとアクセスコールを発行することにより、ユーザーを認証および承認する必要があります。アクセスが許可されている場合、クライアントは対応する(読み取りまたはRW)機能を使用して、オブジェクトストレージデバイスでI/O操作を実行します。メタデータサーバーがファイルの権限またはACLを変更するリクエストを受信した場合、そのファイルのすべてのレイアウトをリコールする必要があり、ファイルを含むすべてのオブジェクトの機能バージョン属性を変更して、新しい許可にコミットする前に顕著な機能を暗黙的に無効にする必要があります。ACL。これを行うことで、クライアントは新しいレイアウトを要求することにより、修正されたアクセス許可とACLに従ってレイアウトを再承認することができます。この場合のレイアウトをリコールすることは、機能バージョンが変更された後にクライアントがI/OSでエラーが発生しないようにすることを目的としたサーバーのおかげです。

The object storage protocol MUST implement the security aspects described in version 1 of the T10 OSD protocol definition [1]. The standard defines four security methods: NOSEC, CAPKEY, CMDRSP, and ALLDATA. To provide minimum level of security allowing verification and enforcement of the server access control policy using the layout security credentials, the NOSEC security method MUST NOT be used for any I/O operation. The remainder of this section gives an overview of the security mechanism described in that standard. The goal is to give the reader a basic understanding of the object security model. Any discrepancies between this text and the actual standard are obviously to be resolved in favor of the OSD standard.

オブジェクトストレージプロトコルは、T10 OSDプロトコル定義[1]のバージョン1で説明されているセキュリティの側面を実装する必要があります。標準は、NOSEC、Capkey、CMDRSP、およびAlldataの4つのセキュリティ方法を定義しています。レイアウトセキュリティ資格情報を使用してサーバーアクセス制御ポリシーの検証と施行を可能にする最小レベルのセキュリティを提供するには、NOSECセキュリティ方法をI/O操作に使用してはなりません。このセクションの残りの部分は、その標準で説明されているセキュリティメカニズムの概要を示しています。目標は、読者にオブジェクトセキュリティモデルの基本的な理解を与えることです。このテキストと実際の標準の間の矛盾は、明らかにOSD規格に有利に解決されるべきです。

13.1. OSD Security Data Types
13.1. OSDセキュリティデータ型

There are three main data types associated with object security: a capability, a credential, and security parameters. The capability is a set of fields that specifies an object and what operations can be performed on it. A credential is a signed capability. Only a security manager that knows the secret device keys can correctly sign a capability to form a valid credential. In pNFS, the file server acts as the security manager and returns signed capabilities (i.e., credentials) to the pNFS client. The security parameters are values computed by the issuer of OSD commands (i.e., the client) that prove they hold valid credentials. The client uses the credential as a signing key to sign the requests it makes to OSD, and puts the resulting signatures into the security_parameters field of the OSD command. The object storage device uses the secret keys it shares with the security manager to validate the signature values in the security parameters.

オブジェクトセキュリティに関連する3つの主要なデータ型があります:機能、資格情報、およびセキュリティパラメーター。機能は、オブジェクトを指定し、どの操作を実行できるかを指定する一連のフィールドです。資格情報は署名された機能です。シークレットデバイスキーを知っているセキュリティマネージャーのみが、有効な資格情報を形成する機能に正しく署名できます。PNFSでは、ファイルサーバーはセキュリティマネージャーとして機能し、署名された機能(つまり、資格情報)をPNFSクライアントに返します。セキュリティパラメーターは、有効な資格情報を保持していることを証明するOSDコマンド(つまり、クライアント)の発行者によって計算された値です。クライアントは、資格情報を署名キーとして使用して、OSDに行う要求に署名し、結果の署名をOSDコマンドのSecurity_Parametersフィールドに配置します。オブジェクトストレージデバイスは、セキュリティマネージャーと共有するシークレットキーを使用して、セキュリティパラメーターの署名値を検証します。

The security types are opaque to the generic layers of the pNFS client. The credential contents are defined as opaque within the pnfs_osd_object_cred4 type. Instead of repeating the definitions here, the reader is referred to Section 4.9.2.2 of the OSD standard.

セキュリティタイプは、PNFSクライアントの一般的なレイヤーに不透明です。資格情報は、PNFS_OSD_OBJECT_CRED4タイプ内の不透明として定義されます。ここで定義を繰り返す代わりに、読者はOSD標準のセクション4.9.2.2を参照します。

13.2. The OSD Security Protocol
13.2. OSDセキュリティプロトコル

The object storage protocol relies on a cryptographically secure capability to control accesses at the object storage devices. Capabilities are generated by the metadata server, returned to the client, and used by the client as described below to authenticate their requests to the object-based storage device. Capabilities therefore achieve the required access and open mode checking. They allow the file server to define and check a policy (e.g., open mode) and the OSD to enforce that policy without knowing the details (e.g., user IDs and ACLs).

オブジェクトストレージプロトコルは、オブジェクトストレージデバイスでのアクセスを制御する暗号化された安全な機能に依存しています。機能はメタデータサーバーによって生成され、クライアントに返され、クライアントが以下に説明するように使用して、オブジェクトベースのストレージデバイスにリクエストを認証します。したがって、機能は必要なアクセスとオープンモードのチェックを実現します。ファイルサーバーがポリシー(オープンモードなど)を定義およびチェックし、OSDが詳細(ユーザーIDやACLSなど)を知らずにそのポリシーを実施することを可能にします。

Since capabilities are tied to layouts, and since they are used to enforce access control, when the file ACL or mode changes the outstanding capabilities MUST be revoked to enforce the new access permissions. The server SHOULD recall layouts to allow clients to gracefully return their capabilities before the access permissions change.

機能はレイアウトに結び付けられており、アクセス制御を実施するために使用されるため、ファイルACLまたはモードが変更されると、新しいアクセス許可を強制するために未解決の機能を取り消す必要があります。サーバーは、アクセス許可が変更される前にクライアントが優雅に機能を返すことができるようにレイアウトをリコールする必要があります。

Each capability is specific to a particular object, an operation on that object, a byte range within the object (in OSDv2), and has an explicit expiration time. The capabilities are signed with a secret key that is shared by the object storage devices and the metadata managers. Clients do not have device keys so they are unable to forge the signatures in the security parameters. The combination of a capability, the OSD System ID, and a signature is called a "credential" in the OSD specification.

各機能は、特定のオブジェクト、そのオブジェクトの操作、オブジェクト内のバイト範囲(OSDV2)に固有であり、明示的な有効期限があります。機能は、オブジェクトストレージデバイスとメタデータマネージャーによって共有される秘密キーで署名されています。クライアントにはデバイスキーがないため、セキュリティパラメーターの署名を偽造できません。機能、OSDシステムID、および署名の組み合わせは、OSD仕様の「資格情報」と呼ばれます。

The details of the security and privacy model for object storage are defined in the T10 OSD standard. The following sketch of the algorithm should help the reader understand the basic model.

オブジェクトストレージのセキュリティおよびプライバシーモデルの詳細は、T10 OSD標準で定義されています。アルゴリズムの次のスケッチは、読者が基本モデルを理解するのに役立つはずです。

LAYOUTGET returns a CapKey and a Cap, which, together with the OSD System ID, are also called a credential. It is a capability and a signature over that capability and the SystemID. The OSD Standard refers to the CapKey as the "Credential integrity check value" and to the ReqMAC as the "Request integrity check value".

LayoutGetは、CapkeyとCapを返します。これは、OSDシステムIDとともに資格情報とも呼ばれます。これは、その機能とSystemIDに対する機能と署名です。OSD規格は、Capkeyを「資格整合性チェック値」と呼び、ReqMacを「リクエスト整合性チェック値」と呼びます。

   CapKey = MAC<SecretKey>(Cap, SystemID)
   Credential = {Cap, SystemID, CapKey}
        

The client uses CapKey to sign all the requests it issues for that object using the respective Cap. In other words, the Cap appears in the request to the storage device, and that request is signed with the CapKey as follows:

クライアントは、Capkeyを使用して、それぞれのキャップを使用してそのオブジェクトのすべてのリクエストに署名します。言い換えれば、キャップはストレージデバイスへのリクエストに表示され、その要求は次のようにキャップキーと署名されます。

   ReqMAC = MAC<CapKey>(Req, ReqNonce)
   Request = {Cap, Req, ReqNonce, ReqMAC}
        

The following is sent to the OSD: {Cap, Req, ReqNonce, ReqMAC}. The OSD uses the SecretKey it shares with the metadata server to compare the ReqMAC the client sent with a locally computed value:

以下はOSDに送信されます:{cap、req、reqnonce、reqmac}。OSDは、メタデータサーバーと共有するSecretKeyを使用して、クライアントが送信したREQMACをローカルに計算した値と比較します。

   LocalCapKey = MAC<SecretKey>(Cap, SystemID)
   LocalReqMAC = MAC<LocalCapKey>(Req, ReqNonce)
        

and if they match the OSD assumes that the capabilities came from an authentic metadata server and allows access to the object, as allowed by the Cap.

また、OSDと一致する場合、機能は本物のメタデータサーバーから来ており、キャップで許可されているようにオブジェクトへのアクセスを許可していると想定しています。

13.3. Protocol Privacy Requirements
13.3. プロトコルプライバシー要件

Note that if the server LAYOUTGET reply, holding CapKey and Cap, is snooped by another client, it can be used to generate valid OSD requests (within the Cap access restrictions).

CapkeyとCapを保持しているサーバーLayoutGetの返信が別のクライアントによってスヌーピングされている場合、有効なOSD要求を使用して(キャップアクセス制限内)。

To provide the required privacy requirements for the capability key returned by LAYOUTGET, the GSS-API [7] framework can be used, e.g., by using the RPCSEC_GSS privacy method to send the LAYOUTGET operation or by using the SSV key to encrypt the oc_capability_key using the GSS_Wrap() function. Two general ways to provide privacy in the absence of GSS-API that are independent of NFSv4 are either an isolated network such as a VLAN or a secure channel provided by IPsec [15].

LayoutGetによって返される機能キーに必要なプライバシー要件を提供するために、GSS-API [7]フレームワークを使用することができます。たとえば、RPCSEC_GSSプライバシー方法を使用してレイアウトゲット操作を送信するか、SSVキーを使用してOC_Capability_Keyを使用してOC_Capability_Keyを暗号化することによりgss_wrap()関数。NFSV4に依存しないGSS-APIの非存在下でプライバシーを提供する2つの一般的な方法は、VLANなどの孤立したネットワークまたはIPSECによって提供される安全なチャネルのいずれかです[15]。

13.4. Revoking Capabilities
13.4. 能力を取り消す

At any time, the metadata server may invalidate all outstanding capabilities on an object by changing its POLICY ACCESS TAG attribute. The value of the POLICY ACCESS TAG is part of a capability, and it must match the state of the object attribute. If they do not match, the OSD rejects accesses to the object with the sense key set to ILLEGAL REQUEST and an additional sense code set to INVALID FIELD IN CDB. When a client attempts to use a capability and is rejected this way, it should issue a LAYOUTCOMMIT for the object and specify PNFS_OSD_BAD_CRED in the olr_ioerr_report parameter. The client may elect to issue a compound LAYOUTRETURN/LAYOUTGET (or LAYOUTCOMMIT/LAYOUTRETURN/LAYOUTGET) to attempt to fetch a refreshed set of capabilities.

メタデータサーバーは、ポリシーアクセスタグ属性を変更することにより、オブジェクト上のすべての未解決の機能を無効にする場合があります。ポリシーアクセスタグの値は機能の一部であり、オブジェクト属性の状態と一致する必要があります。それらが一致しない場合、OSDは違法要求に設定されたSenseキーを使用してオブジェクトへのアクセスを拒否し、CDBの無効なフィールドに追加されたセンスコードを設定します。クライアントが機能を使用しようとし、この方法で拒否されると、オブジェクトのレイアウトコミットを発行し、OLR_IOERR_REPORTパラメーターでPNFS_OSD_BAD_CREDを指定する必要があります。クライアントは、複合layouturn/layoutget(またはlayoutcommit/layoutreturn/layoutget)を発行して、更新された機能セットを取得しようとすることを選択できます。

The metadata server may elect to change the access policy tag on an object at any time, for any reason (with the understanding that there is likely an associated performance penalty, especially if there are outstanding layouts for this object). The metadata server MUST revoke outstanding capabilities when any one of the following occurs:

メタデータサーバーは、何らかの理由でいつでもオブジェクトのアクセスポリシータグを変更することを選択できます(特にこのオブジェクトに未解決のレイアウトがある場合、関連するパフォーマンスペナルティがある可能性が高いことを理解してください)。メタデータサーバーは、次のいずれかが発生した場合、優れた機能を取り消す必要があります。

o the permissions on the object change,

o オブジェクトの変更、変更、

o a conflicting mandatory byte-range lock is granted, or

o 競合する強制バイトレンジロックが付与されます

o a layout is revoked and reassigned to another client.

o レイアウトが取り消され、別のクライアントに再割り当てされます。

A pNFS client will typically hold one layout for each byte range for either READ or READ/WRITE. The client's credentials are checked by the metadata server at LAYOUTGET time and it is the client's responsibility to enforce access control among multiple users accessing the same file. It is neither required nor expected that the pNFS client will obtain a separate layout for each user accessing a shared object. The client SHOULD use OPEN and ACCESS calls to check user permissions when performing I/O so that the server's access control policies are correctly enforced. The result of the ACCESS operation may be cached while the client holds a valid layout as the server is expected to recall layouts when the file's access permissions or ACL change.

PNFSクライアントは、通常、読み取りまたは読み取り/書き込みのいずれかのバイト範囲ごとに1つのレイアウトを保持します。クライアントの資格情報は、MetadataサーバーによってLayoutGet時間にチェックされ、同じファイルにアクセスする複数のユーザー間でアクセス制御を実施するのはクライアントの責任です。PNFSクライアントが共有オブジェクトにアクセスする各ユーザーに対して個別のレイアウトを取得することは必須でも予想もありません。クライアントは、i/oを実行するときにユーザーのアクセス許可を確認するためにオープンコールとアクセス呼び出しを使用して、サーバーのアクセス制御ポリシーが正しく実施されるようにする必要があります。ファイルのアクセス許可またはACLの変更時にサーバーがレイアウトをリコールすることが期待されるため、クライアントが有効なレイアウトを保持している間、アクセス操作の結果はキャッシュされる場合があります。

14. IANA Considerations
14. IANAの考慮事項

As described in NFSv4.1 [6], new layout type numbers have been assigned by IANA. This document defines the protocol associated with the existing layout type number, LAYOUT4_OSD2_OBJECTS, and it requires no further actions for IANA.

NFSV4.1 [6]で説明されているように、新しいレイアウトタイプ番号はIANAによって割り当てられています。このドキュメントでは、既存のレイアウトタイプ番号、layout4_osd2_objectsに関連付けられたプロトコルを定義します。これは、ianaのさらなるアクションを必要としません。

15. References
15. 参考文献
15.1. Normative References
15.1. 引用文献

[1] Weber, R., "Information Technology - SCSI Object-Based Storage Device Commands (OSD)", ANSI INCITS 400-2004, December 2004.

[1] Weber、R。、「情報技術 - SCSIオブジェクトベースのストレージデバイスコマンド(OSD)」、ANSIは2004年12月400-2004を挿入します。

[2] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[2] Bradner、S。、「要件レベルを示すためにRFCで使用するためのキーワード」、BCP 14、RFC 2119、1997年3月。

[3] Eisler, M., "XDR: External Data Representation Standard", STD 67, RFC 4506, May 2006.

[3] Eisler、M。、「XDR:外部データ表現標準」、STD 67、RFC 4506、2006年5月。

[4] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., "Network File System (NFS) Version 4 Minor Version 1 External Data Representation Standard (XDR) Description", RFC 5662, January 2010.

[4] Shepler、S.、ed。、eisler、M.、ed。、およびD. Noveck、ed。、「ネットワークファイルシステム(NFS)バージョン4マイナーバージョン1外部データ表現標準(XDR)説明」、RFC 5662、1月2010年。

[5] IETF Trust, "Legal Provisions Relating to IETF Documents", November 2008, <http://trustee.ietf.org/docs/IETF-Trust-License-Policy.pdf>.

[5] IETF Trust、「IETFドキュメントに関連する法的規定」、2008年11月、<http://trustee.ietf.org/docs/ietf-trust-license-policy.pdf>。

[6] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 5661, January 2010.

[6] Shepler、S.、ed。、Eisler、M.、ed。、およびD. Noveck、ed。、「ネットワークファイルシステム(NFS)バージョン4マイナーバージョン1プロトコル」、RFC 5661、2010年1月。

[7] Linn, J., "Generic Security Service Application Program Interface Version 2, Update 1", RFC 2743, January 2000.

[7] Linn、J。、「ジェネリックセキュリティサービスアプリケーションプログラムインターフェイスバージョン2、更新1」、RFC 2743、2000年1月。

[8] Satran, J., Meth, K., Sapuntzakis, C., Chadalapaka, M., and E. Zeidner, "Internet Small Computer Systems Interface (iSCSI)", RFC 3720, April 2004.

[8] Satran、J.、Meth、K.、Sapuntzakis、C.、Chadalapaka、M。、およびE. Zeidner、「Internet Small Computer Systems Interface(ISCSI)」、RFC 3720、2004年4月。

[9] Weber, R., "SCSI Primary Commands - 3 (SPC-3)", ANSI INCITS 408-2005, October 2005.

[9] Weber、R。、「SCSI Primary Commands-3(SPC-3)」、ANSIは2005年10月408-2005を挿入します。

[10] Krueger, M., Chadalapaka, M., and R. Elliott, "T11 Network Address Authority (NAA) Naming Format for iSCSI Node Names", RFC 3980, February 2005.

[10] Krueger、M.、Chadalapaka、M.、およびR. Elliott、「T11ネットワークアドレスAuthority(NAA)ISCSIノード名の命名形式」、RFC 3980、2005年2月。

[11] IEEE, "Guidelines for 64-bit Global Identifier (EUI-64) Registration Authority", <http://standards.ieee.org/regauth/oui/tutorials/EUI64.html>.

[11] IEEE、「64ビットグローバル識別子(EUI-64)登録局のガイドライン」、<http://standards.ieee.org/regauth/oui/tutorials/eui64.html>。

[12] Tseng, J., Gibbons, K., Travostino, F., Du Laney, C., and J. Souza, "Internet Storage Name Service (iSNS)", RFC 4171, September 2005.

[12] Tseng、J.、Gibbons、K.、Travostino、F.、Du Laney、C。、およびJ. Souza、「インターネットストレージ名サービス(ISNS)」、RFC 4171、2005年9月。

[13] Weber, R., "SCSI Architecture Model - 3 (SAM-3)", ANSI INCITS 402-2005, February 2005.

[13] Weber、R。、「SCSI Architecture Model-3(SAM-3)」、ANSIは2005年2月402-2005を挿入します。

15.2. Informative References
15.2. 参考引用

[14] Weber, R., "SCSI Object-Based Storage Device Commands -2 (OSD-2)", January 2009, <http://www.t10.org/cgi-bin/ac.pl?t=f&f=osd2r05a.pdf>.

[14] Weber、R。、「SCSIオブジェクトベースのストレージデバイスコマンド-2(OSD-2)」、2009年1月、<http://www.t10.org/cgi-bin/ac.pl?t=f&f=OSD2R05A。pdf>。

[15] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.

[15] Kent、S。およびK. Seo、「インターネットプロトコルのセキュリティアーキテクチャ」、RFC 4301、2005年12月。

[16] T10 1415-D, "SCSI RDMA Protocol (SRP)", ANSI INCITS 365-2002, December 2002.

[16] T10 1415-D、「SCSI RDMAプロトコル(SRP)」、ANSIは365-2002、2002年12月にインキシングします。

[17] T11 1619-D, "Fibre Channel Framing and Signaling - 2 (FC-FS-2)", ANSI INCITS 424-2007, February 2007.

[17] T11 1619-D、「ファイバーチャネルフレーミングとシグナル伝達-2(FC-FS-2)」、ANSIは2007年2月424-2007を挿入します。

[18] T10 1601-D, "Serial Attached SCSI - 1.1 (SAS-1.1)", ANSI INCITS 417-2006, June 2006.

[18] T10 1601-D、「シリアル接続SCSI-1.1(SAS-1.1)」、ANSIは2006年6月417-2006を挿入します。

[19] MacWilliams, F. and N. Sloane, "The Theory of Error-Correcting Codes, Part I", 1977.

[19] MacWilliams、F。およびN. Sloane、「エラー修正コードの理論、パートI」、1977。

Appendix A. Acknowledgments
付録A. 謝辞

Todd Pisek was a co-editor of the initial versions of this document. Daniel E. Messinger, Pete Wyckoff, Mike Eisler, Sean P. Turner, Brian E. Carpenter, Jari Arkko, David Black, and Jason Glasgow reviewed and commented on this document.

Todd Pisekは、このドキュメントの最初のバージョンの共同編集者でした。ダニエル・E・メシンガー、ピート・ワイコフ、マイク・アイスラー、ショーン・P・ターナー、ブライアン・E・カーペンター、ジャリ・アークコ、デビッド・ブラック、およびジェイソン・グラスゴーは、この文書についてレビューしてコメントしました。

Authors' Addresses

著者のアドレス

Benny Halevy Panasas, Inc. 1501 Reedsdale St. Suite 400 Pittsburgh, PA 15233 USA

Benny Halevy Panasas、Inc。1501 Reedsdale St. Suite 400 Pittsburgh、PA 15233 USA

   Phone: +1-412-323-3500
   EMail: bhalevy@panasas.com
   URI:   http://www.panasas.com/
        

Brent Welch Panasas, Inc. 6520 Kaiser Drive Fremont, CA 95444 USA

Brent Welch Panasas、Inc。6520 Kaiser Drive Fremont、CA 95444 USA

   Phone: +1-510-608-7770
   EMail: welch@panasas.com
   URI:   http://www.panasas.com/
        

Jim Zelenka Panasas, Inc. 1501 Reedsdale St. Suite 400 Pittsburgh, PA 15233 USA

Jim Zelenka Panasas、Inc。1501 Reedsdale St. Suite 400 Pittsburgh、PA 15233 USA

   Phone: +1-412-323-3500
   EMail: jimz@panasas.com
   URI:   http://www.panasas.com/