

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 针对数据存储库的 POSIX 元数据支持
<a name="posix-metadata-support"></a>

在 Amazon FSx S3 上的链接数据存储库中导入和导出数据时，Amazon for Lustre 会自动传输文件、目录和符号链接（符号链接）的便携式操作系统接口 (POSIX) 元数据。当您将文件系统中的更改导出到其链接的数据存储库时， FSx For Lustre 还会将 POSIX 元数据更改导出为 S3 对象元数据。这意味着，如果另一个 FSx Lustre 文件系统从 S3 导入相同的文件，则这些文件在该文件系统中将具有相同的 POSIX 元数据，包括所有权和权限。

FSx 对于 Lustre，仅导入具有兼容 POSIX 的对象密钥的 S3 对象，如下所示。

```
mydir/
mydir/myfile1
mydir/mysubdir/
mydir/mysubdir/myfile2.txt
```

FSx for Lustre 将目录和符号链接作为单独的对象存储在 S3 上的链接数据存储库中， FSx 对于目录，Lustre 会创建一个键名以斜杠 (“/”) 结尾的 S3 对象，如下所示：
+ S3 对象键`mydir/`映射到 for Lustre 目录`mydir/`。 FSx 
+ S3 对象键`mydir/mysubdir/`映射到 for Lustre 目录`mydir/mysubdir/`。 FSx 

对于符号链接，对 FSx 于 Lustre，使用以下 Amazon S3 架构：
+ **S3 对象密钥** — 相对于 for Lustre 挂载 FSx 目录的链接路径
+ **S3 对象数据** – 此符号链接的目标路径
+ **S3 对象元数据** – 符号链接的元数据

