5.3 記憶装置へのアクセス
5.3.1 デバイスファイル
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
|-sda1 8:1 0 200M 0 part /boot/efi
`-sda2 8:2 0 19.8G 0 part /
- カーネル2.6.21以降はlibataが導入され、IDEデバイスもSCSIデバイスと同じ扱いに
modinfo libata
filename: /lib/modules/3.10.0-1127.19.1.el7.x86_64/kernel/drivers/ata/libata.ko.xz
version: 3.00
license: GPL
description: Library module for ATA devices
author: Jeff Garzik
...
IDEデバイス
-
/dev/hda
- プライマリマスタ
-
/dev/hdb
- プライマリスレーブ
-
/dev/hdc
- セカンダリマスタ
-
/dev/hdd
- セカンダリスレーブ
SCSI/SATA/USB/IEEE1394デバイス
/dev/sda
/dev/sdb
/dev/sdc
/dev/sdd
1〜4番目のSCSI/SATA/USB/IEEE1394デバイス
ほかの
/dev/sr0
-
/dev/sr1
- 1,2番目のSCSI/SATA/USB CD/DVDドライブ
/dev/st0
-
/dev/st1
- 1.2番目のSCSIテープドライブ
5.3.2 ハードディスクの管理
種類
-
種類
- IDE(ATA: Advanced Technology Attachment)
- STA(SERIAL ATA)
- SCSI
- SAS(Serial Attached SCSI)
- USB
- IEEE1384
- LinuxではIDE以外は全部SCSI扱い
- IDEもカーネル2.6.21以降はSCSIと同じ扱い(libata)
- 要するに全部SCSI扱いになり、
/dev/sd*
になった
IDEの転送モード
-
PIO: Programmed I/O
- CPUがハードディスクに直接命令
- その間、CPUは他の仕事をできないのが欠点
-
DMA: Direct Memory Access
- CPUにかわって専用のコントローラチップがデータ転送を管理
- 現差製の主流
-
Ultra DMA
- 従来のDMAの拡張。はやい
- ハードディスク、マザーボードのチップセット、BIOSの対応が必要
hdparm
IDEのハードディスクパラメータ確認・設定
hdparm
-bash: hdparm: command not found
ないので入れる
yum provides hdparm
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
google-compute-engine 12/12
hdparm-9.43-5.el7.x86_64 : A utility for displaying and/or setting hard
: disk parameters
Repo : base
sudo yum install -y hdparm
hdparm -V
hdparm v9.43
IDEじゃないのでうごかない
sudo hdparm /dev/sda
/dev/sda:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
multcount = 0 (off)
readonly = 0 (off)
readahead = 8192 (on)
geometry = 20480/64/32, sectors = 41943040, start = 0
sdparm
やはりないので入れる
sudo yum install -y sdparm
sdparm -V
version: 1.08 20130606 [svn: r215]
sudo sdparm /dev/sda
/dev/sda: Google PersistentDisk 1
10 byte MODE SENSE cdb not supported, try again with '-6' option
-6
オプションとは
--six | -6 use 6 byte SCSI mode cdbs (def: 10 byte)
-
cdb: Command Descriptor Block
- 参考: IBM https://www.ibm.com/developerworks/jp/linux/library/l-scsi-api/index.html
- SCSIコマンドを記述するところ
sudo sdparm -lv6 /dev/sda
>>> about to open device name: /dev/sda
/dev/sda: Google PersistentDisk 1
Direct access device specific parameters: WP=0 DPOFUA=0
>> Read write error recovery [rw] mode page [0x1] not found
Caching (SBC) [ca] [0x8] mode page [PS=0]:
WCE 1 [cha: n, def: 1] Write cache enable
RCD 0 [cha: n, def: 0] Read cache disable
>> Control [co] mode page [0xa] not found
>> Informational exceptions control [ie] mode page [0x1c] not found
5.3.3 SSDの管理
Trim
- SSDではファイル削除時に当該ブロックに削除マークをつける
-
そのブロックを再利用するとき、ブロックのデータを削除してから書き込む
- SSDを構成するNANDメモリは「上書き」ができないため
- つまり、削除マークつきのブロックが増えてくるとパフォーマンスが低下していく
-
この問題点を解決するのがTRIM
- ファイルを削除するときブロックのデータを削除する
fstrim
コマンドでtrim有効化
SSDの特徴と運用
- SSDには書き換え回数上限がある
-
長持ちさせるには頻繁に書き込まないこと
- SSD上にスワップ領域を作成しない
noatime
マウントオプションを使用し、iノードの更新時間を逐一更新しないようにする/tmp
等にはSSDではなくRAMディスクを利用する
Column: NVMe
NVMe: Non-Volatile Memory express
- 不揮発性ストレージメディアを接続するための論理デバイスインタフェース規格
- HDD用のAHCI: Advanced Host Controller Interfaceに代わる次世代規格
関連語句
-
M.2
- 接続端子の規格
-
PCI Express
- 接続の規格(バスの規格)
- 転送速度とか全二重がどうのとかを決める
-
NVMe
- PCI Express上で動作する通信プロトコル
5.3.4 iSCSI
iSCSI: internet SCSI
- TCP/IP上でSCSIプロトコルを利用可能にする
-
一般的なネットワーク機器を用いて安価にSAN: Storage Area Networkを構築できる
- cf. ファイバチャネル等は専用のデバイス必要
- クライアント-サーバアーキテクチャ
用語
-
イニシエータ
- クラサバのクライアント
-
ターゲット
- クラサバのサーバ
- IET: iSCSI Enterprise Target, LIO Target等で構築する
-
HBA: Host Bus Adapter
- ネットワークにおけるNICに相当
-
WWN: World Wide Name
- イーサネットにおけるMACアドレスに相当
構築
インストール
ターゲット
sudo yum install -y targetcli
sudo systemctl start target.service
イニシエータ
sudo yum install -y iscsi-initiator-utils
sudo systemctl start iscsid.service
targetcli
を引数なしで実行すると対話的に作業できる
sudo targetcli
targetcli shell version 2.1.51
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
バックストアを作る
iSCSIターゲットのバックエンドのストレージ
いつもどおりループバックデバイスを作っておく
sudo losetup /dev/loop0 ~/fs/loop0
targtecliの対話モードにて
/> ls /
o- / ....................................................................................... [...]
o- backstores ............................................................................ [...]
| o- block ................................................................ [Storage Objects: 0]
| o- fileio ............................................................... [Storage Objects: 0]
| o- pscsi ................................................................ [Storage Objects: 0]
| o- ramdisk .............................................................. [Storage Objects: 0]
o- iscsi .......................................................................... [Targets: 0]
o- loopback ....................................................................... [Targets: 0]
/> cd /backstores/block
/backstores/block> create name=lpic dev=/dev/loop0
Created block storage object lpic using /dev/loop0.
/backstores/block> ls
o- block .................................................................... [Storage Objects: 1]
o- lpic ........................................... [/dev/loop0 (2.0GiB) write-thru deactivated]
o- alua ..................................................................... [ALUA Groups: 1]
o- default_tg_pt_gp ......................................... [ALUA state: Active/optimized]
iSCSIターゲットを作る
IQN: iSCSI Qualified Name
イニシエータやターゲットにつける識別名
/backstores/block> cd /iscsi
/iscsi> create iqn.2020-12.com.example.centos7:target0
Created target iqn.2020-12.com.example.centos7:target0.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
3260番ポートで待ってるらしい
バックストアとiSCSIターゲットの紐付け
/iscsi> ls
o- iscsi ............................................................................ [Targets: 1]
o- iqn.2020-12.com.example.centos7:target0 ........................................... [TPGs: 1]
o- tpg1 ............................................................... [no-gen-acls, no-auth]
o- acls .......................................................................... [ACLs: 0]
o- luns .......................................................................... [LUNs: 0]
o- portals .................................................................... [Portals: 1]
o- 0.0.0.0:3260 ..................................................................... [OK]
/iscsi> cd iqn.2020-12.com.example.centos7:target0
/iscsi/iqn.20...ntos7:target0> cd tpg1
/iscsi/iqn.20...:target0/tpg1> cd luns
LUN: Logical Unit Number. ストレージ内の論理ドライブ番号
/iscsi/iqn.20...et0/tpg1/luns> create /backstores/block/lpic
Created LUN 0.
ACL設定
イニシエータが接続できるようにする
イニシエータ名取得
cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:b59edf54993
これをターゲットのACLで許可してあげる
/iscsi/iqn.20...et0/tpg1/luns> cd ../acls
/iscsi/iqn.20...et0/tpg1/acls> create iqn.1994-05.com.redhat:b59edf54993
Created Node ACL for iqn.1994-05.com.redhat:b59edf54993
Created mapped LUN 0.
設定保存
/iscsi/iqn.20...et0/tpg1/acls> cd /
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
iSCSIイニシエータからターゲットへ接続
とりあえず同一ホストで動かしてる
sudo iscsiadm -m discovery -t sendtargets -p 127.0.0.1
127.0.0.1:3260,1 iqn.2020-12.com.example.centos7:target0
ログイン
sudo iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-12.com.example.centos7:target0, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-12.com.example.centos7:target0, portal: 127.0.0.1,3260] successful.
ブロックデバイス確認
lsblk -S
: SCSIデバイスのみ
lsblk -S
NAME HCTL TYPE VENDOR MODEL REV TRAN
sda 0:0:1:0 disk Google PersistentDisk 1
sdb 1:0:0:0 disk LIO-ORG lpic 4.0 iscsi
ログアウト
sudo iscsiadm -m node --logout
Logging out of session [sid: 1, target: iqn.2020-12.com.example.centos7:target0, portal: 127.0.0.1,3260]
Logout of [sid: 1, target: iqn.2020-12.com.example.centos7:target0, portal: 127.0.0.1,3260] successful.
lsblk -S
NAME HCTL TYPE VENDOR MODEL REV TRAN
sda 0:0:1:0 disk Google PersistentDisk 1
/dev/sdb
がいなくなる