AWS DataSync で共有フォルダの設定を転送できるか検証してみた

共有フォルダの設定を移行したい場合はDataSync実行後にプラスアルファの作業が必要
2022.11.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DataSyncを使えば共有フォルダの設定も移行できるか気になる

こんにちは、のんピ(@non____97)です。

皆さんはDataSyncで共有フォルダの設定も移行できるか気になるたことはありますか? 私はあります。

DataSyncがSMBを使って転送する場合、扱えるメタデータは以下の通りです。

セルフマネージドサーバーメッセージブロック (SMB)、または FSx for Windows File Server 間、または FSx for Windows File Server 間、または FSx for Windows File Server 間、または FSx for Windows File Server 間、または FSx for Windows File Server (SMB) 間でコピーする場合— この場合は、 DataSync 次のメタデータをコピーできます。

  • ファイルのタイムスタンプ: アクセス時間、変更時間、作成時間
  • ファイル所有者のセキュリティ識別子 (SID)
  • 標準ファイル属性:
    • 読み取り専用 (R)
    • アーカイブ (A)
    • システム (S)
    • 非表示 (H)
    • 圧縮 (C)
    • コンテンツのインデックスなし (N)
    • 暗号化 (E)
    • 一時 (T)
    • オフライン (O)
    • スパース (P)
  • オブジェクトへのアクセスを許可するかどうかを決定する NTFS 任意アクセスリスト (DACL)
  • 管理者がセキュリティで保護されたオブジェクトへのアクセスの試みをログに記録するために使用する NTFS システムアクセスコントロールリスト (SACL)

の方法 DataSync メタデータおよび特殊ファイルを処理します - AWS DataSync

共有フォルダのアクセス権は含まれていないですね。

書かれていないだけで、実は含まれるなんてこともあると思います。

気になったので検証してみます。

いきなりまとめ

  • DataSyncは共有フォルダの設定を転送しない
  • 共有フォルダの設定はDataSync以外の方法で設定してあげる必要がある
  • 共有フォルダ内のファイルやフォルダは転送される
  • DataSyncのFSx for ONTAPのロケーションにSMBで接続する場合は、パスにCIFSファイル共有(共有フォルダ)の名前を指定する
    • CreateLocationFsxOntap APIのドキュメントにはSVMのジャンクションパスを指定するように記載があるので注意

検証環境

検証環境は以下の通りです。

DataSyncを使ったCIFSファイル共有の転送検証の構成図

FSx for ONTAPファイルシステムにSVM1SVM2とSVMを作成します。

各SVMのボリュームのジャンクションパスは以下の通りです。

SVM1のroot
├── vol1
│   └── vol3
└── vol2

SVM2のroot
├── vol1
└── vol2

SVM1には以下のようにジャンクションパスを指定してCIFSファイル共有を作成します。

  • share1 : /vol1
  • share2 : /vol2
  • share3 : /vol1/vol3
  • share4 : /vol2/folder

SVM2にはCIFSファイル共有を作成しません。

DataSyncでSVM1/からSVM2/に転送して、SVM1上のCIFSファイル共有の設定が転送されるか確認します。

AD DCについては以下記事の検証で使用したものを流用します。

検証用のSVMとボリュームの用意

それでは、まず検証用のSVMとボリュームの用意をします。

参考までにFSx for ONTAPファイルシステムの設定は以下の通りです。

$ aws fsx describe-file-systems
{
    "FileSystems": [
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-11-12T02:23:39.467000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "FileSystemType": "ONTAP",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 1024,
            "StorageType": "SSD",
            "VpcId": "vpc-08b84da1f793ed513",
            "SubnetIds": [
                "subnet-08dc789896a48a3b4"
            ],
            "NetworkInterfaceIds": [
                "eni-032eb46f2ae94002f",
                "eni-06c258dd5aaaca549"
            ],
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7",
            "Tags": [
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "FsxnStack"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "FSxforONTAPfilesystem"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/FsxnStack/78cdb890-5423-11ed-81fb-0eac30df53d1"
                },
                {
                    "Key": "Name",
                    "Value": "fsx-for-ontap-file-system"
                }
            ],
            "OntapConfiguration": {
                "AutomaticBackupRetentionDays": 7,
                "DailyAutomaticBackupStartTime": "16:00",
                "DeploymentType": "SINGLE_AZ_1",
                "Endpoints": {
                    "Intercluster": {
                        "DNSName": "intercluster.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                        "IpAddresses": [
                            "10.0.1.75",
                            "10.0.1.80"
                        ]
                    },
                    "Management": {
                        "DNSName": "management.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                        "IpAddresses": [
                            "10.0.1.110"
                        ]
                    }
                },
                "DiskIopsConfiguration": {
                    "Mode": "AUTOMATIC",
                    "Iops": 3072
                },
                "PreferredSubnetId": "subnet-08dc789896a48a3b4",
                "ThroughputCapacity": 128,
                "WeeklyMaintenanceStartTime": "6:17:00"
            }
        }
    ]
}

まず、DataSyncのソースロケーションとして使用するSVMであるSVM1を作成します。

# SVM1のパラメーターを指定
$ filesystem_id=fs-083d045e152f6c0a7
$ svm_name=svm1
$ net_bios_name=SVM1
$ domain_name=corp.non-97.net
$ organizational_unit_distinguished_name='OU=FSxForONTAP,DC=corp,DC=non-97,DC=net'
$ filesystem_administrators_group=FSxAdminGroup
$ service_account_user_name=FSxServiceAccount
$ service_account_password='<サービスアカウントのパスワード>'
$ dns_ip=10.0.1.10

$ create_storage_virtual_machine_input=$(cat <<EOM
{
    "ActiveDirectoryConfiguration": {
        "NetBiosName": "$net_bios_name",
        "SelfManagedActiveDirectoryConfiguration": {
            "DomainName": "$domain_name",
            "OrganizationalUnitDistinguishedName": "$organizational_unit_distinguished_name",
            "FileSystemAdministratorsGroup": "$filesystem_administrators_group",
            "UserName": "$service_account_user_name",
            "Password": "$service_account_password",
            "DnsIps": [
                "$dns_ip"
            ]
        }
    },
    "FileSystemId": "$filesystem_id",
    "Name": "$svm_name",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$svm_name"
        }
    ],
    "RootVolumeSecurityStyle": "NTFS"
}
EOM
)

# SVM1の作成
$ create_storage_virtual_machine_output=$(aws fsx create-storage-virtual-machine \
    --cli-input-json "$create_storage_virtual_machine_input"
)

# SVM1のIDを取得
$ svm_id=$(echo $create_storage_virtual_machine_output \
    | jq -r ".StorageVirtualMachine.StorageVirtualMachineId"
)

