なお・ArchLinux インストール覚書

[ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/f032a24cb273c4eb6669)より始めたArchLinuxプロジェクト。前回の[も一つ・ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/cc4786a8c586637eb17c)では手動でiSCSIデバイスをマウントできたものの、起動時に自動マウントする事が出来ませんでした。色々やってみて成功したので、その手順と知識をまとめました。

インストール手順としては[も一つ・ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/cc4786a8c586637eb17c)の続きになります。

# iSCSIイニシエータ

## 概要

iSCSIストレージを使えるようにする手順の概要は下記の通り。

- iSCSIターゲットを発見する。
- iSCSIターゲットにログイン。するとHDDデバイスとして認識される。
- 認識されたHDDデバイスをマウント。

## iSCSIターゲットの発見

手動で操作するならDNS登録してあるマシン名を指定しても良いです。しかし起動時の自動マウントでは、マシン名だと失敗するようです。その場合はIPアドレスを直接指定しましょう。例えばIPアドレスが 192.168.0.3 だったら:

```
# iscsiadm -m discovery -t sendtargets -p 192.168.0.3
192.168.0.3:3260,-1 iqn.2005-10.org.freenas.ctl:iscsi0
```

この時の指定がデータベースと呼ばれる場所に登録されます。データベースの正体は ```/etc/iscsi/send_targets``` ディレクトリです。

```
# find /etc/iscsi/send_targets -type f -ls
    37660      4 -rw-------   1  root     root          544 Apr 20 22:23 /etc/iscsi/send_targets/192.168.0.3,3260/st_config
# cat /etc/iscsi/send_targets/192.168.0.3,3260/st_config
# BEGIN RECORD 2.0-874
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = 192.168.0.3
discovery.sendtargets.port = 3260
discovery.sendtargets.auth.authmethod = None
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.use_discoveryd = No
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.reopen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
# END RECORD
```

データベースから削除するコマンドは下記の通り。

```
# iscsiadm -m discovery -o delete -p 192.168.0.3
# ls -a /etc/iscsi/send_targets
.  ..
```

また、この操作で発見されたノードもデータベースに登録されます。このデータベースの正体は ```/etc/iscsi/nodes``` ディレクトリです。

```
# find /etc/iscsi/nodes -type f -ls
    37662      4 -rw-------   1  root     root         2070 Apr 20 22:23 /etc/iscsi/nodes/iqn.2005-10.org.freenas.ctl:iscsi0/192.168.0.3,3260
```

データベースに登録されたノードは次のコマンドで確認できます。

```
# iscsiadm -m node
192.168.0.3:3260,-1 iqn.2005-10.org.freenas.ctl:iscsi0
```

データベースから削除するコマンドは下記の通り。

```
# iscsiadm -m node -o delete
# iscsiadm -m node
iscsiadm: No records found
# ls -a /etc/iscsi/nodes
.  ..
```

## iSCSIターゲットにログイン

iSCSIターゲットを発見してデータベースに登録したら、ログインします。

```
# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] (multiple)
Login to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] successful.
```

ログインに成功したら、次のコマンドで確認できます。

```
# iscsiadm -m session
tcp: [3] 192.168.0.3:3260,2 iqn.2005-10.org.freenas.ctl:iscsi0 (non-flash)
```

ログアウトは次の通り。

```
# iscsiadm -m node --logout
Logging out of session [sid: 3, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260]
Logout of [sid: 3, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] successful.
# iscsiadm -m session
iscsiadm: No active sessions.
```

## マウント

```/etc/fstab``` を設定してあれば、ログインすると同時にマウントされるようです。

```
# mount | grep iscsi
/dev/sdc on /iscsi type ext4 (rw,noatime,nodelalloc,nobarrier,errors=remount-ro,stripe=256,data=journal,_netdev)
# ls /iscsi
lost+found  test1
```

アンマウントは普通のコマンドで。

```
# umount /iscsi
# ls -a /iscsi
.  ..
```

再マウントも普通のコマンドで。

```
# mount /iscsi
# ls /iscsi
lost+found  test1
```

# マシン起動時の自動マウント

systemdのserviceを、自分で作りました。上述のログインするだけのものです。

参考文献: [redhat - サポート>製品マニュアル>Red Hat Enterprise Linux>7システム管理者のガイド - 9. systemd によるサービス管理 - 9.6. システムのユニットファイルの作成および変更](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html)

## iSCSIログインserviceを作成

```
# vi /etc/systemd/system/login-iscsi.service
# cat /etc/systemd/system/login-iscsi.service
[Unit]
Description=login iSCSI node
After=open-iscsi.service

[Service]
ExecStart=/usr/bin/iscsiadm -m node --login
Type=oneshot

[Install]
WantedBy=multi-user.target
```

動作を確認します。

```
# systemctl start login-iscsi.service
# systemctl status login-iscsi.service
* login-iscsi.service - login iSCSI node
   Loaded: loaded (/etc/systemd/system/login-iscsi.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Apr 20 23:18:23 HostName systemd[1]: Starting login iSCSI node...
Apr 20 23:18:24 HostName iscsiadm[680]: Logging in to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] (multiple)
Apr 20 23:18:24 HostName iscsiadm[680]: Login to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] successful.
Apr 20 23:18:24 HostName systemd[1]: Started login iSCSI node.
```

## マシン再起動

```
# systemctl enable login-iscsi.service
Created symlink /etc/systemd/system/multi-user.target.wants/login-iscsi.service -> /etc/systemd/system/login-iscsi.service.
# reboot
```

起動後に確認。

```
# systemctl status login-iscsi.service
* login-iscsi.service - login iSCSI node
   Loaded: loaded (/etc/systemd/system/login-iscsi.service; disabled; vendor preset: disabled)
   Active: inactive (dead) since Thu 2017-04-20 23:27:46 JST; 42s ago
  Process: 264 ExecStart=/usr/bin/iscsiadm -m node --login (code=exited, status=0/SUCCESS)
 Main PID: 264 (code=exited, status=0/SUCCESS)

Apr 20 23:27:40 HostName systemd[1]: Starting login iSCSI node...
Apr 20 23:27:46 HostName iscsiadm[264]: Logging in to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] (multiple)
Apr 20 23:27:46 HostName iscsiadm[264]: Login to [iface: default, target: iqn.2005-10.org.freenas.ctl:iscsi0, portal: 192.168.0.3,3260] successful.
Apr 20 23:27:46 HostName systemd[1]: Started login iSCSI node.
# ls /iscsi
lost+found  test1
```

やった:thumbsup: