Amazon FSx for NetApp ONTAPは単純なファイルサーバーじゃないぞ
こんにちは、のんピ(@non____97)です。
皆さんはMulti-AZのEBSボリュームを欲しいなと思ったことはありますか? 私はあります。
EBSボリュームはAZ単位なのでAZ障害のことを考えるとちょっと心配です。かと言って自分でブロックレベルのレプリケーションを実装するのも何だか大変です。
そこで、Amazon FSx for NetApp ONTAPの出番です。
Amazon FSx for NetApp ONTAPはファイルサーバーとしての機能だけではなく、ブロックストレージとしての機能も有しています。
Q: Amazon FSx for NetApp ONTAP はどのプロトコルをサポートしていますか?
A: Amazon FSx for NetApp ONTAP は、ネットワークファイルシステム (NFS) およびサーバーメッセージブロック (SMB) プロトコルのすべてのバージョンで共有ファイルストレージへのアクセスを提供し、また同じデータへのマルチプロトコルアクセス (つまり、NFS と SMB の同時アクセス) もサポートされています。
Amazon FSx for NetApp ONTAP は、iSCSI プロトコルを介した共有ブロックストレージも提供します。
そのため、Amazon FSx for NetApp ONTAP上でiSCSI LUNを作成して、EC2インスタンスにマウントするといったことも出来ちゃいます。
Amazon FSx for NetApp ONTAPはファイルシステムをMulti-AZ構成にすることもできるので、AZ障害にも対応できる高い可用性をもったブロックストレージとして扱えます。これはロマンを感じずにはいられません。
今回は以下AWS公式ドキュメントに従ってiSCSI LUNをAamzon Linux 2とWindows Serverにマウントしてみます。
Amazon Linux 2にiSCSI LUNをマウントしてみた
iSCSI LUN の作成
以下のようなSVMとボリュームを用意しました。
# SVMの確認
$ aws fsx describe-storage-virtual-machines \
--storage-virtual-machine-ids "$svm_id"
{
"StorageVirtualMachines": [
{
"ActiveDirectoryConfiguration": {
"NetBiosName": "SINGLE-AZ-SVM",
"SelfManagedActiveDirectoryConfiguration": {
"DomainName": "fsx-dev.classmethod.jp",
"OrganizationalUnitDistinguishedName": "OU=FSxForNetAppONTAP,DC=fsx-dev,DC=classmethod,DC=jp",
"UserName": "FSxServiceAccount",
"DnsIps": [
"10.0.0.138"
]
}
},
"CreationTime": "2022-05-19T00:42:07.541000+00:00",
"Endpoints": {
"Iscsi": {
"DNSName": "iscsi.svm-0a3a78e7c64ff2c5d.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com",
"IpAddresses": [
"10.0.10.96",
"10.0.10.45"
]
},
"Management": {
"DNSName": "svm-0a3a78e7c64ff2c5d.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com",
"IpAddresses": [
"10.0.10.31"
]
},
"Nfs": {
"DNSName": "svm-0a3a78e7c64ff2c5d.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com",
"IpAddresses": [
"10.0.10.31"
]
},
"Smb": {
"DNSName": "SINGLE-AZ-SVM.fsx-dev.classmethod.jp",
"IpAddresses": [
"10.0.10.31"
]
}
},
"FileSystemId": "fs-0967312eff2f5f5e1",
"Lifecycle": "CREATING",
"Name": "classmethod-dev-fsx-netapp-ontap-single-az-svm",
"ResourceARN": "arn:aws:fsx:ap-northeast-1:<AWSアカウントID>:storage-virtual-machine/fs-0967312eff2f5f5e1/svm-0a3a78e7c64ff2c5d",
"StorageVirtualMachineId": "svm-0a3a78e7c64ff2c5d",
"Subtype": "DEFAULT",
"UUID": "a7e1ed55-d70c-11ec-aeb4-877d41bba405"
}
]
}
# ボリュームの確認
$ aws fsx describe-volumes \
--volume-ids "$volume_id"
{
"Volumes": [
{
"CreationTime": "2022-05-19T00:49:59.169000+00:00",
"FileSystemId": "fs-0967312eff2f5f5e1",
"Lifecycle": "CREATED",
"Name": "classmethod_dev_fsx_netapp_ontap_single_az_volume_lun",
"OntapConfiguration": {
"FlexCacheEndpointType": "NONE",
"JunctionPath": "/lun",
"SecurityStyle": "MIXED",
"SizeInMegabytes": 20480,
"StorageEfficiencyEnabled": true,
"StorageVirtualMachineId": "svm-0a3a78e7c64ff2c5d",
"StorageVirtualMachineRoot": false,
"TieringPolicy": {
"CoolingPeriod": 31,
"Name": "AUTO"
},
"UUID": "a60c3ae5-d70d-11ec-aeb4-877d41bba405",
"OntapVolumeType": "RW"
},
"ResourceARN": "arn:aws:fsx:ap-northeast-1:<AWSアカウントID>:volume/fs-0967312eff2f5f5e1/fsvol-034753ad216df7904",
"VolumeId": "fsvol-034753ad216df7904",
"VolumeType": "ONTAP"
}
]
}
こちらのSVM、ボリューム上にiSCSI LUNを作成します。
SSHAmazon FSx for ONTAPファイルシステムに接続して、NetApp ONTAP CLIを使用します。
$ ssh fsxadmin@management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com
The authenticity of host 'management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com (10.0.10.191)' can't be established.
ECDSA key fingerprint is SHA256:96acrCV00KXDxH2lksbcKNEkfPcCji/uzBzcfQ6CrAY.
ECDSA key fingerprint is MD5:71:09:56:e5:24:c1:44:49:28:0d:f4:e0:c6:f2:92:31.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com,10.0.10.191' (ECDSA) to the list of known hosts.
Password:
This is your first recorded login.
::>
LUNの作成前にLUNの一覧を確認しておきます。
::> lun show
This table is currently empty.
それでは、以下のプロパティを指定してLUNを作成します。
svm_name
: iSCSIターゲットを提供するSVMの名前vol_name
: LUNをホストするボリュームの名前lun_name
: LUNに割り当てる名前size
: LUN のバイト単位のサイズostype
: OSの種類
LUNの作成はlun createコマンドで行います。
::> lun create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001 -size 10240 -ostype linux -space-allocation enabled
Created a LUN of size 10k (10240)
10KBのLUNが作成されました。
もう一度LUNの一覧を確認すると、確かに10KBが作成されていることを確認できます。
::> lun show
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online unmapped linux 10KB
OSのiSCSI設定
LUNの作成が完了したので、続いてAmazon Linux 2でLUNをマウントできるようにiSCSIの設定を行います。
まず、OSが認識しているブロックデバイス一覧を確認しておきます。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
1つだけディスクが確認できました。
次に、iscsi-initiator-utils
とdevice-mapper-multipath
をインストールします。ファイルサーバーがフェイルオーバーしたときに自動で接続先を更新したい場合は、multipath
をインストールする必要があります。
$ sudo yum install device-mapper-multipath iscsi-initiator-utils -y
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 3.7 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package device-mapper-multipath.x86_64 0:0.4.9-127.amzn2 will be installed
--> Processing Dependency: device-mapper-multipath-libs = 0.4.9-127.amzn2 for package: device-mapper-multipath-0.4.9-127.amzn2.x86_64
--> Processing Dependency: libmultipath.so.0()(64bit) for package: device-mapper-multipath-0.4.9-127.amzn2.x86_64
--> Processing Dependency: libmpathpersist.so.0()(64bit) for package: device-mapper-multipath-0.4.9-127.amzn2.x86_64
--> Processing Dependency: libmpathcmd.so.0()(64bit) for package: device-mapper-multipath-0.4.9-127.amzn2.x86_64
---> Package iscsi-initiator-utils.x86_64 0:6.2.0.874-7.amzn2 will be installed
--> Processing Dependency: iscsi-initiator-utils-iscsiuio >= 6.2.0.874-7.amzn2 for package: iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64
--> Running transaction check
---> Package device-mapper-multipath-libs.x86_64 0:0.4.9-127.amzn2 will be installed
---> Package iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-7.amzn2 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================
Installing:
device-mapper-multipath x86_64 0.4.9-127.amzn2 amzn2-core 142 k
iscsi-initiator-utils x86_64 6.2.0.874-7.amzn2 amzn2-core 420 k
Installing for dependencies:
device-mapper-multipath-libs x86_64 0.4.9-127.amzn2 amzn2-core 263 k
iscsi-initiator-utils-iscsiuio x86_64 6.2.0.874-7.amzn2 amzn2-core 90 k
Transaction Summary
============================================================================================================================================================
Install 2 Packages (+2 Dependent packages)
Total download size: 915 k
Installed size: 3.3 M
Downloading packages:
(1/4): device-mapper-multipath-0.4.9-127.amzn2.x86_64.rpm | 142 kB 00:00:00
(2/4): device-mapper-multipath-libs-0.4.9-127.amzn2.x86_64.rpm | 263 kB 00:00:00
(3/4): iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64.rpm | 90 kB 00:00:00
(4/4): iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64.rpm | 420 kB 00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 2.9 MB/s | 915 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64 1/4
Installing : iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64 2/4
Installing : device-mapper-multipath-libs-0.4.9-127.amzn2.x86_64 3/4
Installing : device-mapper-multipath-0.4.9-127.amzn2.x86_64 4/4
Verifying : device-mapper-multipath-libs-0.4.9-127.amzn2.x86_64 1/4
Verifying : iscsi-initiator-utils-iscsiuio-6.2.0.874-7.amzn2.x86_64 2/4
Verifying : device-mapper-multipath-0.4.9-127.amzn2.x86_64 3/4
Verifying : iscsi-initiator-utils-6.2.0.874-7.amzn2.x86_64 4/4
Installed:
device-mapper-multipath.x86_64 0:0.4.9-127.amzn2 iscsi-initiator-utils.x86_64 0:6.2.0.874-7.amzn2
Dependency Installed:
device-mapper-multipath-libs.x86_64 0:0.4.9-127.amzn2 iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-7.amzn2
Complete!
multipath
を使用してファイルサーバー間で自動的にフェイルオーバーする際の再接続を高速化するために、タイムアウトをデフォルト値の120から5に変更します。
# デフォルトの設定ファイルの確認
$ sudo cat /etc/iscsi/iscsid.conf
#
# Open-iSCSI default configuration.
# Could be located at /etc/iscsi/iscsid.conf or ~/.iscsid.conf
#
# Note: To set any of these values for a specific node/session run
# the iscsiadm --mode node --op command for the value. See the README
# and man page for iscsiadm for details on the --op command.
#
######################
# iscsid daemon config
######################
# If you want iscsid to start the first time an iscsi tool
# needs to access it, instead of starting it when the init
# scripts run, set the iscsid startup command here. This
# should normally only need to be done by distro package
# maintainers.
#
# Default for Fedora and RHEL. (uncomment to activate).
# Use socket activation, but try to make sure the socket units are listening
iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket
#
# Default for upstream open-iscsi scripts (uncomment to activate).
# iscsid.startup = /sbin/iscsid
# Check for active mounts on devices reachable through a session
# and refuse to logout if there are any. Defaults to "No".
# iscsid.safe_logout = Yes
#############################
# NIC/HBA and driver settings
#############################
# open-iscsi can create a session and bind it to a NIC/HBA.
# To set this up see the example iface config file.
#*****************
# Startup settings
#*****************
# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is automatic.
node.startup = automatic
# For "automatic" startup nodes, setting this to "Yes" will try logins on each
# available iface until one succeeds, and then stop. The default "No" will try
# logins on all available ifaces simultaneously.
node.leading_login = No
# *************
# CHAP Settings
# *************
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
#node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = username
#node.session.auth.password = password
# To set a CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#node.session.auth.username_in = username_in
#node.session.auth.password_in = password_in
# To enable CHAP authentication for a discovery session to the target
# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
#discovery.sendtargets.auth.authmethod = CHAP
# To set a discovery session CHAP username and password for the initiator
# authentication by the target(s), uncomment the following lines:
#discovery.sendtargets.auth.username = username
#discovery.sendtargets.auth.password = password
# To set a discovery session CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#discovery.sendtargets.auth.username_in = username_in
#discovery.sendtargets.auth.password_in = password_in
# ********
# Timeouts
# ********
#
# See the iSCSI README's Advanced Configuration section for tips
# on setting timeouts when using multipath or doing root over iSCSI.
#
# To specify the length of time to wait for session re-establishment
# before failing SCSI commands back to the application when running
# the Linux SCSI Layer error handler, edit the line.
# The value is in seconds and the default is 120 seconds.
# Special values:
# - If the value is 0, IO will be failed immediately.
# - If the value is less than 0, IO will remain queued until the session
# is logged back in, or until the user runs the logout command.
node.session.timeo.replacement_timeout = 120
# To specify the time to wait for login to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.login_timeout = 15
# To specify the time to wait for logout to complete, edit the line.
# The value is in seconds and the default is 15 seconds.
node.conn[0].timeo.logout_timeout = 15
# Time interval to wait for on connection before sending a ping.
node.conn[0].timeo.noop_out_interval = 5
# To specify the time to wait for a Nop-out response before failing
# the connection, edit this line. Failing the connection will
# cause IO to be failed back to the SCSI layer. If using dm-multipath
# this will cause the IO to be failed to the multipath layer.
node.conn[0].timeo.noop_out_timeout = 5
# To specify the time to wait for abort response before
# failing the operation and trying a logical unit reset edit the line.
# The value is in seconds and the default is 15 seconds.
node.session.err_timeo.abort_timeout = 15
# To specify the time to wait for a logical unit response
# before failing the operation and trying session re-establishment
# edit the line.
# The value is in seconds and the default is 30 seconds.
node.session.err_timeo.lu_reset_timeout = 30
# To specify the time to wait for a target response
# before failing the operation and trying session re-establishment
# edit the line.
# The value is in seconds and the default is 30 seconds.
node.session.err_timeo.tgt_reset_timeout = 30
#******
# Retry
#******
# To specify the number of times iscsid should retry a login
# if the login attempt fails due to the node.conn[0].timeo.login_timeout
# expiring modify the following line. Note that if the login fails
# quickly (before node.conn[0].timeo.login_timeout fires) because the network
# layer or the target returns an error, iscsid may retry the login more than
# node.session.initial_login_retry_max times.
#
# This retry count along with node.conn[0].timeo.login_timeout
# determines the maximum amount of time iscsid will try to
# establish the initial login. node.session.initial_login_retry_max is
# multiplied by the node.conn[0].timeo.login_timeout to determine the
# maximum amount.
#
# The default node.session.initial_login_retry_max is 8 and
# node.conn[0].timeo.login_timeout is 15 so we have:
#
# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max =
# 120 seconds
#
# Valid values are any integer value. This only
# affects the initial login. Setting it to a high value can slow
# down the iscsi service startup. Setting it to a low value can
# cause a session to not get logged into, if there are distuptions
# during startup or if the network is not ready at that time.
node.session.initial_login_retry_max = 8
################################
# session and device queue depth
################################
# To control how many commands the session will queue set
# node.session.cmds_max to an integer between 2 and 2048 that is also
# a power of 2. The default is 128.
node.session.cmds_max = 128
# To control the device's queue depth set node.session.queue_depth
# to a value between 1 and 1024. The default is 32.
node.session.queue_depth = 32
##################################
# MISC SYSTEM PERFORMANCE SETTINGS
##################################
# For software iscsi (iscsi_tcp) and iser (ib_iser) each session
# has a thread used to transmit or queue data to the hardware. For
# cxgb3i you will get a thread per host.
#
# Setting the thread's priority to a lower value can lead to higher throughput
# and lower latencies. The lowest value is -20. Setting the priority to
# a higher value, can lead to reduced IO performance, but if you are seeing
# the iscsi or scsi threads dominate the use of the CPU then you may want
# to set this value higher.
#
# Note: For cxgb3i you must set all sessions to the same value, or the
# behavior is not defined.
#
# The default value is -20. The setting must be between -20 and 20.
node.session.xmit_thread_priority = -20
#***************
# iSCSI settings
#***************
# To enable R2T flow control (i.e., the initiator must wait for an R2T
# command before sending any data), uncomment the following line:
#
#node.session.iscsi.InitialR2T = Yes
#
# To disable R2T flow control (i.e., the initiator has an implied
# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
#
# The defaults is No.
node.session.iscsi.InitialR2T = No
#
# To disable immediate data (i.e., the initiator does not send
# unsolicited data with the iSCSI command PDU), uncomment the following line:
#
#node.session.iscsi.ImmediateData = No
#
# To enable immediate data (i.e., the initiator sends unsolicited data
# with the iSCSI command packet), uncomment the following line:
#
# The default is Yes
node.session.iscsi.ImmediateData = Yes
# To specify the maximum number of unsolicited data bytes the initiator
# can send in an iSCSI PDU to a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.session.iscsi.FirstBurstLength = 262144
# To specify the maximum SCSI payload that the initiator will negotiate
# with the target for, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the defauls it 16776192
node.session.iscsi.MaxBurstLength = 16776192
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 262144
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
# To specify the maximum number of data bytes the initiator will send
# in an iSCSI PDU to the target, edit the following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1).
# Zero is a special case. If set to zero, the initiator will use
# the target's MaxRecvDataSegmentLength for the MaxXmitDataSegmentLength.
# The default is 0.
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
# To specify the maximum number of data bytes the initiator can receive
# in an iSCSI PDU from a target during a discovery session, edit the
# following line.
#
# The value is the number of bytes in the range of 512 to (2^24-1) and
# the default is 32768
#
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of enabling the checking, uncomment
# the following lines (Data digests are not supported.):
#node.conn[0].iscsi.HeaderDigest = CRC32C,None
#
# To allow the targets to control the setting of the digest checking,
# with the initiator requesting a preference of disabling the checking,
# uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None,CRC32C
#
# To enable CRC32C digest checking for the header and/or data part of
# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = CRC32C
#
# To disable digest checking for the header and/or data part of
# iSCSI PDUs, uncomment the following line:
#node.conn[0].iscsi.HeaderDigest = None
#
# The default is to never use DataDigests or HeaderDigests.
#
node.conn[0].iscsi.HeaderDigest = None
# For multipath configurations, you may want more than one session to be
# created on each iface record. If node.session.nr_sessions is greater
# than 1, performing a 'login' for that node will ensure that the
# appropriate number of sessions is created.
node.session.nr_sessions = 1
#************
# Workarounds
#************
# Some targets like IET prefer after an initiator has sent a task
# management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it does not respond to PDUs like R2Ts. To enable this behavior uncomment
# the following line (The default behavior is Yes):
node.session.iscsi.FastAbort = Yes
# Some targets like Equalogic prefer that after an initiator has sent
# a task management function like an ABORT TASK or LOGICAL UNIT RESET, that
# it continue to respond to R2Ts. To enable this uncomment this line
# node.session.iscsi.FastAbort = No
# To prevent doing automatic scans that would add unwanted luns to the system
# we can disable them and have sessions only do manually requested scans.
# Automatic scans are performed on startup, on login, and on AEN/AER reception
# on devices supporting it. For HW drivers all sessions will use the value
# defined in the configuration file. This configuration option is independent
# of scsi_mod scan parameter. (The default behavior is auto):
node.session.scan = auto
# タイムアウト値を5に変更
$ sudo sed -i 's/node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 5/' /etc/iscsi/iscsid.conf
# 変更した結果を確認
$ sudo cat /etc/iscsi/iscsid.conf \
| grep node.session.timeo.replacement_timeout
node.session.timeo.replacement_timeout = 5
iSCSIサービスを起動します。
# iSCSIサービスの起動
$ sudo systemctl start iscsid
# iSCSIサービスの起動確認
$ sudo systemctl status iscsid.service
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2022-05-19 01:10:49 UTC; 9s ago
Docs: man:iscsid(8)
man:iscsiadm(8)
Process: 1470 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 1472 (iscsid)
CGroup: /system.slice/iscsid.service
├─1471 /usr/sbin/iscsid
└─1472 /usr/sbin/iscsid
May 19 01:10:49 ip-10-0-0-93.ap-northeast-1.compute.internal systemd[1]: Starting Open-iSCSI...
May 19 01:10:49 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[1470]: iSCSI logger with pid=1471 started!
May 19 01:10:49 ip-10-0-0-93.ap-northeast-1.compute.internal systemd[1]: Failed to parse PID from file /var/run/iscsid.pid: Invalid argument
May 19 01:10:49 ip-10-0-0-93.ap-northeast-1.compute.internal systemd[1]: Started Open-iSCSI.
May 19 01:10:50 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[1471]: iSCSI daemon with pid=1472 started!
次に、クライアントがファイルサーバー間で自動でフェイルオーバーできるようにするために、マルチパスの設定をします。
$ sudo mpathconf --enable --with_multipathd y
最後に、このEC2インスタンスのイニシエーター名を確認します。
$ sudo cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:2f3cecbb7216
iSCSIターゲットの設定
続いて、Amazon FSx for ONTAPファイルシステムでiSCSIターゲットの設定を行います。
SSHでAmazon FSx for ONTAPファイルシステムに接続して、NetApp ONTAP CLIを使用します。
$ ssh fsxadmin@management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com
Password:
Last login time: 5/19/2022 00:57:46
イニシエーターグループ(igroup
)を作成します。イニシエーターグループはiSCSI LUNにマッピングし、どのイニシエーターがLUN にアクセスできるかをコントロールするものです。事前に確認したEC2インスタンスのイニシエーター名はここで使用します。
::> lun igroup create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -igroup igroup_001 -initiator iqn.1994-05.com.redhat:2f3cecbb7216 -protocol iscsi -ostype linux
イニシエーターグループを確認すると、1つイニシエーターグループが作成されていることを確認できました。
::> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux iqn.1994-05.com.redhat:2f3cecbb7216
次に、LUNとイニシエーターグループとのマッピングを作成します。
::> lun mapping create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001 -igroup igroup_001 -lun-id 001
LUNを確認するとマッピングされていることが分かります。
::> lun show -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001 -fields state,mapped,serial-hex
vserver path serial-hex state mapped
---------------------------------------------- ------------------------------------------------------------------ ------------------------ ------ ------
classmethod-dev-fsx-netapp-ontap-single-az-svm /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001 6c574231752b53784865462f online mapped
::> lun show -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online mapped linux 10KB
最後に、SVMのiscsi_1
およびiscsi_2
のIPアドレスを確認しておきます。
::> network interface show -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm
Logical Status Network Current Current Is
Vserver Interface Admin/Oper Address/Mask Node Port Home
----------- ---------- ---------- ------------------ ------------- ------- ----
classmethod-dev-fsx-netapp-ontap-single-az-svm
iscsi_1 up/up 10.0.10.96/24 -01
e0e true
iscsi_2 up/up 10.0.10.45/24 -02
e0e true
nfs_smb_management_1
up/up 10.0.10.31/24 -01
e0e true
3 entries were displayed.
Amazon Linux 2にiSCSI LUNをマウント
それでは、Amazon Linux 2にiSCSI LUNをマウントしていきます。
まず、事前に確認したIPアドレスを使って、ターゲットiSCSIノードを検出します。
$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal 10.0.10.96
10.0.10.96:3260,1029 iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
10.0.10.45:3260,1030 iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
次に、各AZのONTAPノードごとにイニシエータあたり4つのセッションを確立し、EC2インスタンスが帯域幅制限の5Gb/sを超えて最大20Gb/sでiSCSI LUN接続できるようにします。
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3 --op update -n node.session.nr_sessions -v 4
ターゲットiSCSIノードにログインします。作成したiSCSI LUNが使用可能なディスクとして認識されます。
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3 --login
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
現在のマルチパス設定を確認すると、確かに2ノード × 4セッション存在していることを確認できます。
$ sudo multipath -ll
3600a09806c574231752b53784865462f dm-0 NETAPP ,LUN C-Mode
size=10K features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 3:0:0:1 sdd 8:48 active ready running
| |- 0:0:0:1 sdb 8:16 active ready running
| |- 2:0:0:1 sdc 8:32 active ready running
| `- 1:0:0:1 sda 8:0 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 5:0:0:1 sde 8:64 active ready running
|- 4:0:0:1 sdf 8:80 active ready running
|- 6:0:0:1 sdg 8:96 active ready running
`- 7:0:0:1 sdh 8:112 active ready running
lsblk
でもブロックデバイスとして認識されていることが分かります。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdb 8:16 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdc 8:32 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdd 8:48 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sde 8:64 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdf 8:80 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdg 8:96 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdh 8:112 0 10K 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
次の手順はディスクのパーティション分割ですが、10KBのディスクを分割しても何だかテンションが上がりません。
そのため、10KBのLUNを10GBに拡張します。
NetApp ONTAP CLIを使用して、まず現在のLUNの一覧を確認しておきます。
::> lun show
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online mapped linux 10KB
10KBですね。lun resizeで10GBに変更します。
::> lun resize -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001 -size 10G
LUNの一覧を表示すると、10GBに変更されたことを確認できます。
::> lun show
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online mapped linux 10GB
# NetApp ONTAP CLIの終了
::> exit
Goodbye
Connection to management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com closed.
LUNのサイズ変更が完了したので、OSからどのように認識されているかを確認します。
現在のマルチパス一覧とブロックデバイス一覧を確認すると、各ディスクは10GBと認識されていますが、各マルチパスデバイスは10KBのままです。
$ sudo multipath -ll
3600a09806c574231752b53784865462f dm-0 NETAPP ,LUN C-Mode
size=10K features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 3:0:0:1 sdd 8:48 active ready running
| |- 0:0:0:1 sdb 8:16 active ready running
| |- 2:0:0:1 sdc 8:32 active ready running
| `- 1:0:0:1 sda 8:0 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 5:0:0:1 sde 8:64 active ready running
|- 4:0:0:1 sdf 8:80 active ready running
|- 6:0:0:1 sdg 8:96 active ready running
`- 7:0:0:1 sdh 8:112 active ready running
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdb 8:16 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdc 8:32 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdd 8:48 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sde 8:64 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdf 8:80 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdg 8:96 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
sdh 8:112 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10K 0 mpath
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
マルチパスサービスを再起動すると、マルチパスデバイスも10GBと認識されました。
$ sudo systemctl restart multipathd.service
$ sudo multipath -ll
3600a09806c574231752b53784865462f dm-0 NETAPP ,LUN C-Mode
size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 0:0:0:1 sdb 8:16 active ready running
| |- 1:0:0:1 sda 8:0 active ready running
| |- 2:0:0:1 sdc 8:32 active ready running
| `- 3:0:0:1 sdd 8:48 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 4:0:0:1 sdf 8:80 active ready running
|- 5:0:0:1 sde 8:64 active ready running
|- 6:0:0:1 sdg 8:96 active ready running
`- 7:0:0:1 sdh 8:112 active ready running
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdb 8:16 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdc 8:32 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdd 8:48 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sde 8:64 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdf 8:80 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdg 8:96 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
sdh 8:112 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
下準備ができたので、パーティション分割します。
パーティション分割の前にディスクが認識されていることを改めて確認します。
$ ls -l /dev/mapper/3600a09806c574231752b53784865462f
lrwxrwxrwx 1 root root 7 May 19 01:58 /dev/mapper/3600a09806c574231752b53784865462f -> ../dm-0
-rwxr-xr-x 1 root root 109288 Jan 23 2020 ls
3600a09806c574231752b53784865462f
というディスクについてパーティション分割します。パーティションは2GBと3GBの2つ作成します。
$ sudo fdisk /dev/mapper/3600a09806c574231752b53784865462f
Welcome to fdisk (util-linux 2.30.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x5060b99a.
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): F
Unpartitioned space /dev/mapper/3600a09806c574231752b53784865462f: 8 GiB, 8588886016 bytes, 16775168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
Start End Sectors Size
4196352 20971519 16775168 8G
Command (m for help): p
Disk /dev/mapper/3600a09806c574231752b53784865462f: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/mapper/3600a09806c574231752b53784865462f-part1 2048 4196351 4194304 2G 83 Linux
Command (m for help): i
Selected partition 1
Device: /dev/mapper/3600a09806c574231752b53784865462f-part1
Start: 2048
End: 4196351
Sectors: 4194304
Cylinders: 2049
Size: 2G
Id: 83
Type: Linux
Start-C/H/S: 1/0/1
End-C/H/S: 0/63/32
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (4196352-20971519, default 4196352): 4196352
Last sector, +sectors or +size{K,M,G,T,P} (4196352-20971519, default 20971519): +3G
Created a new partition 2 of type 'Linux' and of size 3 GiB.
Command (m for help): F
Unpartitioned space /dev/mapper/3600a09806c574231752b53784865462f: 5 GiB, 5367660544 bytes, 10483712 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
Start End Sectors Size
10487808 20971519 10483712 5G
Command (m for help): p
Disk /dev/mapper/3600a09806c574231752b53784865462f: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/mapper/3600a09806c574231752b53784865462f-part1 2048 4196351 4194304 2G 83 Linux
/dev/mapper/3600a09806c574231752b53784865462f-part2 4196352 10487807 6291456 3G 83 Linux
Command (m for help): i
Partition number (1,2, default 2): 2
Device: /dev/mapper/3600a09806c574231752b53784865462f-part2
Start: 4196352
End: 10487807
Sectors: 6291456
Cylinders: 3073
Size: 3G
Id: 83
Type: Linux
Start-C/H/S: 1/0/1
End-C/H/S: 0/63/32
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
OSの再起動をしなければ反映されないと言われてしまったので、OSを再起動します。
$ sudo systemctl reboot
Terminated
OS再起動後、ディスクを確認するとパーティション分割されていることが分かります。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdb 8:16 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdc 8:32 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdd 8:48 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sde 8:64 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdf 8:80 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdg 8:96 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdh 8:112 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
$ sudo fdisk -l
Disk /dev/nvme0n1: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 30B4269A-8501-4012-B8AE-5DBF6CBBACA8
Device Start End Sectors Size Type
/dev/nvme0n1p1 4096 16777182 16773087 8G Linux filesystem
/dev/nvme0n1p128 2048 4095 2048 1M BIOS boot
Partition table entries are not in disk order.
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
/dev/sdb2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 4196351 4194304 2G 83 Linux
/dev/sda2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 4196351 4194304 2G 83 Linux
/dev/sdd2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 4196351 4194304 2G 83 Linux
/dev/sdc2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sdf: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdf1 2048 4196351 4194304 2G 83 Linux
/dev/sdf2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sde: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sde1 2048 4196351 4194304 2G 83 Linux
/dev/sde2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sdh: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdh1 2048 4196351 4194304 2G 83 Linux
/dev/sdh2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/sdg: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/sdg1 2048 4196351 4194304 2G 83 Linux
/dev/sdg2 4196352 10487807 6291456 3G 83 Linux
Disk /dev/mapper/3600a09806c574231752b53784865462f: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 65536 bytes
Disklabel type: dos
Disk identifier: 0x5060b99a
Device Boot Start End Sectors Size Id Type
/dev/mapper/3600a09806c574231752b53784865462f-part1 2048 4196351 4194304 2G 83 Linux
/dev/mapper/3600a09806c574231752b53784865462f-part2 4196352 10487807 6291456 3G 83 Linux
各パーティションをext4にフォーマットします。
$ sudo mkfs.ext4 /dev/mapper/3600a09806c574231752b53784865462f1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=16 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mkfs.ext4 /dev/mapper/3600a09806c574231752b53784865462f2
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=16 blocks
196608 inodes, 786432 blocks
39321 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
それでは、いよいよマウントです。
# マウントポイントの作成
$ sudo mkdir -p /lun/part1
$ sudo mkdir /lun/part2
# マウントポイントの確認
$ ls -l /lun
total 0
drwxr-xr-x 2 root root 6 May 19 02:21 part1
drwxr-xr-x 2 root root 6 May 19 02:21 part2
# マウント
$ sudo mount -t ext4 /dev/mapper/3600a09806c574231752b53784865462f1 /lun/part1
$ sudo mount -t ext4 /dev/mapper/3600a09806c574231752b53784865462f2 /lun/part2
# ディスクの空き容量の確認
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 462M 0 462M 0% /dev
tmpfs 470M 0 470M 0% /dev/shm
tmpfs 470M 404K 470M 1% /run
tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.6G 6.5G 20% /
/dev/mapper/3600a09806c574231752b53784865462f1 2.0G 6.0M 1.8G 1% /lun/part1
/dev/mapper/3600a09806c574231752b53784865462f2 2.9G 9.0M 2.8G 1% /lun/part2
各パーティションをマウントできました。
最後に書き込みできるかを確認します。
# ディレクトリの所有者の変更
$ sudo chown ssm-user:ssm-user /lun/part1
$ sudo chown ssm-user:ssm-user /lun/part2
# ディレクトリの所有者確認
$ ls -l /lun
total 8
drwxr-xr-x 3 ssm-user ssm-user 4096 May 19 02:36 part1
drwxr-xr-x 3 ssm-user ssm-user 4096 May 19 02:35 part2
# 書き込み
$ echo 'Hello world!' > /lun/part1/HelloWorld.txt
$ echo 'Hello world!' > /lun/part2/HelloWorld.txt
# 書き込んだ内容を確認
$ cat /lun/part1/HelloWorld.txt
Hello world!
$ cat /lun/part2/HelloWorld.txt
Hello world!
書き込みできました。やったね。
Windows ServerにiSCSI LUNをマウントしてみた
iSCSIイニシエーターサービスの起動
Amazon Linux 2での検証が完了したので、次にWindows ServerにiSCSI LUNをマウントしてみます。
まず、Windows ServerでiSCSIイニシエーターサービスの起動をします。
# iSCSIイニシエーターサービスの状態確認
> Get-Service MSiSCSI
Status Name DisplayName
------ ---- -----------
Stopped MSiSCSI Microsoft iSCSI Initiator Service
# iSCSIイニシエーターサービスの起動
> Start-Service MSiSCSI
# iSCSIイニシエーターサービスの状態確認
> Get-Service MSiSCSI
Status Name DisplayName
------ ---- -----------
Running MSiSCSI Microsoft iSCSI Initiator Service
# iSCSIイニシエーターサービスの自動起動を有効化
> Set-Service -Name msiscsi -StartupType Automatic
このEC2インスタンスのイニシエーター名を取得します。
> (Get-InitiatorPort).NodeAddress
iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
クライアントがファイルサーバー間で自動でフェイルオーバーできるようにMultipath-IOをインストールします。
> Install-WindowsFeature Multipath-IO
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True Yes SuccessRest... {マルチパス I/O}
警告: インストール処理を完了するには、このサーバーを再起動する必要があります。
インストール後に再起動を促されるので、OSを再起動します。
iSCSI LUNの作成
次にLUNの作成を行います。
NetApp ONTAP CLIを使用して現在のLUNの一覧を確認しておきます。
::> lun show
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online mapped linux 10GB
Amazon Linux 2での検証で使ったLUNがありますね。
こちらのLUNはTypeがLinuxなので、Windows Server用に新しくLUNを作成します。
LUNを作成するにあたって、現在ボリュームで割り当てられる上限一杯のサイズで作成します。LUNに設定可能な最大サイズを確認します。
::> lun maxsize
Without With SS Complete
Vserver Volume Qtree OS Type SS Reserve Reserve SS Reserve
---------- ------------ ------------ -------- ---------- --------- ----------
classmethod-dev-fsx-netapp-ontap-single-az-svm
classmethod_dev_fsx_netapp_ontap_single_az_volume_lun
"" aix 9.05GB 9.05GB 4.52GB
hpux 9.05GB 9.05GB 4.52GB
hyper_v 9.05GB 9.05GB 4.52GB
linux 9.05GB 9.05GB 4.52GB
netware 9.05GB 9.05GB 4.52GB
openvms 9.05GB 9.05GB 4.52GB
solaris 9.05GB 9.05GB 4.52GB
solaris_efi 9.05GB 9.05GB 4.52GB
vmware 9.05GB 9.05GB 4.52GB
windows 9.05GB 9.05GB 4.52GB
windows_2008 9.05GB 9.05GB 4.52GB
windows_gpt 9.05GB 9.05GB 4.52GB
xen 9.05GB 9.05GB 4.52GB
13 entries were displayed.
9.05GBが最大ということが分かったので、9.05GBのLUNを作成します。
# LUNの作成
::> lun create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_002 -size 9.05G -ostype windows -space-allocation enabled
Created a LUN of size 9g (9717363507)
# LUNの一覧表示
::> lun show
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_001
online mapped linux 10GB
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_002
online unmapped windows 9.05GB
2 entries were displayed.
# LUNに設定可能な最大サイズの確認
::> lun maxsize
Without With SS Complete
Vserver Volume Qtree OS Type SS Reserve Reserve SS Reserve
---------- ------------ ------------ -------- ---------- --------- ----------
classmethod-dev-fsx-netapp-ontap-single-az-svm
classmethod_dev_fsx_netapp_ontap_single_az_volume_lun
"" aix 11.21MB 11.21MB 5.59MB
hpux 11.21MB 11.21MB 5.59MB
hyper_v 11.21MB 11.21MB 5.59MB
linux 11.21MB 11.21MB 5.59MB
netware 11.21MB 11.21MB 5.59MB
openvms 11.21MB 11.21MB 5.59MB
solaris 11.21MB 11.21MB 5.59MB
solaris_efi 11.21MB 11.21MB 5.59MB
vmware 11.21MB 11.21MB 5.59MB
windows 11.21MB 11.21MB 5.59MB
windows_2008
11.21MB 11.21MB 5.59MB
windows_gpt 11.21MB 11.21MB 5.59MB
xen 11.21MB 11.21MB 5.59MB
13 entries were displayed.
# ボリュームサイズの確認
::> volume show-space
Vserver : classmethod-dev-fsx-netapp-ontap-single-az-svm
Volume : classmethod_dev_fsx_netapp_ontap_single_az_svm_root
Feature Used Used%
-------------------------------- ---------- ------
User Data 40KB 0%
Filesystem Metadata 344KB 0%
Inodes 20KB 0%
Snapshot Reserve 51.20MB 5%
Performance Metadata 340KB 0%
Total Used 51.93MB 5%
Total Physical Used 1.55MB 0%
Vserver : classmethod-dev-fsx-netapp-ontap-single-az-svm
Volume : classmethod_dev_fsx_netapp_ontap_single_az_volume_lun
Feature Used Used%
-------------------------------- ---------- ------
User Data 18.99GB 95%
Filesystem Metadata 460KB 0%
Inodes 20KB 0%
Snapshot Reserve 1GB 5%
Deduplication 76KB 0%
Performance Metadata 260KB 0%
Total Used 19.99GB 100%
Total Physical Used 20.85MB 0%
2 entries were displayed.
LUNの作成ができたのでイニシエーターグループとマッピングをします。
# イニシエターグループの作成
::> lun igroup create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -igroup igroup_002 -initiator iqn.1991-05.com.microsoft:ec2amaz-69ctq9g -protocol iscsi -ostype windows
# イニシエーターグループの一覧表示
::> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux iqn.1994-05.com.redhat:2f3cecbb7216
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_002 iscsi windows iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
2 entries were displayed.
# LUNをイニシエーターグループとマッピング
::> lun mapping create -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_002 -igroup igroup_002 -lun-id 002
# イニシエーターグループの一覧表示
::> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux iqn.1994-05.com.redhat:2f3cecbb7216
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_002 iscsi windows iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
2 entries were displayed.
# 作成したLUNのマッピングを確認
::> lun show -path /vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_002
Vserver Path State Mapped Type Size
--------- ------------------------------- ------- -------- -------- --------
classmethod-dev-fsx-netapp-ontap-single-az-svm
/vol/classmethod_dev_fsx_netapp_ontap_single_az_volume_lun/lun_002
online mapped windows 9.05GB
Windows ServerににiSCSI LUNをマウント
OS再起動後、以下の処理を行うための.ps1
ファイルを作成します。
- 各ファイルシステムのiSCSIインターフェイスへの接続
- iSCSI用のMultipath-IOの追加および設定
- iSCSI接続ごとに4セッションを確立
テンプレートの.ps1
ファイルは以下AWS公式ドキュメントに記載があります。
実際のファイル、コマンドは以下の通りです。
# ヒアドキュメントで処理内容を記述
> $establish_iscsi = @'
#iSCSI IP addresses for Preferred and Standby subnets
$TargetPortalAddresses = @("10.0.10.96","10.0.10.45")
#iSCSI Initator IP Address (Local node IP address)
$LocaliSCSIAddress = "10.0.0.49"
#Connect to FSx for NetApp ONTAP file system
Foreach ($TargetPortalAddress in $TargetPortalAddresses) {
New-IscsiTargetPortal -TargetPortalAddress $TargetPortalAddress
-TargetPortalPortNumber 3260 -InitiatorPortalAddress $LocaliSCSIAddress
}
#Add MPIO support for iSCSI
New-MSDSMSupportedHW -VendorId MSFT2005 -ProductId iSCSIBusType_0x9
#Establish iSCSI connection
1..4 | %{Foreach($TargetPortalAddress in $TargetPortalAddresses){
Get-IscsiTarget `
| Connect-IscsiTarget `
-IsMultipathEnabled $true `
-TargetPortalAddress $TargetPortalAddress `
-InitiatorPortalAddress $LocaliSCSIAddress `
-IsPersistent $true}
}
#Set the MPIO Policy to Round Robin
Set-MSDSMGlobalDefaultLoadBalancePolicy -Policy RR
'@
# ヒアドキュメントの内容をファイルに書き込み
> Write-Output $establish_iscsi `
| Out-File "establish_iscsi.ps1"
.ps1
ファイル作成後に、作成したファイルを実行します。
> .\establish_iscsi.ps1
InitiatorInstanceName :
InitiatorPortalAddress :
IsDataDigest : False
IsHeaderDigest : False
TargetPortalAddress : 10.0.10.96
TargetPortalPortNumber : 3260
PSComputerName :
-TargetPortalPortNumber : 用語 '-TargetPortalPortNumber' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま
せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 C:\Windows\system32\establish_iscsi.ps1:10 文字:3
+ -TargetPortalPortNumber 3260 -InitiatorPortalAddress $LocaliSCSIAdd ...
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (-TargetPortalPortNumber:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
InitiatorInstanceName :
InitiatorPortalAddress :
IsDataDigest : False
IsHeaderDigest : False
TargetPortalAddress : 10.0.10.45
TargetPortalPortNumber : 3260
PSComputerName :
-TargetPortalPortNumber : 用語 '-TargetPortalPortNumber' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま
せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 C:\Windows\system32\establish_iscsi.ps1:10 文字:3
+ -TargetPortalPortNumber 3260 -InitiatorPortalAddress $LocaliSCSIAdd ...
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (-TargetPortalPortNumber:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
ProductId : iSCSIBusType_0x9
VendorId : MSFT2005
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 400001370030
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000021
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1100
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 400001370032
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000022
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1100
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 400001370034
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000023
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1200
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 400001370036
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000024
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1200
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 400001370038
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000025
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1300
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 40000137003a
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000026
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1300
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 40000137003c
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000027
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1400
PSComputerName :
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
InitiatorPortalAddress : 10.0.0.49
InitiatorSideIdentifier : 40000137003e
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffd185619ff010-4000013700000028
TargetNodeAddress : iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
TargetSideIdentifier : 1400
PSComputerName :
PowerShell実行後、RDP接続をしてディスクの管理を確認すると、オフラインのディスクを確認できました。
こちらをマウントします。
まず、オフラインのディスク上で右クリックし、オンライン
をクリックします。
すると、オフライン
から初期化されていません
というメッセージに変わりました。こちらのディスクを初期化してあげます。
パーティションタイプはGPTを選択してOK
をクリックします。
オンライン
と表示されるようになりました。最後にこのディスクにボリュームを作成し、Dドライブに割り当てます。未割り当てとなっている箇所で右クリックをし、新しいシンプルボリューム
をクリックします。
新しいシンプルボリュームウィザードが開始されます。次へ
をクリックします。
ボリュームのサイズはデフォルトのままで次へ
をクリックします。
ドライブレターはもデフォルトのD
のままで次へ
をクリックします。
パーティションのフォーマットもデフォルトの設定のままで次へ
をクリックします。
新しいシンプルボリュームウィザードが完了しました。次へ
をクリックします。
すると、未割り当てだったボリュームがDドライブとして割り当てられました。
エクスプローラーからもDドライブを確認できました。
Dドライブ内に適当なフォルダを作成することもできました。めでたしめでたし。
おまけ. OS起動時にiSCSI LUNを自動でマウントしたい場合
おまけです。
OS起動時にiSCSI LUNを自動でマウントしたいですよね?
Windows Serverの場合、OSを再起動してもLUNを指定したドライブとしてマウントしてくれます。
Amazon Linux 2の場合はOSを再起動しても自動で再マウントしてくれません。
$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=472592k,nr_inodes=118148,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
/dev/nvme0n1p1 on / type xfs (rw,noatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=31,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13464)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 462M 0 462M 0% /dev
tmpfs 470M 0 470M 0% /dev/shm
tmpfs 470M 400K 470M 1% /run
tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.6G 6.5G 20% /
iscsid
とmultipathd
は自動起動しており、ディスクとマルチパスデバイスは認識されているようです。
$ sudo systemctl status iscsid -l
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2022-05-20 00:12:29 UTC; 4min 40s ago
Docs: man:iscsid(8)
man:iscsiadm(8)
Process: 2123 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 2125 (iscsid)
CGroup: /system.slice/iscsid.service
├─2124 /usr/sbin/iscsid
└─2125 /usr/sbin/iscsid
May 20 00:12:29 ip-10-0-0-93.ap-northeast-1.compute.internal systemd[1]: Failed to parse PID from file /var/run/iscsid.pid: Invalid argument
May 20 00:12:29 ip-10-0-0-93.ap-northeast-1.compute.internal systemd[1]: Started Open-iSCSI.
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection1:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection2:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection3:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection4:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection5:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection6:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection7:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal iscsid[2124]: Connection8:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] through [iface: default] is operational now
$ sudo systemctl status multipathd -l
● multipathd.service - Device-Mapper Multipath Device Controller
Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-05-20 00:12:28 UTC; 5min ago
Process: 1593 ExecStart=/sbin/multipathd (code=exited, status=0/SUCCESS)
Process: 1579 ExecStartPre=/sbin/multipath -A (code=exited, status=0/SUCCESS)
Process: 1571 ExecStartPre=/sbin/modprobe dm-multipath (code=exited, status=0/SUCCESS)
Main PID: 1599 (multipathd)
CGroup: /system.slice/multipathd.service
└─1599 /sbin/multipathd
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdb: add path (uevent)
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdb [8:16]: delaying path addition until 3600a09806c574231752b53784865462f is fully initialized
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: 3600a09806c574231752b53784865462f: performing delayed actions
May 20 00:12:30 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: 3600a09806c574231752b53784865462f: load table [0 20971520 multipath 4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handler 0 2 1 service-time 0 4 1 8:48 1 8:32 1 8:0 1 8:16 1 service-time 0 2 1 8:80 1 8:64 1]
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdg: add path (uevent)
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: 3600a09806c574231752b53784865462f: load table [0 20971520 multipath 4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handler 0 2 1 service-time 0 4 1 8:48 1 8:32 1 8:0 1 8:16 1 service-time 0 3 1 8:80 1 8:64 1 8:96 1]
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdg [8:96]: path added to devmap 3600a09806c574231752b53784865462f
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdh: add path (uevent)
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: 3600a09806c574231752b53784865462f: load table [0 20971520 multipath 4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handler 0 2 1 service-time 0 4 1 8:48 1 8:32 1 8:0 1 8:16 1 service-time 0 4 1 8:80 1 8:64 1 8:96 1 8:112 1]
May 20 00:12:31 ip-10-0-0-93.ap-northeast-1.compute.internal multipathd[1599]: sdh [8:112]: path added to devmap 3600a09806c574231752b53784865462f
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdb 8:16 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdc 8:32 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdd 8:48 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sde 8:64 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdf 8:80 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdg 8:96 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdh 8:112 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
$ sudo multipath -ll
3600a09806c574231752b53784865462f dm-0 NETAPP ,LUN C-Mode
size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=enabled
| |- 3:0:0:1 sdd 8:48 active ready running
| |- 2:0:0:1 sdc 8:32 active ready running
| |- 1:0:0:1 sda 8:0 active ready running
| `- 0:0:0:1 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 5:0:0:1 sdf 8:80 active ready running
|- 4:0:0:1 sde 8:64 active ready running
|- 6:0:0:1 sdg 8:96 active ready running
`- 7:0:0:1 sdh 8:112 active ready running
そのため、/etc/fstab
を編集してあげればよさそうですね。
# 現在の/etc/fstabの確認
$ cat /etc/fstab
#
UUID=2a7884f1-a23b-49a0-8693-ae82c155e5af / xfs defaults,noatime 1 1
# /etc/fstabの編集
$ sudo vi /etc/fstab
# 編集した内容の確認
$ cat /etc/fstab
#
UUID=2a7884f1-a23b-49a0-8693-ae82c155e5af / xfs defaults,noatime 1 1
/dev/mapper/3600a09806c574231752b53784865462f1 /lun/part1 ext4 defaults,noatime 0 2
/dev/mapper/3600a09806c574231752b53784865462f2 /lun/part2 ext4 defaults,noatime 0 2
/etc/fstab
編集後、/etc/fstab
の内容を読み込んでマウントできることを確認します。
# /etc/fstabの内容を読み込んでマウント
$ sudo mount -a
# マウントされていることを確認
$ mount | grep ext4
/dev/mapper/3600a09806c574231752b53784865462f1 on /lun/part1 type ext4 (rw,noatime,stripe=16)
/dev/mapper/3600a09806c574231752b53784865462f2 on /lun/part2 type ext4 (rw,noatime,stripe=16)
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 462M 0 462M 0% /dev
tmpfs 470M 0 470M 0% /dev/shm
tmpfs 470M 400K 470M 1% /run
tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.6G 6.5G 20% /
/dev/mapper/3600a09806c574231752b53784865462f1 2.0G 6.1M 1.8G 1% /lun/part1
/dev/mapper/3600a09806c574231752b53784865462f2 2.9G 9.1M 2.8G 1% /lun/part2
/etc/fstab
の内容を読み込んでマウントできることを確認できたので、OSを再起動します。
OS再起動後にEC2インスタンスに接続します。
はい、EC2インスタンスにSSMセッションマネージャーで接続できなくなりました。
シリアルコンソールからEC2インスタンスに接続してみると、デバイス(3600a09806c574231752b53784865462f1
と3600a09806c574231752b53784865462f2
)を見つけられなくて泣いているようです。
[ TIME ] Timed out waiting for device dev-ma...c574231752b53784865462f1.device.
[DEPEND] Dependency failed for /lun/part1.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Relabel all filesystems, if necessary.
[DEPEND] Dependency failed for Mark the need to relabel after reboot.
[DEPEND] Dependency failed for Migrate local... structure to the new structure.
[ TIME ] Timed out[ 93.824908] RPC: Registered named UNIX socket transport module.
waiting for device dev-ma...c574231752b53784865462f2.device.
[DEPEND] Dependency failed for /lun/part2.
Starting Preprocess NFS configuration...
[ 93.824909] RPC: Registered udp transport module.
2m OK ] Reached target Timers.
[ OK ] Reached target Login Prompts.
Starting Initial hibernation setup job...
[ OK ] Reached target Cloud-init target[ 93.824910] RPC: Registered tcp transport module.
.
[ OK ] Reached target Network (Pre).
[ OK ] Reached target Network.
Starting Login and scanning of iSCSI devices...
Starting Logout off all iS[ 93.824910] RPC: Registered tcp NFSv4.1 backchannel transport module.
CSI sessions on shutdown...
Starting Initial cloud-init job (metadata service crawler)...
[ OK ] Reached target Sockets.
Starting Tell Plymouth To Write Out Runtime Data...
[ OK ] Started Emergency Shell.
[ OK ] Reached target Emergency Mode.
Starting Create Volatile Files and Directories...
[ OK ] Reached target Paths.
[ OK ] Started Preprocess NFS configuration.
[ OK ] Started Logout off all iSCSI sessions on shutdown.
[ OK ] Started Create Volatile Files and Directories.
Starting Security Auditing Service...
Starting RPC bind service...
Mounting RPC Pipe File System...
[ OK ] Started RPC bind service.
[ OK ] Mounted RPC Pipe File System.
[ OK ] Reached target rpc_pipefs.target.
[ OK ] Reached target NFS client services.
Starting Relabel kernel modules early in the boot, if needed...
Starting Activation of DM RAID sets...
[ OK ] Stopped target Emergency Mode.
[ OK ] Started Relabel kernel modules early in the boot, if needed.
[ OK ] Started Activation of DM RAID sets.
[ OK ] Started Tell Plymouth To Write Out Runtime Data.
[ OK ] Started Security Auditing Service.
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Started Update UTMP about System Boot/Shutdown.
Starting Update UTMP about System Runlevel Changes...
[ OK ] Started Update UTMP about System Runlevel Changes.
[ 93.620192] hibinit-agent[1733]: Traceback (most recent call last):
[ 93.620477] hibinit-agent[1733]: File "/usr/bin/hibinit-agent", line 496, in <module>
[ 93.622027] hibinit-agent[1733]: main()
[ 93.622223] hibinit-agent[1733]: File "/usr/bin/hibinit-agent", line 435, in main
[ 93.624216] hibinit-agent[1733]: if not hibernation_enabled(config.state_dir):
[ 93.624482] hibinit-agent[1733]: File "/usr/bin/hibinit-agent", line 390, in hibernation_enabled
[ 93.624660] hibinit-agent[1733]: imds_token = get_imds_token()
[ 93.624798] hibinit-agent[1733]: File "/usr/bin/hibinit-agent", line 365, in get_imds_token
[ 93.624931] hibinit-agent[1733]: response = requests.put(token_url, headers=request_header)
[ 93.625066] hibinit-agent[1733]: File "/usr/lib/python2.7/site-packages/requests/api.py", line 121, in put
[ 93.625199] hibinit-agent[1733]: return request('put', url, data=data, **kwargs)
[ 93.625330] hibinit-agent[1733]: File "/usr/lib/python2.7/site-packages/requests/api.py", line 50, in request
[ 93.625484] hibinit-agent[1733]: response = session.request(method=method, url=url, **kwargs)
[ 93.625612] hibinit-agent[1733]: File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 486, in request
[ 93.629485] hibinit-agent[1733]: resp = self.send(prep, **send_kwargs)
[ 93.629680] hibinit-agent[1733]: File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 598, in send
[ 93.629927] hibinit-agent[1733]: r = adapter.send(request, **kwargs)
[ 93.631822] hibinit-agent[1733]: File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 419, in send
[ 93.632074] hibinit-agent[1733]: raise ConnectTimeout(e, request=request)
[ 93.633179] hibinit-agent[1733]: requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /lat
est/api/token (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f0f9268c5d0>: Failed to establish a new connectio
n: [Errno 101] Network is unreachable',))
[FAILED] Failed to start Initial hibernation setup job.
See 'systemctl status hibinit-agent.service' for details.
[ 94.031774] cloud-init[1736]: Cloud-init v. 19.3-45.amzn2 running 'init' at Fri, 20 May 2022 01:17:38 +0000. Up 94.00 seconds.
[ 94.054658] cloud-init[1736]: ci-info: +++++++++++++++++++++++++++Net device info++++++++++++++++++++++++++++
[ 94.054899] cloud-init[1736]: ci-info: +--------+-------+-----------+-----------+-------+-------------------+
[ 94.059033] cloud-init[1736]: ci-info: | Device | Up | Address | Mask | Scope | Hw-Address |
[ 94.060813] cloud-init[1736]: ci-info: +--------+-------+-----------+-----------+-------+-------------------+
[ 94.065010] cloud-init[1736]: ci-info: | eth0 | False | . | . | . | 06:b3:d2:fc:2d:63 |
[ 94.066866] cloud-init[1736]: ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | host | . |
[ 94.067134] cloud-init[1736]: ci-info: | lo | True | ::1/128 | . | host | . |
[ 94.067353] cloud-init[1736]: ci-info: +--------+-------+-----------+-----------+-------+-------------------+
[ 94.075820] cloud-init[1736]: ci-info: +++++++++++++++++++Route IPv6 info+++++++++++++++++++
[ 94.076083] cloud-init[1736]: ci-info: +-------+-------------+---------+-----------+-------+
[ 94.078334] cloud-init[1736]: ci-info: | Route | Destination | Gateway | Interface | Flags |
[ 94.078587] cloud-init[1736]: ci-info: +-------+-------------+---------+-----------+-------+
[ 94.083026] cloud-init[1736]: ci-info: +-------+-------------+---------+-----------+-------+
[ OK ] Started Initial cloud-init job (metadata service crawler).
[ OK ] Reached target Cloud-config availability.
[ OK ] Reached target Network is Online.
Welcome to emergency mode! After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to
try again to boot into default mode.
[ OK ] Stopped Emergency Shell.
こちらの原因はネットワークがオンラインになる前に接続しようとしているからです。
このデバイスにはiSCSIで接続しているので、接続する際はネットワークがオンラインになっている必要があります。
そのため、/etc/fstab
のマウントオプションを変更して、ネットワークがオンラインになった後にマウントしに行くようにしてあげます。
このEC2インスタンスはシリアルコンソールからでも操作を受け付けなくなったので終了(Terminate )して、別のEC2インスタンスで検証します。
新しいEC2インスタンス起動後、OSのiSCSI設定を行います。
# 必要なソフトウェアのインストール
$ sudo yum install device-mapper-multipath iscsi-initiator-utils -y
.
.
(中略)
.
.
Installed:
device-mapper-multipath.x86_64 0:0.4.9-127.amzn2 iscsi-initiator-utils.x86_64 0:6.2.0.874-7.amzn2
Dependency Installed:
device-mapper-multipath-libs.x86_64 0:0.4.9-127.amzn2 iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-7.amzn2
Complete!
# タイムアウト値を5に変更
$ sudo sed -i 's/node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 5/' /etc/iscsi/iscsid.conf
# 変更した結果を確認
$ sudo cat /etc/iscsi/iscsid.conf \
| grep node.session.timeo.replacement_timeout
node.session.timeo.replacement_timeout = 5
# iSCSIサービスの起動
$ sudo systemctl start iscsid
# iSCSIサービスの起動確認
$ sudo systemctl status iscsid.service
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2022-05-20 01:30:28 UTC; 5s ago
Docs: man:iscsid(8)
man:iscsiadm(8)
Process: 2736 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 2738 (iscsid)
CGroup: /system.slice/iscsid.service
├─2737 /usr/sbin/iscsid
└─2738 /usr/sbin/iscsid
May 20 01:30:28 ip-10-0-0-162.ap-northeast-1.compute.internal systemd[1]: Starting Open-iSCSI...
May 20 01:30:28 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2736]: iSCSI logger with pid=2737 started!
May 20 01:30:28 ip-10-0-0-162.ap-northeast-1.compute.internal systemd[1]: Failed to parse PID from file /var/run/iscsid.pid: Invalid argument
May 20 01:30:28 ip-10-0-0-162.ap-northeast-1.compute.internal systemd[1]: Started Open-iSCSI.
May 20 01:30:29 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2737]: iSCSI daemon with pid=2738 started!
# マルチパスの設定
$ sudo mpathconf --enable --with_multipathd y
# イニシエーター名の確認
$ sudo cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:2cc274f1146
イニシエーター名はインスタンスによって異なります。EC2インスタンスを作り直したので、イニシエーターグループに新しいEC2インスタンスを追加します。
# NetApp ONTAP CLIを使用
$ ssh fsxadmin@management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com
Password:
Last login time: 5/20/2022 01:29:07
# イニシエーターグループの確認
::> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux iqn.1994-05.com.redhat:2f3cecbb7216
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_002 iscsi windows iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
2 entries were displayed.
# イニシエーターグループから古いEC2インスタンスを削除
::> lun igroup remove -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -igroup igroup_001 -initiator iqn.1994-05.com.redhat:2f3cecbb7216 -force
# イニシエーターグループの確認
::lun igroup> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux -
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_002 iscsi windows iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
2 entries were displayed.
# イニシエターグループに新しいEC2インスタンスを追加
::lun igroup> lun igroup add -vserver classmethod-dev-fsx-netapp-ontap-single-az-svm -igroup igroup_001 -initiator iqn.1994-05.com.redhat:2cc274f1146
# イニシエーターグループの確認
::lun igroup> lun igroup show
Vserver Igroup Protocol OS Type Initiators
--------- ------------ -------- -------- ------------------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_001 iscsi linux iqn.1994-05.com.redhat:2cc274f1146
classmethod-dev-fsx-netapp-ontap-single-az-svm
igroup_002 iscsi windows iqn.1991-05.com.microsoft:ec2amaz-69ctq9g
2 entries were displayed.
::lun igroup> exit
Goodbye
Connection to management.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com closed.
事前準備ができたので新しいEC2インスタンスにLUNを認識させます。
# ターゲットiSCSIノードの検出
$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal 10.0.10.96
10.0.10.96:3260,1029 iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
10.0.10.45:3260,1030 iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3
# 各AZのONTAPノードごとにイニシエータあたり4つのセッションを確立するよう設定
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3 --op update -n node.session.nr_sessions -v 4
# ターゲットイニシエーターにログイン
$ sudo iscsiadm --mode node -T iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3 --login
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] (multiple)
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.96,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3, portal: 10.0.10.45,3260] successful.
# 現在のマルチパス設定の確認
$ sudo multipath -ll
3600a09806c574231752b53784865462f dm-0 NETAPP ,LUN C-Mode
size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=enabled
| |- 0:0:0:1 sda 8:0 active ready running
| |- 1:0:0:1 sdb 8:16 active ready running
| |- 2:0:0:1 sdd 8:48 active ready running
| `- 3:0:0:1 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 4:0:0:1 sde 8:64 active ready running
|- 5:0:0:1 sdf 8:80 active ready running
|- 6:0:0:1 sdg 8:96 active ready running
`- 7:0:0:1 sdh 8:112 active ready running
# 現在のブロックデバイスの確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 2G 0 part
├─sda2 8:2 0 3G 0 part
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 3G 0 part
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdc 8:32 0 10G 0 disk
├─sdc1 8:33 0 2G 0 part
├─sdc2 8:34 0 3G 0 part
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdd 8:48 0 10G 0 disk
├─sdd1 8:49 0 2G 0 part
├─sdd2 8:50 0 3G 0 part
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sde 8:64 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdf 8:80 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdg 8:96 0 10G 0 disk
├─sdg1 8:97 0 2G 0 part
├─sdg2 8:98 0 3G 0 part
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
sdh 8:112 0 10G 0 disk
└─3600a09806c574231752b53784865462f 253:0 0 10G 0 mpath
├─3600a09806c574231752b53784865462f1 253:1 0 2G 0 part
└─3600a09806c574231752b53784865462f2 253:2 0 3G 0 part
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
パーティションはそのまま認識できたようです。マウントポイントを作成してマウントします。
# マウントポイントの作成
$ sudo mkdir -p /lun/part1
$ sudo mkdir /lun/part2
# マウントポイントの確認
$ ls -l /lun
total 0
drwxr-xr-x 2 root root 6 May 20 01:44 part1
drwxr-xr-x 2 root root 6 May 20 01:44 part2
# マウント
$ sudo mount -t ext4 /dev/mapper/3600a09806c574231752b53784865462f1 /lun/part1
$ sudo mount -t ext4 /dev/mapper/3600a09806c574231752b53784865462f2 /lun/part2
# ディスクの空き容量の確認
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 462M 0 462M 0% /dev
tmpfs tmpfs 470M 0 470M 0% /dev/shm
tmpfs tmpfs 470M 440K 470M 1% /run
tmpfs tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs 8.0G 1.6G 6.5G 20% /
/dev/mapper/3600a09806c574231752b53784865462f1 ext4 2.0G 6.1M 1.8G 1% /lun/part1
/dev/mapper/3600a09806c574231752b53784865462f2 ext4 2.9G 9.1M 2.8G 1% /lun/part2
# ディレクトリの所有者の変更
$ sudo chown ssm-user:ssm-user /lun/part1
$ sudo chown ssm-user:ssm-user /lun/part2
# ディレクトリの所有者確認
$ ls -l /lun
total 8
drwxr-xr-x 3 ssm-user ssm-user 4096 May 19 02:41 part1
drwxr-xr-x 3 ssm-user ssm-user 4096 May 19 02:41 part2
# 書き込み
$ echo 'Hello world!' > /lun/part1/HelloWorld.txt
$ echo 'Hello world!' > /lun/part2/HelloWorld.txt
# 書き込んだ内容を確認
$ cat /lun/part1/HelloWorld.txt
Hello world!
$ cat /lun/part2/HelloWorld.txt
Hello world!
マウントできたようですね。
一旦、OSを再起動します。ついでに作成したマウントするLUNのUUIDを確認しておきます。
# UUIDの確認
$ sudo blkid
/dev/nvme0n1: PTUUID="30b4269a-8501-4012-b8ae-5dbf6cbbaca8" PTTYPE="gpt"
/dev/nvme0n1p1: LABEL="/" UUID="2a7884f1-a23b-49a0-8693-ae82c155e5af" TYPE="xfs" PARTLABEL="Linux" PARTUUID="4d1e3134-c9e4-456d-a253-374c91394e99"
/dev/nvme0n1p128: PARTLABEL="BIOS Boot Partition" PARTUUID="c31217ab-49a8-4c94-a774-32a6564a79f5"
/dev/sda1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/sda2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/sdb1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/sdb2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/sdc1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/sdc2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/sdd1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/sdd2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/sde: PTUUID="5060b99a" PTTYPE="dos"
/dev/sdf: PTUUID="5060b99a" PTTYPE="dos"
/dev/sdg1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/sdg2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/mapper/3600a09806c574231752b53784865462f: PTUUID="5060b99a" PTTYPE="dos"
/dev/mapper/3600a09806c574231752b53784865462f1: UUID="b770de9f-51f5-49e9-84b1-3f9188625e52" TYPE="ext4" PARTUUID="5060b99a-01"
/dev/mapper/3600a09806c574231752b53784865462f2: UUID="ce7b791c-7a9d-4f77-acfa-285ce3c2e229" TYPE="ext4" PARTUUID="5060b99a-02"
/dev/sdh: PTUUID="5060b99a" PTTYPE="dos"
# OSの再起動
$ sudo systemctl reboot
Terminated
OS再起動後、自動でマウントされていないことを確認します。
# マウントされていないことを確認
$ mount | grep ext4
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 462M 0 462M 0% /dev
tmpfs tmpfs 470M 0 470M 0% /dev/shm
tmpfs tmpfs 470M 404K 470M 1% /run
tmpfs tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs 8.0G 1.6G 6.5G 20% /
iscsid
とmultipathd
が自動起動していることを確認します。
$ sudo systemctl status iscsid -l
● iscsid.service - Open-iSCSI
Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2022-05-20 01:48:00 UTC; 6min ago
Docs: man:iscsid(8)
man:iscsiadm(8)
Process: 2129 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 2132 (iscsid)
CGroup: /system.slice/iscsid.service
├─2131 /usr/sbin/iscsid
└─2132 /usr/sbin/iscsid
May 20 01:48:00 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: iSCSI daemon with pid=2132 started!
May 20 01:48:00 ip-10-0-0-162.ap-northeast-1.compute.internal systemd[1]: Started Open-iSCSI.
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection4:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection3:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection2:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection1:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.96,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection5:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection8:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection7:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.45,3260] through [iface: default] is operational now
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal iscsid[2131]: Connection6:0 to [target: iqn.1992-08.com.netapp:sn.a7e1ed55d70c11ecaeb4877d41bba405:vs.3,portal: 10.0.10.45,3260] through [iface: default] is operational now
$ sudo systemctl status multipathd -l
● multipathd.service - Device-Mapper Multipath Device Controller
Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-05-20 01:47:58 UTC; 7min ago
Process: 1601 ExecStart=/sbin/multipathd (code=exited, status=0/SUCCESS)
Process: 1595 ExecStartPre=/sbin/multipath -A (code=exited, status=0/SUCCESS)
Process: 1568 ExecStartPre=/sbin/modprobe dm-multipath (code=exited, status=0/SUCCESS)
Main PID: 1605 (multipathd)
CGroup: /system.slice/multipathd.service
└─1605 /sbin/multipathd
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdc: add path (uevent)
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdc [8:32]: delaying path addition until 3600a09806c574231752b53784865462f is fully initialized
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sde: add path (uevent)
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sde [8:64]: delaying path addition until 3600a09806c574231752b53784865462f is fully initialized
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdh: add path (uevent)
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdh [8:112]: delaying path addition until 3600a09806c574231752b53784865462f is fully initialized
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdd: add path (uevent)
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: sdd [8:48]: delaying path addition until 3600a09806c574231752b53784865462f is fully initialized
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: 3600a09806c574231752b53784865462f: performing delayed actions
May 20 01:48:01 ip-10-0-0-162.ap-northeast-1.compute.internal multipathd[1605]: 3600a09806c574231752b53784865462f: load table [0 20971520 multipath 4 queue_if_no_pathpg_init_retries 50 retain_attached_hw_handler 0 2 1 service-time 0 4 1 8:0 1 8:16 1 8:32 1 8:48 1 service-time 0 4 1 8:96 1 8:80 1 8:64 1 8:112 1]
それでは、/etc/fstab
の設定リベンジです。
事前にマウントオプションをman
で確認します。
$ man mount | cat
MOUNT(8) System Administration MOUNT(8)
NAME
mount - mount a filesystem
.
.
(中略)
.
.
FILESYSTEM-INDEPENDENT MOUNT OPTIONS
Some of these options are only useful when they appear in the /etc/fstab file.
Some of these options could be enabled or disabled by default in the system kernel. To check the current setting see the options in /proc/mounts. Note
that filesystems also have per-filesystem specific default mount options (see for example tune2fs -l output for extN filesystems).
The following options apply to any filesystem that is being mounted (but not every filesystem actually honors them – e.g., the sync option today has an
effect only for ext2, ext3, fat, vfat and ufs):
async All I/O to the filesystem should be done asynchronously. (See also the sync option.)
atime Do not use the noatime feature, so the inode access time is controlled by kernel defaults. See also the descriptions of the relatime and stricta‐
time mount options.
noatime
Do not update inode access times on this filesystem (e.g. for faster access on the news spool to speed up news servers). This works for all inode
types (directories too), so it implies nodiratime.
auto Can be mounted with the -a option.
noauto Can only be mounted explicitly (i.e., the -a option will not cause the filesystem to be mounted).
context=context, fscontext=context, defcontext=context, and rootcontext=context
The context= option is useful when mounting filesystems that do not support extended attributes, such as a floppy or hard disk formatted with VFAT,
or systems that are not normally running under SELinux, such as an ext3 formatted disk from a non-SELinux workstation. You can also use context= on
filesystems you do not trust, such as a floppy. It also helps in compatibility with xattr-supporting filesystems on earlier 2.4.<x> kernel ver‐
sions. Even where xattrs are supported, you can save time not having to label every file by assigning the entire disk one security context.
A commonly used option for removable media is context="system_u:object_r:removable_t".
Two other options are fscontext= and defcontext=, both of which are mutually exclusive of the context option. This means you can use fscontext and
defcontext with each other, but neither can be used with context.
The fscontext= option works for all filesystems, regardless of their xattr support. The fscontext option sets the overarching filesystem label to a
specific security context. This filesystem label is separate from the individual labels on the files. It represents the entire filesystem for cer‐
tain kinds of permission checks, such as during mount or file creation. Individual file labels are still obtained from the xattrs on the files
themselves. The context option actually sets the aggregate context that fscontext provides, in addition to supplying the same label for individual
files.
You can set the default security context for unlabeled files using defcontext= option. This overrides the value set for unlabeled files in the pol‐
icy and requires a filesystem that supports xattr labeling.
The rootcontext= option allows you to explicitly label the root inode of a FS being mounted before that FS or inode becomes visible to userspace.
This was found to be useful for things like stateless linux.
Note that the kernel rejects any remount request that includes the context option, even when unchanged from the current context.
Warning: the context value might contain commas, in which case the value has to be properly quoted, otherwise mount(8) will interpret the comma as a
separator between mount options. Don't forget that the shell strips off quotes and thus double quoting is required. For example:
mount -t tmpfs none /mnt -o \
'context="system_u:object_r:tmp_t:s0:c127,c456",noexec'
For more details, see selinux(8).
defaults
Use the default options: rw, suid, dev, exec, auto, nouser, and async.
Note that the real set of all default mount options depends on kernel and filesystem type. See the beginning of this section for more details.
dev Interpret character or block special devices on the filesystem.
nodev Do not interpret character or block special devices on the file system.
diratime
Update directory inode access times on this filesystem. This is the default. (This option is ignored when noatime is set.)
nodiratime
Do not update directory inode access times on this filesystem. (This option is implied when noatime is set.)
dirsync
All directory updates within the filesystem should be done synchronously. This affects the following system calls: creat, link, unlink, symlink,
mkdir, rmdir, mknod and rename.
exec Permit execution of binaries.
noexec Do not permit direct execution of any binaries on the mounted filesystem. (Until recently it was possible to run binaries anyway using a command
like /lib/ld*.so /mnt/binary. This trick fails since Linux 2.4.25 / 2.6.0.)
group Allow an ordinary user to mount the filesystem if one of that user's groups matches the group of the device. This option implies the options nosuid
and nodev (unless overridden by subsequent options, as in the option line group,dev,suid).
iversion
Every time the inode is modified, the i_version field will be incremented.
noiversion
Do not increment the i_version inode field.
mand Allow mandatory locks on this filesystem. See fcntl(2).
nomand Do not allow mandatory locks on this filesystem.
_netdev
The filesystem resides on a device that requires network access (used to prevent the system from attempting to mount these filesystems until the
network has been enabled on the system).
nofail Do not report errors for this device if it does not exist.
relatime
Update inode access times relative to modify or change time. Access time is only updated if the previous access time was earlier than the current
modify or change time. (Similar to noatime, but it doesn't break mutt or other applications that need to know if a file has been read since the
last time it was modified.)
Since Linux 2.6.30, the kernel defaults to the behavior provided by this option (unless noatime was specified), and the strictatime option is
required to obtain traditional semantics. In addition, since Linux 2.6.30, the file's last access time is always updated if it is more than 1 day
old.
norelatime
Do not use the relatime feature. See also the strictatime mount option.
strictatime
Allows to explicitly request full atime updates. This makes it possible for the kernel to default to relatime or noatime but still allow userspace
to override it. For more details about the default system mount options see /proc/mounts.
nostrictatime
Use the kernel's default behavior for inode access time updates.
lazytime
Only update times (atime, mtime, ctime) on the in-memory version of the file inode.
This mount option significantly reduces writes to the inode table for workloads that perform frequent random writes to preallocated files.
The on-disk timestamps are updated only when:
- the inode needs to be updated for some change unrelated to file timestamps
- the application employs fsync(2), syncfs(2), or sync(2)
- an undeleted inode is evicted from memory
- more than 24 hours have passed since the i-node was written to disk.
nolazytime
Do not use the lazytime feature.
suid Allow set-user-ID or set-group-ID bits to take effect.
nosuid Do not allow set-user-ID or set-group-ID bits to take effect.
silent Turn on the silent flag.
loud Turn off the silent flag.
owner Allow an ordinary user to mount the filesystem if that user is the owner of the device. This option implies the options nosuid and nodev (unless
overridden by subsequent options, as in the option line owner,dev,suid).
remount
Attempt to remount an already-mounted filesystem. This is commonly used to change the mount flags for a filesystem, especially to make a readonly
filesystem writable. It does not change device or mount point.
The remount functionality follows the standard way the mount command works with options from fstab. This means that mount does not read fstab (or
mtab) only when both device and dir are specified.
mount -o remount,rw /dev/foo /dir
After this call all old mount options are replaced and arbitrary stuff from fstab (or mtab) is ignored, except the loop= option which is internally
generated and maintained by the mount command.
mount -o remount,rw /dir
After this call, mount reads fstab and merges these options with the options from the command line (-o). If no mountpoint is found in fstab, then a
remount with unspecified source is allowed.
ro Mount the filesystem read-only.
rw Mount the filesystem read-write.
sync All I/O to the filesystem should be done synchronously. In the case of media with a limited number of write cycles (e.g. some flash drives), sync
may cause life-cycle shortening.
user Allow an ordinary user to mount the filesystem. The name of the mounting user is written to the mtab file (or to the private libmount file in
/run/mount on systems without a regular mtab) so that this same user can unmount the filesystem again. This option implies the options noexec,
nosuid, and nodev (unless overridden by subsequent options, as in the option line user,exec,dev,suid).
nouser Forbid an ordinary user to mount the filesystem. This is the default; it does not imply any other options.
users Allow any user to mount and to unmount the filesystem, even when some other ordinary user mounted it. This option implies the options noexec,
nosuid, and nodev (unless overridden by subsequent options, as in the option line users,exec,dev,suid).
X-* All options prefixed with "X-" are interpreted as comments or as userspace application-specific options. These options are not stored in the user
space (e.g. mtab file), nor sent to the mount.type helpers nor to the mount(2) system call. The suggested format is X-appname.option.
x-* The same as X-* options, but stored permanently in the user space. It means the options are also available for umount or another operations. Note
that maintain mount options in user space is tricky, because it's necessary use libmount based tools and there is no guarantee that the options will
be always available (for example after a move mount operation or in unshared namespace).
Note that before util-linux v2.30 the x-* options have not been maintained by libmount and stored in user space (functionality was the same as have
X-* now), but due to growing number of use-cases (in initrd, systemd etc.) the functionality have been extended to keep existing fstab configura‐
tions usable without a change.
X-mount.mkdir[=mode]
Allow to make a target directory (mountpoint). The optional argument mode specifies the filesystem access mode used for mkdir(2) in octal notation.
The default mode is 0755. This functionality is supported only for root users. The option is also supported as x-mount.mkdir, this notation is
deprecated for mount.mkdir since v2.30.
.
.
(中略)
.
.
Mount options for ext4
The ext4 filesystem is an advanced level of the ext3 filesystem which incorporates scalability and reliability enhancements for supporting large filesys‐
tem.
The options journal_dev, norecovery, noload, data, commit, orlov, oldalloc, [no]user_xattr [no]acl, bsddf, minixdf, debug, errors, data_err, grpid, bsd‐
groups, nogrpid sysvgroups, resgid, resuid, sb, quota, noquota, grpquota, usrquota usrjquota, grpjquota and jqfmt are backwardly compatible with ext3 or
ext2.
journal_checksum
Enable checksumming of the journal transactions. This will allow the recovery code in e2fsck and the kernel to detect corruption in the kernel. It
is a compatible change and will be ignored by older kernels.
journal_async_commit
Commit block can be written to disk without waiting for descriptor blocks. If enabled, older kernels cannot mount the device. This will enable
'journal_checksum' internally.
barrier=0 / barrier=1 / barrier / nobarrier
These mount options have the same effect as in ext3. The mount options "barrier" and "nobarrier" are added for consistency with other ext4 mount
options.
The ext4 filesystem enables write barriers by default.
inode_readahead_blks=n
This tuning parameter controls the maximum number of inode table blocks that ext4's inode table readahead algorithm will pre-read into the buffer
cache. The value must be a power of 2. The default value is 32 blocks.
stripe=n
Number of filesystem blocks that mballoc will try to use for allocation size and alignment. For RAID5/6 systems this should be the number of data
disks * RAID chunk size in filesystem blocks.
delalloc
Deferring block allocation until write-out time.
nodelalloc
Disable delayed allocation. Blocks are allocated when data is copied from user to page cache.
max_batch_time=usec
Maximum amount of time ext4 should wait for additional filesystem operations to be batch together with a synchronous write operation. Since a syn‐
chronous write operation is going to force a commit and then a wait for the I/O complete, it doesn't cost much, and can be a huge throughput win, we
wait for a small amount of time to see if any other transactions can piggyback on the synchronous write. The algorithm used is designed to automat‐
ically tune for the speed of the disk, by measuring the amount of time (on average) that it takes to finish committing a transaction. Call this
time the "commit time". If the time that the transaction has been running is less than the commit time, ext4 will try sleeping for the commit time
to see if other operations will join the transaction. The commit time is capped by the max_batch_time, which defaults to 15000 µs (15 ms). This
optimization can be turned off entirely by setting max_batch_time to 0.
min_batch_time=usec
This parameter sets the commit time (as described above) to be at least min_batch_time. It defaults to zero microseconds. Increasing this parame‐
ter may improve the throughput of multi-threaded, synchronous workloads on very fast disks, at the cost of increasing latency.
journal_ioprio=prio
The I/O priority (from 0 to 7, where 0 is the highest priority) which should be used for I/O operations submitted by kjournald2 during a commit
operation. This defaults to 3, which is a slightly higher priority than the default I/O priority.
abort Simulate the effects of calling ext4_abort() for debugging purposes. This is normally used while remounting a filesystem which is already mounted.
auto_da_alloc|noauto_da_alloc
Many broken applications don't use fsync() when replacing existing files via patterns such as
fd = open("foo.new")/write(fd,...)/close(fd)/ rename("foo.new", "foo")
or worse yet
fd = open("foo", O_TRUNC)/write(fd,...)/close(fd).
If auto_da_alloc is enabled, ext4 will detect the replace-via-rename and replace-via-truncate patterns and force that any delayed allocation blocks
are allocated such that at the next journal commit, in the default data=ordered mode, the data blocks of the new file are forced to disk before the
rename() operation is committed. This provides roughly the same level of guarantees as ext3, and avoids the "zero-length" problem that can happen
when a system crashes before the delayed allocation blocks are forced to disk.
noinit_itable
Do not initialize any uninitialized inode table blocks in the background. This feature may be used by installation CD's so that the install process
can complete as quickly as possible; the inode table initialization process would then be deferred until the next time the filesystem is mounted.
init_itable=n
The lazy itable init code will wait n times the number of milliseconds it took to zero out the previous block group's inode table. This minimizes
the impact on system performance while the filesystem's inode table is being initialized.
discard/nodiscard
Controls whether ext4 should issue discard/TRIM commands to the underlying block device when blocks are freed. This is useful for SSD devices and
sparse/thinly-provisioned LUNs, but it is off by default until sufficient testing has been done.
nouid32
Disables 32-bit UIDs and GIDs. This is for interoperability with older kernels which only store and expect 16-bit values.
block_validity/noblock_validity
This options allows to enables/disables the in-kernel facility for tracking filesystem metadata blocks within internal data structures. This allows
multi-block allocator and other routines to quickly locate extents which might overlap with filesystem metadata blocks. This option is intended for
debugging purposes and since it negatively affects the performance, it is off by default.
dioread_lock/dioread_nolock
Controls whether or not ext4 should use the DIO read locking. If the dioread_nolock option is specified ext4 will allocate uninitialized extent
before buffer write and convert the extent to initialized after IO completes. This approach allows ext4 code to avoid using inode mutex, which
improves scalability on high speed storages. However this does not work with data journaling and dioread_nolock option will be ignored with kernel
warning. Note that dioread_nolock code path is only used for extent-based files. Because of the restrictions this options comprises it is off by
default (e.g. dioread_lock).
max_dir_size_kb=n
This limits the size of the directories so that any attempt to expand them beyond the specified limit in kilobytes will cause an ENOSPC error. This
is useful in memory-constrained environments, where a very large directory can cause severe performance problems or even provoke the Out Of Memory
killer. (For example, if there is only 512 MB memory available, a 176 MB directory may seriously cramp the system's style.)
i_version
Enable 64-bit inode version support. This option is off by default.
(以下略)
マウントオプションにはdefaults
とネットワークが有効になるまでマウントしないように_netdev
、デバイスが見つけられなかった場合もエラーを報告しないようにnofail
を付与します。
# 現在の/etc/fstabの確認
$ cat /etc/fstab
#
UUID=2a7884f1-a23b-49a0-8693-ae82c155e5af / xfs defaults,noatime 1 1
# /etc/fstabの編集
$ sudo vi /etc/fstab
# 編集した内容の確認
$ cat /etc/fstab
#
UUID=2a7884f1-a23b-49a0-8693-ae82c155e5af / xfs defaults,noatime 1 1
UUID=b770de9f-51f5-49e9-84b1-3f9188625e52 /lun/part1 ext4 defaults,_netdev,nofail 0 2
UUID=ce7b791c-7a9d-4f77-acfa-285ce3c2e229 /lun/part2 ext4 defaults,_netdev,nofail 0 2
/etc/fstab
編集後、/etc/fstab
の内容を読み込んでマウントできることを確認します。
# /etc/fstabの内容を読み込んでマウント
$ sudo mount -a
# マウントされていることを確認
$ mount | grep ext4
/dev/mapper/3600a09806c574231752b53784865462f1 on /lun/part1 type ext4 (rw,relatime,stripe=16,_netdev)
/dev/mapper/3600a09806c574231752b53784865462f2 on /lun/part2 type ext4 (rw,relatime,stripe=16,_netdev)
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 462M 0 462M 0% /dev
tmpfs tmpfs 470M 0 470M 0% /dev/shm
tmpfs tmpfs 470M 464K 470M 1% /run
tmpfs tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs 8.0G 1.6G 6.5G 20% /
tmpfs tmpfs 94M 0 94M 0% /run/user/0
/dev/mapper/3600a09806c574231752b53784865462f1 ext4 2.0G 6.1M 1.8G 1% /lun/part1
/dev/mapper/3600a09806c574231752b53784865462f2 ext4 2.9G 9.1M 2.8G 1% /lun/part2
/etc/fstab
の内容を読み込んでマウントできることを確認できたので、OSを再起動します。
OS再起動後にEC2インスタンスに接続します。SSMセッションマネージャーで接続でき、マウントされていることも確認できました。
# マウントされていることを確認
$ mount | grep ext4
/dev/mapper/3600a09806c574231752b53784865462f2 on /lun/part2 type ext4 (rw,relatime,stripe=16,_netdev)
/dev/mapper/3600a09806c574231752b53784865462f1 on /lun/part1 type ext4 (rw,relatime,stripe=16,_netdev)
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 462M 0 462M 0% /dev
tmpfs tmpfs 470M 0 470M 0% /dev/shm
tmpfs tmpfs 470M 412K 470M 1% /run
tmpfs tmpfs 470M 0 470M 0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs 8.0G 1.6G 6.5G 20% /
/dev/mapper/3600a09806c574231752b53784865462f2 ext4 2.9G 9.1M 2.8G 1% /lun/part2
/dev/mapper/3600a09806c574231752b53784865462f1 ext4 2.0G 6.1M 1.8G 1% /lun/part1
# 書き込み確認
$ echo 'write test' > /lun/part1/write-test.txt
$ echo 'write test' > /lun/part2/write-test.txt
$ cat /lun/part1/write-test.txt
write test
$ cat /lun/part2/write-test.txt
write test
ブロックストレージとしても使えるすごいサービスだぞ
Amazon FSx for NetApp ONTAPファイルシステム上のiSCSI LUNをAmazon Linux 2とWindows Serverにマウントしてみました。
Multi-AZのブロックストレージを使えるのはかなり嬉しいですね。やはりロマンの塊です。
Amazon FSx for NetApp ONTAPはファイルストレージとしてもブロックストレージとしても使えるかなり万能なサービスということが分かりました。「このボリュームはLUNをホストさせて、他のボリュームはファイルサーバーの領域としても使う」など1つのファイルシステムで複数の役割を持たせることが出来そうです。
なお、LUNの作成などでNetApp ONTAP CLIコマンドを使用しましたが、コマンドリファレンスが充実しているので、特に困ったりはしませんでした。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!