# SVM1が作成されたことを確認
$ aws fsx describe-storage-virtual-machines \
    --storage-virtual-machine-ids "$svm_id"
{
    "StorageVirtualMachines": [
        {
            "ActiveDirectoryConfiguration": {
                "NetBiosName": "SVM1",
                "SelfManagedActiveDirectoryConfiguration": {
                    "DomainName": "corp.non-97.net",
                    "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net",
                    "UserName": "FSxServiceAccount",
                    "DnsIps": [
                        "10.0.1.10"
                    ]
                }
            },
            "CreationTime": "2022-11-12T02:39:27.139000+00:00",
            "Endpoints": {
                "Iscsi": {
                    "DNSName": "iscsi.svm-0130caf90485a0034.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.113",
                        "10.0.1.84"
                    ]
                },
                "Management": {
                    "DNSName": "svm-0130caf90485a0034.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.123"
                    ]
                },
                "Nfs": {
                    "DNSName": "svm-0130caf90485a0034.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.123"
                    ]
                },
                "Smb": {
                    "DNSName": "SVM1.corp.non-97.net",
                    "IpAddresses": [
                        "10.0.1.123"
                    ]
                }
            },
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm1",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034",
            "StorageVirtualMachineId": "svm-0130caf90485a0034",
            "Subtype": "DEFAULT",
            "UUID": "417cd919-6233-11ed-85d2-b5000c4a2835"
        }
    ]
}

SVM1が作成されたら、ボリュームを用意します。各ボリュームの名前とジャンクションパス以外のパラメーターは全て同じです。

まず、ジャンクションパスが/vol1のボリュームを作成します。

# ボリュームのパラメーター
$ volume_name=svm1_vol1
$ junction_path='/vol1'
$ volume_size=1024

$ create_volume_input=$(cat <<EOM
{
    "VolumeType": "ONTAP",
    "Name": "$volume_name",
    "OntapConfiguration": {
        "JunctionPath": "$junction_path",
        "SecurityStyle": "NTFS",
        "SizeInMegabytes": $volume_size,
        "StorageEfficiencyEnabled": true,
        "StorageVirtualMachineId": "$svm_id",
        "TieringPolicy": {
            "CoolingPeriod": 31,
            "Name": "AUTO"
        }
    },
    "Tags": [
        {
            "Key": "Name",
            "Value": "$volume_name"
        }
    ]
}
EOM
)

# ボリュームの作成
$ create_volume_output=$(aws fsx create-volume \
    --cli-input-json "$create_volume_input"
)

# 作成されるボリュームの状態を確認
$ echo $create_volume_output \
    | jq -r
{
  "Volume": {
    "CreationTime": "2022-11-12T02:49:21.093000+00:00",
    "FileSystemId": "fs-083d045e152f6c0a7",
    "Lifecycle": "CREATING",
    "Name": "svm1_vol1",
    "OntapConfiguration": {
      "FlexCacheEndpointType": "NONE",
      "JunctionPath": "/vol1",
      "SecurityStyle": "NTFS",
      "SizeInMegabytes": 1024,
      "StorageEfficiencyEnabled": true,
      "StorageVirtualMachineId": "svm-0130caf90485a0034",
      "StorageVirtualMachineRoot": false,
      "TieringPolicy": {
        "CoolingPeriod": 31,
        "Name": "AUTO"
      },
      "OntapVolumeType": "RW"
    },
    "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-01b146c9eb4a737fa",
    "Tags": [
      {
        "Key": "Name",
        "Value": "svm1_vol1"
      }
    ],
    "VolumeId": "fsvol-01b146c9eb4a737fa",
    "VolumeType": "ONTAP"
  }
}

他のボリュームも同じように作成します。最終的にSVM1のボリュームは以下のようになります。

$ aws fsx describe-volumes \
    --filters Name=storage-virtual-machine-id,Values="$svm_id"
{
    "Volumes": [
        {
            "CreationTime": "2022-11-12T02:39:45+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm1_root",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": false,
                "StorageVirtualMachineId": "svm-0130caf90485a0034",
                "StorageVirtualMachineRoot": true,
                "TieringPolicy": {
                    "Name": "NONE"
                },
                "UUID": "448cb6ae-6233-11ed-a090-0bcdbd711eea",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-0a0ba9a3a787a77d5",
            "VolumeId": "fsvol-0a0ba9a3a787a77d5",
            "VolumeType": "ONTAP"
        },
        {
            "CreationTime": "2022-11-12T02:49:21.093000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm1_vol1",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/vol1",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": true,
                "StorageVirtualMachineId": "svm-0130caf90485a0034",
                "StorageVirtualMachineRoot": false,
                "TieringPolicy": {
                    "CoolingPeriod": 31,
                    "Name": "AUTO"
                },
                "UUID": "a32cdd75-6234-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-01b146c9eb4a737fa",
            "VolumeId": "fsvol-01b146c9eb4a737fa",
            "VolumeType": "ONTAP"
        },
        {
            "CreationTime": "2022-11-12T02:50:16.741000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm1_vol2",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/vol2",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": true,
                "StorageVirtualMachineId": "svm-0130caf90485a0034",
                "StorageVirtualMachineRoot": false,
                "TieringPolicy": {
                    "CoolingPeriod": 31,
                    "Name": "AUTO"
                },
                "UUID": "c7c8a6a1-6234-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-04a831d8eaf9eb347",
            "VolumeId": "fsvol-04a831d8eaf9eb347",
            "VolumeType": "ONTAP"
        },
        {
            "CreationTime": "2022-11-12T02:50:17.658000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm1_vol3",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/vol1/vol3",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": true,
                "StorageVirtualMachineId": "svm-0130caf90485a0034",
                "StorageVirtualMachineRoot": false,
                "TieringPolicy": {
                    "CoolingPeriod": 31,
                    "Name": "AUTO"
                },
                "UUID": "c7fc7bad-6234-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-05ab13ba398ad90aa",
            "VolumeId": "fsvol-05ab13ba398ad90aa",
            "VolumeType": "ONTAP"
        }
    ]
}

同じ要領で、SVM2SVM2のボリュームを作成します。

作成されたSVMとボリュームは以下の通りです。

# SVM2の確認
$ aws fsx describe-storage-virtual-machines \
    --storage-virtual-machine-ids "$svm_id"
{
    "StorageVirtualMachines": [
        {
            "ActiveDirectoryConfiguration": {
                "NetBiosName": "SVM2",
                "SelfManagedActiveDirectoryConfiguration": {
                    "DomainName": "corp.non-97.net",
                    "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net",
                    "UserName": "FSxServiceAccount",
                    "DnsIps": [
                        "10.0.1.10"
                    ]
                }
            },
            "CreationTime": "2022-11-12T02:52:10.004000+00:00",
            "Endpoints": {
                "Iscsi": {
                    "DNSName": "iscsi.svm-074f542c2e27ebc8f.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.119",
                        "10.0.1.72"
                    ]
                },
                "Management": {
                    "DNSName": "svm-074f542c2e27ebc8f.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.116"
                    ]
                },
                "Nfs": {
                    "DNSName": "svm-074f542c2e27ebc8f.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                    "IpAddresses": [
                        "10.0.1.116"
                    ]
                },
                "Smb": {
                    "DNSName": "SVM2.corp.non-97.net",
                    "IpAddresses": [
                        "10.0.1.116"
                    ]
                }
            },
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm2",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f",
            "StorageVirtualMachineId": "svm-074f542c2e27ebc8f",
            "Subtype": "DEFAULT",
            "UUID": "05fe4aa3-6235-11ed-85d2-b5000c4a2835"
        }
    ]
}