FSx for Lustre 将 POSIX 元数据（包括文件、目录和符号链接的所有权、权限和时间戳）存储在 S3 对象中，如下所示：
+ `Content-Type` – 用于指示 Web 浏览器资源的媒体类型的 HTTP 实体标头。
+ `x-amz-meta-file-permissions` – `<octal file type><octal permission mask>` 格式的文件类型和权限，与 [Linux stat（2）手册页](https://man7.org/linux/man-pages/man2/lstat.2.html)中的 `st_mode` 一致。
**注意**  
FSx for Lustre 不导入或保留`setuid`信息。
+ `x-amz-meta-file-owner` – 以整数表示的所有者用户 ID（UID）。
+ `x-amz-meta-file-group` – 以整数表示的组 ID（GID）。
+ `x-amz-meta-file-atime` – 自 Unix epoch 开始以来最后一次访问的时间（以纳秒为单位）。使用终止时间值`ns`；否则，Lustre 会将该值解释 FSx 为毫秒。
+ `x-amz-meta-file-mtime` – 自 Unix epoch 开始以来最后一次修改的时间（以纳秒为单位）。使用终止时间值`ns`；否则，for Lustre 会将该值解释 FSx 为毫秒。
+ `x-amz-meta-user-agent`— 用户代理，在 Lustre 导 FSx 入过程中被忽略。在导出过程中， FSx 对于 Lustre，将此值设置为。`aws-fsx-lustre`

从 S3 导入没有关联 POSIX 权限的对象时，Lustre FSx 为文件分配的默认 POSIX 权限为。`755`此权限允许所有用户具有读取和执行权限，并且允许文件所有者拥有写入权限。

**注意**  
FSx for Lustre 不会在 S3 对象上保留任何用户定义的自定义元数据。

# 硬链接和导出到 Amazon S3
<a name="hard-links"></a>

如果文件系统的 DRA 上启用了自动导出（使用“新”和“已更改”策略），则 DRA 中包含的每个硬链接都将作为每个硬链接的单独 S3 对象导出到 Amazon S3。如果文件系统上修改了具有多个硬链接的文件，则无论更改文件时使用了哪个硬链接，S3 中的所有副本都会更新。

如果使用数据存储库任务 (DRTs) 将硬链接导出到 S3，则为 DRT 指定的路径中包含的每个硬链接都将作为每个硬链接的单独的 S3 对象导出到 S3。如果文件系统上修改了具有多个硬链接的文件，则无论更改文件时使用了哪个硬链接，S3 中的每个副本都会在相应硬链接导出时更新。

**重要**  
当一个新 FSx 的 Lustre 文件系统链接到 S3 存储桶，而另一个存储桶之前由另一个 FSx 存储桶导出硬链接到 Lustre 文件系统或 Amazon FSx File Gateway 时，这些硬链接随后会作为单独的文件导入到新的文件系统中。 AWS DataSync

## 硬链接和已释放的文件
<a name="hard-links-released-files"></a>

已释放的文件是指元数据位于文件系统，但内容仅存储在 S3 中的文件。有关已释放的文件的更多信息，请参阅[发布文件](file-release.md)。

**重要**  
在具有数据存储库关联的文件系统 (DRAs) 中使用硬链接受以下限制：  
删除并重新创建具有多个硬链接的已发布文件可能会导致所有硬链接的内容被覆盖。
删除已释放的文件将从位于数据存储库关联之外的所有硬链接中删除内容。
为已释放的文件（该文件的相应 S3 对象位于 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类）创建硬链接时，将不会在 S3 中为硬链接创建新对象。

# 演练：将对象上传到 Amazon S3 桶时附加 POSIX 权限
<a name="attach-s3-posix-permissions"></a>

以下步骤将指导您将对象上传到具有 POSIX 权限的 Amazon S3。这样做可以让您在创建与该 S3 存储桶关联的 Amazon FSx 文件系统时导入 POSIX 权限。

**将具有 POSIX 权限的对象上传到 Amazon S3**

1. 在您的本地计算机或机器上，使用以下示例命令来创建要上传到 S3 桶的测试目录（`s3cptestdir`）和文件（`s3cptest.txt`）。

   ```
   $ mkdir s3cptestdir
   $ echo "S3cp metadata import test" >> s3cptestdir/s3cptest.txt
   $ ls -ld s3cptestdir/ s3cptestdir/s3cptest.txt
   drwxr-xr-x 3 500 500 96 Jan 8 11:29 s3cptestdir/
   -rw-r--r-- 1 500 500 26 Jan 8 11:29 s3cptestdir/s3cptest.txt
   ```

   新创建的文件和目录具有文件所有者用户 ID（UID）和组 ID（GID）500，以及前面示例所示的权限。

1. 调用 Amazon S3 API，创建具有元数据权限的 `s3cptestdir` 目录。您必须使用尾斜杠（`/`）指定目录名称。有关支持的 POSIX 元数据的信息，请参阅[针对数据存储库的 POSIX 元数据支持](posix-metadata-support.md)。

   将 `bucket_name` 替换为您的 S3 桶的名称。

   ```
   $ aws s3api put-object --bucket bucket_name --key s3cptestdir/ --metadata '{"user-agent":"aws-fsx-lustre" , \
         "file-atime":"1595002920000000000ns" , "file-owner":"500" , "file-permissions":"0100664","file-group":"500" , \
         "file-mtime":"1595002920000000000ns"}'
   ```

1. 验证 POSIX 权限是否已标记到 S3 对象元数据。

   ```
   $ aws s3api head-object --bucket bucket_name --key s3cptestdir/
   {
       "AcceptRanges": "bytes",
       "LastModified": "Fri, 08 Jan 2021 17:32:27 GMT",
       "ContentLength": 0,
       "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
       "VersionId": "bAlhCoWq7aIEjc3R6Myc6UOb8sHHtJkR",
       "ContentType": "binary/octet-stream",
       "Metadata": {
           "user-agent": "aws-fsx-lustre",
           "file-atime": "1595002920000000000ns",
           "file-owner": "500",
           "file-permissions": "0100664",
           "file-group": "500",
           "file-mtime": "1595002920000000000ns"
       }
   }
   ```

1. 将测试文件（在步骤 1 中创建）从您的计算机上传到具有元数据权限的 S3 桶。

   ```
   $ aws s3 cp s3cptestdir/s3cptest.txt s3://bucket_name/s3cptestdir/s3cptest.txt \
         --metadata '{"user-agent":"aws-fsx-lustre" , "file-atime":"1595002920000000000ns" , \
         "file-owner":"500" , "file-permissions":"0100664","file-group":"500" , "file-mtime":"1595002920000000000ns"}'
   ```

1. 验证 POSIX 权限是否已标记到 S3 对象元数据。

   ```
   $ aws s3api head-object --bucket bucket_name --key s3cptestdir/s3cptest.txt
   {
       "AcceptRanges": "bytes",
       "LastModified": "Fri, 08 Jan 2021 17:33:35 GMT",
       "ContentLength": 26,
       "ETag": "\"eb33f7e1f44a14a8e2f9475ae3fc45d3\"",
       "VersionId": "w9ztRoEhB832m8NC3a_JTlTyIx7Uzql6",
       "ContentType": "text/plain",
       "Metadata": {
           "user-agent": "aws-fsx-lustre",
           "file-atime": "1595002920000000000ns",
           "file-owner": "500",
           "file-permissions": "0100664",
           "file-group": "500",
           "file-mtime": "1595002920000000000ns"
       }
   }
   ```

1. 验证与 S3 存储桶关联 FSx 的 Amazon 文件系统的权限。

   ```
   $ sudo lfs df -h /fsx
   UUID                       bytes        Used   Available Use% Mounted on
   3rnxfbmv-MDT0000_UUID       34.4G        6.1M       34.4G   0% /fsx[MDT:0]
   3rnxfbmv-OST0000_UUID        1.1T        4.5M        1.1T   0% /fsx[OST:0]
    
   filesystem_summary:         1.1T        4.5M        1.1T   0% /fsx
    
   $ cd /fsx/s3cptestdir/
   $ ls -ld s3cptestdir/
   drw-rw-r-- 2 500 500 25600 Jan  8 17:33 s3cptestdir/
   
   $ ls -ld s3cptestdir/s3cptest.txt
   -rw-rw-r-- 1 500 500 26 Jan 8 17:33 s3cptestdir/s3cptest.txt
   ```

`s3cptestdir` 目录和 `s3cptest.txt` 文件都导入了 POSIX 权限。