# SVM2のボリュームの確認
$ aws fsx describe-volumes \
    --filters Name=storage-virtual-machine-id,Values="$svm_id"
{
    "Volumes": [
        {
            "CreationTime": "2022-11-12T02:52:29+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm2_root",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": false,
                "StorageVirtualMachineId": "svm-074f542c2e27ebc8f",
                "StorageVirtualMachineRoot": true,
                "TieringPolicy": {
                    "Name": "NONE"
                },
                "UUID": "0becb9a3-6235-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-0be974bc08ef01a3f",
            "VolumeId": "fsvol-0be974bc08ef01a3f",
            "VolumeType": "ONTAP"
        },
        {
            "CreationTime": "2022-11-12T03:00:54.525000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm2_vol1",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/vol1",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": true,
                "StorageVirtualMachineId": "svm-074f542c2e27ebc8f",
                "StorageVirtualMachineRoot": false,
                "TieringPolicy": {
                    "CoolingPeriod": 31,
                    "Name": "AUTO"
                },
                "UUID": "43190dee-6236-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-077128438e347eff8",
            "VolumeId": "fsvol-077128438e347eff8",
            "VolumeType": "ONTAP"
        },
        {
            "CreationTime": "2022-11-12T03:00:55.491000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "Lifecycle": "CREATED",
            "Name": "svm2_vol2",
            "OntapConfiguration": {
                "FlexCacheEndpointType": "NONE",
                "JunctionPath": "/vol2",
                "SecurityStyle": "NTFS",
                "SizeInMegabytes": 1024,
                "StorageEfficiencyEnabled": true,
                "StorageVirtualMachineId": "svm-074f542c2e27ebc8f",
                "StorageVirtualMachineRoot": false,
                "TieringPolicy": {
                    "CoolingPeriod": 31,
                    "Name": "AUTO"
                },
                "UUID": "432cee0c-6236-11ed-85d2-b5000c4a2835",
                "OntapVolumeType": "RW"
            },
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:volume/fs-083d045e152f6c0a7/fsvol-0c71e47681dd3f74a",
            "VolumeId": "fsvol-0c71e47681dd3f74a",
            "VolumeType": "ONTAP"
        }
    ]
}

CIFSファイル共有(共有フォルダ)の作成

次に、CIFSファイル共有(共有フォルダ)を作成します。

パスがボリュームのCIFSファイル共有はONTAP CLIで作成します。

FSx for ONTAPファイルシステムにSSHします。

> ssh fsxadmin@management.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com
Password:

This is your first recorded login.
FsxId083d045e152f6c0a7::>

CIFSサーバーが稼働しており、各SVMにCIFSファイル共有がc$ipc$しかないことを確認します。

# CIFSサーバーが稼働していることを確認
FsxId083d045e152f6c0a7::> cifs show
            Server          Status    Domain/Workgroup Authentication
Vserver     Name            Admin     Name             Style
----------- --------------- --------- ---------------- --------------
svm1        SVM1            up        CORP             domain
svm2        SVM2            up        CORP             domain
2 entries were displayed.

# 各SVMにCIFSファイル共有が c$ と ipc$ しかないことを確認
FsxId083d045e152f6c0a7::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
svm2           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           ipc$          /                 browsable  -        -
4 entries were displayed.

ONTAPにおけるc$の仕様は以下NetApp公式ドキュメントをご覧ください。

それでは、SVM1にCIFSファイル共有を作成します。

# ボリュームのジャンクションパスの確認
FsxId083d045e152f6c0a7::> volume show -fields junction-path
vserver volume    junction-path
------- --------- -------------
svm1    svm1_root /
svm1    svm1_vol1 /vol1
svm1    svm1_vol2 /vol2
svm1    svm1_vol3 /vol1/vol3
svm2    svm2_root /
svm2    svm2_vol1 /vol1
svm2    svm2_vol2 /vol2
7 entries were displayed.

# CIFSファイル共有 share1 の作成
FsxId083d045e152f6c0a7::> cifs share create -vserver svm1 -share-name share1 -path /vol1

# CIFSファイル共有 share2 の作成
FsxId083d045e152f6c0a7::> cifs share create -vserver svm1 -share-name share2 -path /vol2

# CIFSファイル共有 share3 の作成
FsxId083d045e152f6c0a7::> cifs share create -vserver svm1 -share-name share3 -path /vol1/vol3

# CIFSファイル共有が作成されたことを確認
FsxId083d045e152f6c0a7::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
svm1           share1        /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share2        /vol2             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share3        /vol1/vol3        oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           ipc$          /                 browsable  -        -
7 entries were displayed.

次にMMCを使って/vol2配下にfolderというフォルダを作成して、共有フォルダとして設定します。

AD DC上でfsmgmt.mscを実行し、SVM1に接続します。

MMCからもONTAP CLIから作成したCIFSファイル共有があることを確認します。

CIFSファイル共有があることを確認

共有フォルダ作成のウィザードに従って、共有フォルダを作成します。

まず、vol2配下にfolderというフォルダを作成します。

フォルダの作成

作成したフォルダをパスに指定して、Nextをクリックします。

作成したフォルダの指定

share nameshare4と入力して、Nextをクリックします。

共有名の指定

DataSyncで共有フォルダの設定が転送される場合、権限も正しく転送されるか確認したいので、FSxAdminGroupにフルコントロールを付与します。

権限のカスタマイズ

FSxAdminGroupの追加

最後にFinishをクリックします。

Finish

share4が追加されたことを確認します。

Shared Foldersの確認

ONTAP CLIからもshare4SVM1上に追加されたことを確認します。

FsxId083d045e152f6c0a7::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
svm1           share1        /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share2        /vol2             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share3        /vol1/vol3        oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share4        /vol2/folder      oplocks             CORP\FSxAdminGroup / Full Control
                                               browsable           Everyone / Read
                                               changenotify
                                               show-previous-versions
svm2           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           ipc$          /                 browsable  -        -

DataSyncタスク実行

DataSyncのロケーションの作成

次にDataSyncのロケーションを作成します。

まず、SVM1のルートボリュームのロケーションです。

# SVM1のルートボリュームのロケーションのパラメーター
$ domain=corp.non-97.net
$ password='<サービスアカウントのパスワード>'
$ user=FSxAdmin
$ sg_arn=arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034
$ name=svm1

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "/",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_ontap_output=$(aws datasync create-location-fsx-ontap \
    --cli-input-json "$create_location_fsx_ontap_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-ontap \
    --location-arn $(echo $create_location_fsx_ontap_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T03:31:03.517000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-097e6e9d137283ce5",
    "LocationUri": "fsxn-smb://SVM1.CORP.NON-97.NET/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

同じ要領で、SVM2のルートボリュームのロケーションを作成します。

# SVM2のルートボリュームのロケーションのパラメーター
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f
$ name=svm2

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "/",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_ontap_output=$(aws datasync create-location-fsx-ontap \
    --cli-input-json "$create_location_fsx_ontap_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-ontap \
    --location-arn $(echo $create_location_fsx_ontap_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T03:40:28.706000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-06e1321bac35aa347",
    "LocationUri": "fsxn-smb://SVM2.CORP.NON-97.NET/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

DataSyncのタスク作成と実行

DataSyncロケーションの用意ができたので、DataSyncタスクを作成して実行します。

SVM1のルートボリュームからSVM2のルートボリュームに転送するようなDataSyncタスクを作成します。

# DataSyncタスクのパラメーター
$ src_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-097e6e9d137283ce5   # SVM1のルートボリュームのロケーション
$ dest_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-06e1321bac35aa347. # SVM2のルートボリュームのロケーション
$ clouwatch_logs_arn='arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*'
$ name='svm1-to-svm2'

$ create_task_input=$(cat <<EOM
{
    "SourceLocationArn": "$src_location_arn",
    "DestinationLocationArn": "$dest_location_arn",
    "CloudWatchLogGroupArn": "$clouwatch_logs_arn",
    "Name": "$name",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    }
}
EOM
)

# DataSyncタスクの作成
$ create_task_output=$(aws datasync create-task \
    --cli-input-json "$create_task_input"
)

# 作成されたDataSyncタスクの確認
$ aws datasync describe-task \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
{
    "TaskArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-03dd23c56898e3363",
    "Status": "AVAILABLE",
    "Name": "svm1-to-svm2",
    "SourceLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-097e6e9d137283ce5",
    "DestinationLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-06e1321bac35aa347",
    "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*",
    "SourceNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-02bfdb920cf43128e",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-03da754820e19c1b5"
    ],
    "DestinationNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-08c999f14a73a1998",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0eda40bb7c9eca8f1"
    ],
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "CreationTime": "2022-11-12T03:44:11.846000+00:00",
    "Includes": []
}

DataSyncタスクが作成されました。

こちらのタスクを実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-03dd23c56898e3363/execution/exec-08784814e2e567a69",
    "Status": "ERROR",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T03:46:16.605000+00:00",
    "EstimatedFilesToTransfer": 0,
    "EstimatedBytesToTransfer": 0,
    "FilesTransferred": 0,
    "BytesWritten": 0,
    "BytesTransferred": 0,
    "Result": {
        "PrepareDuration": 0,
        "PrepareStatus": "PENDING",
        "TotalDuration": 0,
        "TransferDuration": 0,
        "TransferStatus": "PENDING",
        "VerifyDuration": 0,
        "VerifyStatus": "PENDING",
        "ErrorCode": "SyncTaskErrorLocationNotAdded",
        "ErrorDetail": "Task failed to access location loc-097e6e9d137283ce5: x40016: mount error(2): No such file or directory\nRefer to the mount.cifs(8) manual page (e.g. man mount.cifs)"
    },
    "BytesCompressed": 0
}

No such file or directory Refer to the mount.cifs(8) manual pageとエラーになってしまいました。

CloudWatch Logsを確認しても以下のログしか記録されていませんでした。

[INFO] Request to start task-03dd23c56898e3363.

指定したパスは/なので、パスが存在しないということはないですよね。

ルートボリューム以外のボリュームを指定してDataSyncを実行

DataSyncのロケーションの作成

DataSyncのFSx for ONTAPのロケーションで作成するCreateLocationFsxOntap APIを確認してみます。

Subdirectory

Specifies the junction path (also known as a mount point) in the SVM volume where you're copying data to or from (for example, /vol1).

Note

Don't specify a junction path in the SVM's root volume. For more information, see Managing FSx for ONTAP storage virtual machines in the Amazon FSx for NetApp ONTAP User Guide.

CreateLocationFsxOntap - AWS DataSync

SVM内のボリュームのジャンクションパスをしろと書いてありますが、注意書きで「SVMのルートボリュームのジャンクションパスを指定してはならない」とも記載がありますね。

ということで、各SVMのロケーションに設定するパスを/から/vol1に変更します。ロケーションの設定を後から変更することはできないため、作り直しになります。

# SVM1の /vol1 のロケーションの作成
# SVM1の /vol1 のロケーションのパラメーター
$ sub_directory=/vol1
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034
$ name=svm1

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "$sub_directory",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_ontap_output=$(aws datasync create-location-fsx-ontap \
    --cli-input-json "$create_location_fsx_ontap_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-ontap \
    --location-arn $(echo $create_location_fsx_ontap_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T03:54:30.426000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-04591d2426975ed46",
    "LocationUri": "fsxn-smb://SVM1.CORP.NON-97.NET/vol1/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}


# SVM2の /vol1 のロケーションの作成
# SVM2の /vol1 のロケーションのパラメーター
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f
$ name=svm2

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "$sub_directory",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_ontap_output=$(aws datasync create-location-fsx-ontap \
    --cli-input-json "$create_location_fsx_ontap_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-ontap \
    --location-arn $(echo $create_location_fsx_ontap_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T03:55:58.250000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a286de7b0b46276",
    "LocationUri": "fsxn-smb://SVM2.CORP.NON-97.NET/vol1/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

DataSyncのタスク作成と実行

各SVMのパスが/vol1のロケーションを用意できたので、DataSyncタスク作成します。

# DataSyncタスクのパラメーター
$ src_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-04591d2426975ed46.  # SVM1の /vol1 のロケーション
$ dest_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a286de7b0b46276. # SVM2の /vol1 のロケーション
$ clouwatch_logs_arn='arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*'
$ name='svm1_vol1-to-svm2_vol1'

$ create_task_input=$(cat <<EOM
{
    "SourceLocationArn": "$src_location_arn",
    "DestinationLocationArn": "$dest_location_arn",
    "CloudWatchLogGroupArn": "$clouwatch_logs_arn",
    "Name": "$name",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    }
}
EOM
)

# DataSyncタスクの作成
$ create_task_output=$(aws datasync create-task \
    --cli-input-json "$create_task_input"
)

# 作成されたDataSyncタスクの確認
$ aws datasync describe-task \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
{
    "TaskArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-0328b78115cd858d6",
    "Status": "AVAILABLE",
    "Name": "svm1_vol1-to-svm2_vol1",
    "SourceLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-04591d2426975ed46",
    "DestinationLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a286de7b0b46276",
    "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*",
    "SourceNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-00d59fa4dc467d0e9",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-09aff367d7ed122ad"
    ],
    "DestinationNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-03127ef2aca7f6752",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0e0e700fec52d6f7f"
    ],
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "CreationTime": "2022-11-12T03:58:34.790000+00:00",
    "Includes": []
}

DataSyncタスクが作成されました。

こちらのタスクを実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-0328b78115cd858d6/execution/exec-0f84254cd877312fe",
    "Status": "ERROR",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T03:59:33.445000+00:00",
    "EstimatedFilesToTransfer": 0,
    "EstimatedBytesToTransfer": 0,
    "FilesTransferred": 0,
    "BytesWritten": 0,
    "BytesTransferred": 0,
    "Result": {
        "PrepareDuration": 0,
        "PrepareStatus": "PENDING",
        "TotalDuration": 0,
        "TransferDuration": 0,
        "TransferStatus": "PENDING",
        "VerifyDuration": 0,
        "VerifyStatus": "PENDING",
        "ErrorCode": "SyncTaskErrorLocationNotAdded",
        "ErrorDetail": "Task failed to access location loc-04591d2426975ed46: x40016: mount error(2): No such file or directory\nRefer to the mount.cifs(8) manual page (e.g. man mount.cifs)"
    },
    "BytesCompressed": 0
}

状態変わらず、No such file or directory Refer to the mount.cifs(8) manual pageとエラーになってしまいました。

転送元に何もファイルを置いていないのがよくないのでしょうか。適当なファイルを転送元のボリュームに置いて再実行してみます。

まず、適当なテキストファイルをSVM1/vol1のCIFSファイル共有であるshare1に配置します。

# SVM1の /vol1 のCIFSファイル共有をZドライブにマウント
> net use Z: \\SVM1.CORP.NON-97.NET\share1
The command completed successfully.

# 適当なテキストファイルを作成
> echo "test" > Z:\test.txt

# 作成したファイルを確認
> ls Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----l        11/11/2022   4:50 PM                vol3
-a----        11/11/2022   6:08 PM             14 test.txt

この状態でDataSyncタスクを再実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-0328b78115cd858d6/execution/exec-0f2edc811751687af",
    "Status": "ERROR",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T04:09:13.875000+00:00",
    "EstimatedFilesToTransfer": 0,
    "EstimatedBytesToTransfer": 0,
    "FilesTransferred": 0,
    "BytesWritten": 0,
    "BytesTransferred": 0,
    "Result": {
        "PrepareDuration": 0,
        "PrepareStatus": "PENDING",
        "TotalDuration": 0,
        "TransferDuration": 0,
        "TransferStatus": "PENDING",
        "VerifyDuration": 0,
        "VerifyStatus": "PENDING",
        "ErrorCode": "SyncTaskErrorLocationNotAdded",
        "ErrorDetail": "Task failed to access location loc-02a286de7b0b46276: x40016: mount error(2): No such file or directory\nRefer to the mount.cifs(8) manual page (e.g. man mount.cifs)"
    },
    "BytesCompressed": 0
}

変わらずエラーになります。エラー内容も全く同じです。

転送元をFSx for Windows File ServerにしてDataSyncを実行

作成したFSx for Windows File Serverの確認

「もしや、FSx for ONTAPのロケーションを転送元に設定することはできないのでは?」とも思うようになってきました。

問題切り分けのために、転送元をFSx for Windows File ServerにしてDataSyncを実行します。

転送元がFSx for Windows File Serverで、転送先がFSx for ONTAPのパターンは以下記事で実行したことがあるので何か見えてくるかも知れません。

作成したFSx for Windows File Serverは以下の通りです。

$ aws fsx describe-file-systems
{
    "FileSystems": [
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-11-12T02:23:39.467000+00:00",
            "FileSystemId": "fs-083d045e152f6c0a7",
            "FileSystemType": "ONTAP",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 1024,
            "StorageType": "SSD",
            "VpcId": "vpc-08b84da1f793ed513",
            "SubnetIds": [
                "subnet-08dc789896a48a3b4"
            ],
            "NetworkInterfaceIds": [
                "eni-032eb46f2ae94002f",
                "eni-06c258dd5aaaca549"
            ],
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7",
            "Tags": [
                {
                    "Key": "aws:cloudformation:stack-name",
                    "Value": "FsxnStack"
                },
                {
                    "Key": "aws:cloudformation:logical-id",
                    "Value": "FSxforONTAPfilesystem"
                },
                {
                    "Key": "aws:cloudformation:stack-id",
                    "Value": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/FsxnStack/78cdb890-5423-11ed-81fb-0eac30df53d1"
                },
                {
                    "Key": "Name",
                    "Value": "fsx-for-ontap-file-system"
                }
            ],
            "OntapConfiguration": {
                "AutomaticBackupRetentionDays": 7,
                "DailyAutomaticBackupStartTime": "16:00",
                "DeploymentType": "SINGLE_AZ_1",
                "Endpoints": {
                    "Intercluster": {
                        "DNSName": "intercluster.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                        "IpAddresses": [
                            "10.0.1.75",
                            "10.0.1.80"
                        ]
                    },
                    "Management": {
                        "DNSName": "management.fs-083d045e152f6c0a7.fsx.us-east-1.amazonaws.com",
                        "IpAddresses": [
                            "10.0.1.110"
                        ]
                    }
                },
                "DiskIopsConfiguration": {
                    "Mode": "AUTOMATIC",
                    "Iops": 3072
                },
                "PreferredSubnetId": "subnet-08dc789896a48a3b4",
                "ThroughputCapacity": 128,
                "WeeklyMaintenanceStartTime": "6:17:00"
            }
        },
        {
            "OwnerId": "<AWSアカウントID>",
            "CreationTime": "2022-11-12T04:38:25.535000+00:00",
            "FileSystemId": "fs-0a40be3d53088c7d4",
            "FileSystemType": "WINDOWS",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 32,
            "StorageType": "SSD",
            "VpcId": "vpc-08b84da1f793ed513",
            "SubnetIds": [
                "subnet-08dc789896a48a3b4"
            ],
            "NetworkInterfaceIds": [
                "eni-0ea676b904dd79c6d"
            ],
            "DNSName": "amznfsxmdflnwm0.corp.non-97.net",
            "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254",
            "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-0a40be3d53088c7d4",
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "fsxw"
                }
            ],
            "WindowsConfiguration": {
                "SelfManagedActiveDirectoryConfiguration": {
                    "DomainName": "corp.non-97.net",
                    "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net",
                    "FileSystemAdministratorsGroup": "FSxAdminGroup",
                    "UserName": "FSxServiceAccount",
                    "DnsIps": [
                        "10.0.1.10"
                    ]
                },
                "DeploymentType": "SINGLE_AZ_2",
                "RemoteAdministrationEndpoint": "amznfsxof04af3l.corp.non-97.net",
                "PreferredSubnetId": "subnet-08dc789896a48a3b4",
                "PreferredFileServerIp": "10.0.1.78",
                "ThroughputCapacity": 32,
                "WeeklyMaintenanceStartTime": "6:08:00",
                "DailyAutomaticBackupStartTime": "06:00",
                "AutomaticBackupRetentionDays": 0,
                "CopyTagsToBackups": false,
                "AuditLogConfiguration": {
                    "FileAccessAuditLogLevel": "DISABLED",
                    "FileShareAccessAuditLogLevel": "DISABLED"
                }
            }
        }
    ]
}

AD周りの設定はFSx for ONTAPのSVMと全く同じにしています。

作成したFSx for Windows File ServerをYドライブにマウントして、適当なテキストファイルを作成します。

# 作成したFSx for Windows File ServerをYドライブにマウント
> net use Y: \\amznfsxmdflnwm0.corp.non-97.net\share
The command completed successfully.

# 適当なテキストファイルを作成
> echo "test" > Y:\fsxw-test.txt

# 作成したファイルを確認
> ls Y:


    Directory: Y:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        11/11/2022   7:13 PM             14 fsxw-test.txt

DataSyncのロケーションの作成

FSx for Windows File Serverのロケーションを作成します。その際、FSx for Windows File Serverのデフォルトの共有名はshareなので、こちらをパス(Subdirectory)に指定します。

# FSx for Windows File Serverのロケーションのパラメーター
$ sub_directory=share
$ domain=corp.non-97.net
$ password='<サービスアカウントのパスワード>'
$ user=FSxAdmin
$ sg_arn=arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365
$ file_system_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-0a40be3d53088c7d4

$ create_location_fsx_windows_input=$(cat <<EOM
{
    "Subdirectory": "$sub_directory",
    "FsxFilesystemArn": "$file_system_arn",
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "User": "$user",
    "Domain": "$domain",
    "Password": "$password"
}
EOM
)

# ロケーションの作成
$ create_location_fsx_windows_output=$(aws datasync create-location-fsx-windows \
    --cli-input-json "$create_location_fsx_windows_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-windows \
    --location-arn $(echo $create_location_fsx_windows_output \
        | jq -r ".LocationArn")
{
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0092a6da27ec5e362",
    "LocationUri": "fsxw://us-east-1.fs-0a40be3d53088c7d4/share/",
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "CreationTime": "2022-11-12T05:19:02.350000+00:00",
    "User": "FSxAdmin",
    "Domain": "corp.non-97.net"
}

DataSyncのタスク作成と実行

FSx for Windows File Serverのロケーションを用意できたので、DataSyncタスク作成します。

転送先はSVM1/vol1です。

# DataSyncタスクのパラメーター
$ src_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0092a6da27ec5e362.  # FSx for Windows File Serverのロケーション
$ dest_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-04591d2426975ed46  # SVM1の /vol1 のロケーション
$ clouwatch_logs_arn='arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*'
$ name='fsxw-to-svm1_vol1'

$ create_task_input=$(cat <<EOM
{
    "SourceLocationArn": "$src_location_arn",
    "DestinationLocationArn": "$dest_location_arn",
    "CloudWatchLogGroupArn": "$clouwatch_logs_arn",
    "Name": "$name",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    }
}
EOM
)

# DataSyncタスクの作成
$ create_task_output=$(aws datasync create-task \
    --cli-input-json "$create_task_input"
)

# 作成されたDataSyncタスクの確認
$ aws datasync describe-task \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
{
    "TaskArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-077a07048459b1dad",
    "Status": "AVAILABLE",
    "Name": "fsxw-to-svm1_vol1",
    "SourceLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0092a6da27ec5e362",
    "DestinationLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-04591d2426975ed46",
    "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*",
    "SourceNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0071f1a83852b49f1",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0b937859f5c5202ed"
    ],
    "DestinationNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0ab02081b77031126",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0b37a8691d9078147"
    ],
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "CreationTime": "2022-11-12T05:34:55.800000+00:00",
    "Includes": []
}

DataSyncタスクが作成されました。

こちらのタスクを実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-077a07048459b1dad/execution/exec-045a92ee0f3b48e14",
    "Status": "ERROR",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T05:36:18.568000+00:00",
    "EstimatedFilesToTransfer": 0,
    "EstimatedBytesToTransfer": 0,
    "FilesTransferred": 0,
    "BytesWritten": 0,
    "BytesTransferred": 0,
    "Result": {
        "PrepareDuration": 0,
        "PrepareStatus": "PENDING",
        "TotalDuration": 0,
        "TransferDuration": 0,
        "TransferStatus": "PENDING",
        "VerifyDuration": 0,
        "VerifyStatus": "PENDING",
        "ErrorCode": "SyncTaskErrorLocationNotAdded",
        "ErrorDetail": "Task failed to access location loc-04591d2426975ed46: x40016: mount error(2): No such file or directory\nRefer to the mount.cifs(8) manual page (e.g. man mount.cifs)"
    },
    "BytesCompressed": 0
}

こちらもエラーになりました。

しかし、エラー文を見るとNo such file or directory Refer to the mount.cifs(8) manual pageという箇所は同じですが、対象のロケーションが転送先のSVM1/vol1のロケーションになっています。

以前の記事の検証では転送先にプロトコルがSMBのSVMをロケーションとして設定して転送できたことから、「FSx for ONTAPのロケーションを転送元に設定することはできない」ということではなさそうです。

FSx for ONTAPのロケーションにCIFSファイル共有名を指定してDataSyncを実行

DataSyncのロケーションの作成

以前の記事の検証で使った転送先にプロトコルがSMBのSVMのロケーションを確認してみます。

すると、ボリューム(/smb)とCIFSファイル共有(smb)の名前が非常に似ています。

FsxId074d827fa378d0d58::> vserver cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
fsx-for-ontap-svm                              oplocks             BUILTIN\Administrators / Full Control
               c$            /                 browsable  -
                                               changenotify
                                               show-previous-versions
fsx-for-ontap-svm                              browsable
               ipc$          /                            -        -
fsx-for-ontap-svm                              browsable           Everyone / Full Control
               smb           /smb                         -
3 entries were displayed.

DataSyncのロケーションはパスの先頭に自動で/が付与されます。もしかしたらSVMのジャンクションパスではなく、CIFSファイル共有名を指定する必要があるのかも知れません。

確認のためにSVM1のCIFSファイル共有share1のロケーションを作成します。

# SVM1のCIFSファイル共有 share1 のロケーションのパラメーター
$ domain=corp.non-97.net
$ password='<サービスアカウントのパスワード>'
$ user=FSxAdmin
$ sg_arn=arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034
$ name=svm1
$ sub_directory=/share1

create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "$sub_directory",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_ontap_output=$(aws datasync create-location-fsx-ontap \
    --cli-input-json "$create_location_fsx_ontap_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-ontap \
    --location-arn $(echo $create_location_fsx_ontap_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T05:45:51.105000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a8cd685110953a3",
    "LocationUri": "fsxn-smb://SVM1.CORP.NON-97.NET/share1/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

DataSyncのタスク作成と実行

SVM1のCIFSファイル共有share1のロケーションを作成できたので、転送元がFSx for Windows File Serverで、転送先はSVM1のCIFSファイル共有share1のタスクを作成します。

# DataSyncタスクのパラメーター
$ src_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0092a6da27ec5e362   # FSx for Windows File Serverのロケーション
$ dest_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a8cd685110953a3  # SVM1のCIFSファイル共有 share1 のロケーション
$ clouwatch_logs_arn='arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*'
$ name='fsxw-to-svm1_share1'

$ create_task_input=$(cat <<EOM
{
    "SourceLocationArn": "$src_location_arn",
    "DestinationLocationArn": "$dest_location_arn",
    "CloudWatchLogGroupArn": "$clouwatch_logs_arn",
    "Name": "$name",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    }
}
EOM
)

# DataSyncタスクの作成
$ create_task_output=$(aws datasync create-task \
    --cli-input-json "$create_task_input"
)

# 作成されたDataSyncタスクの確認
$ aws datasync describe-task \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
{
    "TaskArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-041768e13836d01ef",
    "Status": "AVAILABLE",
    "Name": "fsxw-to-svm1_share1",
    "SourceLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0092a6da27ec5e362",
    "DestinationLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-02a8cd685110953a3",
    "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*",
    "SourceNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-00b0b8506ccd4c6ef",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-080d2a935c5a509f0"
    ],
    "DestinationNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-04ae360aabe2172f3",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0d520c4734e253c8c"
    ],
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "CreationTime": "2022-11-12T05:47:48.288000+00:00",
    "Includes": []
}

DataSyncタスクが作成されました。

こちらのタスクを実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-041768e13836d01ef/execution/exec-0ca9e1d0ac54e1c32",
    "Status": "SUCCESS",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T05:49:31.972000+00:00",
    "EstimatedFilesToTransfer": 2,
    "EstimatedBytesToTransfer": 14,
    "FilesTransferred": 3,
    "BytesWritten": 14,
    "BytesTransferred": 14,
    "Result": {
        "PrepareDuration": 1213,
        "PrepareStatus": "SUCCESS",
        "TotalDuration": 5854,
        "TransferDuration": 4174,
        "TransferStatus": "SUCCESS",
        "VerifyDuration": 291,
        "VerifyStatus": "SUCCESS"
    },
    "BytesCompressed": 14
}

DataSyncタスクの実行が成功しました。

やはり、ロケーションのパスにSVMのジャンクションパスではなく、CIFSファイル共有名を指定する必要があるようです。

CloudWatch Logsに出力されたログを確認すると、確かに作成したファイルとメタデータが転送されていそうです。

[INFO] Request to start task-041768e13836d01ef.
[INFO] Execution exec-0ca9e1d0ac54e1c32 started.
[INFO] Started logging in destination hostId: host-0bb09e20804515c38 for Execution exec-0ca9e1d0ac54e1c32
[INFO] Started logging in destination hostId: host-0f781b63d3e82e4e6 for Execution exec-0ca9e1d0ac54e1c32
[NOTICE] Transferred file /fsxw-test.txt, 14 bytes
[NOTICE] Transferred directory metadata /
[NOTICE] Verified file /fsxw-test.txt, 14 bytes
[NOTICE] Verified directory /
[INFO] Execution exec-0ca9e1d0ac54e1c32 finished with status Success.

ONTAP CLIからCIFSファイル共有が追加されているか確認します。

FSx for Windows File ServerのshareからSVM1share1への転送なので、share1の配下にshareというCIFSファイル共有が作成されるのは考えにくいですが、念の為確認です。

FsxId083d045e152f6c0a7::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
svm1           share1        /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share2        /vol2             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share3        /vol1/vol3        oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share4        /vol2/folder      oplocks             CORP\FSxAdminGroup / Full Control
                                               browsable           Everyone / Read
                                               changenotify
                                               show-previous-versions
svm2           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           ipc$          /                 browsable  -        -
8 entries were displayed.

CIFSファイル共有は追加されていないですね。

SVM1share1配下にfsxw-test.txtというファイルが追加されていることを確認します。

> ls Z:\


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        11/11/2022   7:52 PM                .aws-datasync
d----l        11/11/2022   4:50 PM                vol3
-a----        11/11/2022   7:39 PM             14 fsxw-test.txt
-a----        11/11/2022   6:08 PM             14 test.txt

fsxw-test.txtが確かに追加されていますね。

各SVMのCIFSファイル共有 c$ を指定してDataSyncを実行

DataSyncロケーションの作成

ロケーションのパスにSVMのジャンクションパスではなく、CIFSファイル共有名を指定する必要があることが分かりました。

次に、SVMの/のCIFSファイル共有であるc$間をDataSyncで転送します。なんだか/から転送しても/配下のパスを見ているCIFSファイル共有の設定は転送されない気がしてきました。

まず、SVM1のCIFSファイル共有c$のロケーションを作成します。

# SVM1のCIFSファイル共有 c$ のロケーションのパラメーター
$ domain=corp.non-97.net
$ password='<サービスアカウントのパスワード>'
$ user=FSxAdmin
$ sg_arn=arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034
$ name=svm1
$ sub_directory=/c$

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "$sub_directory",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_windows_output=$(aws datasync create-location-fsx-windows \
    --cli-input-json "$create_location_fsx_windows_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-windows \
    --location-arn $(echo $create_location_fsx_windows_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T06:02:02.166000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0927697fdcec306a1",
    "LocationUri": "fsxn-smb://SVM1.CORP.NON-97.NET/c$/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-0130caf90485a0034",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

同様にSVM2のCIFSファイル共有c$のロケーションを作成します。

# SVM2のCIFSファイル共有 c$ のロケーションのパラメーター
$ svm_arn=arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f
$ name=svm2

$ create_location_fsx_ontap_input=$(cat <<EOM
{
    "Protocol": {
        "SMB": {
            "Domain": "$domain",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "Password": "$password",
            "User": "$user"
        }
    },
    "SecurityGroupArns": [
        "$sg_arn"
    ],
    "StorageVirtualMachineArn": "$svm_arn",
    "Subdirectory": "$sub_directory",
    "Tags": [
        {
            "Key": "Name",
            "Value": "$name"
        }
    ]
}
EOM
)

# ロケーションの作成
$ create_location_fsx_windows_output=$(aws datasync create-location-fsx-windows \
    --cli-input-json "$create_location_fsx_windows_input"
)

# 作成されたロケーションの確認
$ aws datasync describe-location-fsx-windows \
    --location-arn $(echo $create_location_fsx_windows_output \
        | jq -r ".LocationArn")
{
    "CreationTime": "2022-11-12T06:03:58.669000+00:00",
    "LocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0bd5947290b47a70c",
    "LocationUri": "fsxn-smb://SVM2.CORP.NON-97.NET/c$/",
    "Protocol": {
        "SMB": {
            "Domain": "corp.non-97.net",
            "MountOptions": {
                "Version": "AUTOMATIC"
            },
            "User": "FSxAdmin"
        }
    },
    "SecurityGroupArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:security-group/sg-0cd906b274d7fa365"
    ],
    "StorageVirtualMachineArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-083d045e152f6c0a7/svm-074f542c2e27ebc8f",
    "FsxFilesystemArn": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-083d045e152f6c0a7"
}

DataSyncのタスク作成と実行

各SVMのCIFSファイル共有c$のロケーションを用意できたので、DataSyncタスク作成します。

転送元はSVM1のCIFSファイル共有c$で、転送先はSVM2のCIFSファイル共有c$です。

# DataSyncタスクのパラメーター
$ src_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0927697fdcec306a1   # SVM1のCIFSファイル共有 c$ のロケーション
$ dest_location_arn=arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0bd5947290b47a70c  # SVM2のCIFSファイル共有 c$ のロケーション
$ clouwatch_logs_arn='arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*'
$ name='svm1_c-to-svm2_c'

$ create_task_input=$(cat <<EOM
{
    "SourceLocationArn": "$src_location_arn",
    "DestinationLocationArn": "$dest_location_arn",
    "CloudWatchLogGroupArn": "$clouwatch_logs_arn",
    "Name": "$name",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    }
}
EOM
)

# DataSyncタスクの作成
$ create_task_output=$(aws datasync create-task \
    --cli-input-json "$create_task_input"
)

# 作成されたDataSyncタスクの確認
$ aws datasync describe-task \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
{
    "TaskArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-0744481af7db83491",
    "Status": "AVAILABLE",
    "Name": "svm1_c-to-svm2_c",
    "SourceLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0927697fdcec306a1",
    "DestinationLocationArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:location/loc-0bd5947290b47a70c",
    "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:<AWSアカウントID>:log-group:/aws/datasync:*",
    "SourceNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0386d39acdbc960ce",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-0fe145c052ed7e933"
    ],
    "DestinationNetworkInterfaceArns": [
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-02f8c4b9a98717fbf",
        "arn:aws:ec2:us-east-1:<AWSアカウントID>:network-interface/eni-09d6dee81614e493e"
    ],
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "CreationTime": "2022-11-12T06:05:34.303000+00:00",
    "Includes": []
}

DataSyncタスクが作成されました。

こちらのタスクを実行します。

# DataSyncタスクの実行
$ start_task_execution_output=$(aws datasync start-task-execution \
    --task-arn $(echo $create_task_output \
        | jq -r ".TaskArn")
)

# タスクの実行結果の確認
$ aws datasync describe-task-execution \
    --task-execution-arn $(echo $start_task_execution_output \
        | jq -r ".TaskExecutionArn")
{
    "TaskExecutionArn": "arn:aws:datasync:us-east-1:<AWSアカウントID>:task/task-0744481af7db83491/execution/exec-0b8b9c0b6b30eebda",
    "Status": "SUCCESS",
    "Options": {
        "VerifyMode": "ONLY_FILES_TRANSFERRED",
        "OverwriteMode": "ALWAYS",
        "Atime": "BEST_EFFORT",
        "Mtime": "PRESERVE",
        "Uid": "NONE",
        "Gid": "NONE",
        "PreserveDeletedFiles": "PRESERVE",
        "PreserveDevices": "NONE",
        "PosixPermissions": "NONE",
        "BytesPerSecond": -1,
        "TaskQueueing": "ENABLED",
        "LogLevel": "TRANSFER",
        "TransferMode": "CHANGED",
        "SecurityDescriptorCopyFlags": "OWNER_DACL",
        "ObjectTags": "PRESERVE"
    },
    "Excludes": [],
    "Includes": [],
    "StartTime": "2022-11-12T06:06:52.493000+00:00",
    "EstimatedFilesToTransfer": 8,
    "EstimatedBytesToTransfer": 28,
    "FilesTransferred": 9,
    "BytesWritten": 28,
    "BytesTransferred": 28,
    "Result": {
        "PrepareDuration": 1250,
        "PrepareStatus": "SUCCESS",
        "TotalDuration": 12827,
        "TransferDuration": 11231,
        "TransferStatus": "SUCCESS",
        "VerifyDuration": 361,
        "VerifyStatus": "SUCCESS"
    },
    "BytesCompressed": 28
}

DataSyncタスクの実行が成功しました。

CloudWatch Logsに出力されたログを確認すると、作成したファイルとボリュームがディレクトリとして転送されていそうです。

[INFO] Request to start task-0744481af7db83491.
[INFO] Started logging in destination hostId: host-0bd570acab753bda3 for Execution exec-0b8b9c0b6b30eebda
[INFO] Started logging in destination hostId: host-0ea7b46eb1d679124 for Execution exec-0b8b9c0b6b30eebda
[INFO] Execution exec-0b8b9c0b6b30eebda started.
[NOTICE] Created directory /vol1/vol3
[NOTICE] Created directory /vol1/.aws-datasync
[NOTICE] Created directory /vol2/folder
[NOTICE] Transferred file /vol1/fsxw-test.txt, 14 bytes
[NOTICE] Transferred file /vol1/test.txt, 14 bytes
[NOTICE] Transferred directory metadata /vol2
[NOTICE] Transferred directory metadata /vol1
[NOTICE] Transferred directory metadata /
[NOTICE] Transferred directory metadata /vol2/folder
[NOTICE] Transferred directory metadata /vol1/.aws-datasync
[NOTICE] Transferred directory metadata /vol1/vol3
[NOTICE] Verified directory /
[NOTICE] Verified file /vol1/fsxw-test.txt, 14 bytes
[NOTICE] Verified file /vol1/test.txt, 14 bytes
[INFO] Execution exec-0b8b9c0b6b30eebda finished with status Success.

ONTAP CLIからCIFSファイル共有が追加されているか確認します。

FsxId083d045e152f6c0a7::> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm1           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           ipc$          /                 browsable  -        -
svm1           share1        /vol1             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share2        /vol2             oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share3        /vol1/vol3        oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm1           share4        /vol2/folder      oplocks             CORP\FSxAdminGroup / Full Control
                                               browsable           Everyone / Read
                                               changenotify
                                               show-previous-versions
svm2           c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm2           ipc$          /                 browsable  -        -
8 entries were displayed.

やはり、CIFSファイル共有は追加されていないですね。

最後にSVM2のCIFSファイル共有c$をマウントして、転送されたファイルやフォルダを確認します。

# XドライブにSVM2のCIFSファイル共有 c$ をマウント
> net use X: \\SVM2.CORP.NON-97.NET\c$
The command completed successfully.

# 現在のドライブ一覧を確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  15.23         14.76 FileSystem    C:\                                            Users\Administrator
Cert                                   Certificate   \
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
X                   0.00          0.95 FileSystem    \\SVM2.CORP.NON-97.NET\c$
Y                                      FileSystem    \\amznfsxmdflnwm0.corp.non-97.ne...
Z                   0.00          0.95 FileSystem    \\SVM1.CORP.NON-97.NET\share1

# Xドライブ配下を確認
> ls X:\


    Directory: X:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        11/11/2022   8:10 PM                .aws-datasync
d----l        11/11/2022   5:01 PM                vol1
d----l        11/11/2022   5:01 PM                vol2

# SVM1の /vol1 に配置していたファイルやフォルダがあることを確認
> ls X:\vol1\


    Directory: X:\vol1


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        11/11/2022   4:50 PM                vol3
d-----        11/11/2022   7:52 PM                .aws-datasync
-a----        11/11/2022   7:39 PM             14 fsxw-test.txt
-a----        11/11/2022   6:08 PM             14 test.txt

# SVM1の /vol2 に配置していたフォルダがあることを確認
> ls X:\vol2\


    Directory: X:\vol2


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        11/11/2022   5:26 PM                folder

ファイルやフォルダは転送されていますね。

共有フォルダの設定を移行したい場合はDataSync実行後にプラスアルファの作業が必要

DataSyncで共有フォルダの設定を転送できるか検証してみました。

結論としては、DataSyncは共有フォルダの設定を転送しません。

そのため、共有フォルダの設定を移行したい場合はDataSync実行後にプラスアルファの作業が必要になります。

イメージとしては、DataSyncでファイルやフォルダ、メタデータを同期後に、Get-SmbShareGet-SmbShareAccessで現行ファイルサーバーの共有設定を取得して、New-SmbShareGrant-SmbShareAccessで移行先に同じ共有設定をしてあげるような形になるかと思います。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!