早崎トップ 研究(気候気象) 研究(大気汚染) データリスト Linux Tips Mac Tips

HDD 取扱関連メモ (hysk)

HDD 管理コマンドのメモ

Linux システム管理関連ページから, ハードディスクドライブ(HDD)に関する事柄だけを分離(2016-02-13). HDD の増設・移設やらNASの設置など,記述項目が非常に増えてきたため分離せざるを得なくなった.

HDD 増設・移設関連

 fdisk, mkfs

基本は

$ sudo fdisk デバイス名
  (2TB 以下の場合)
$ sudo parted デバイス名
  (2TB 超の場合)

$ sudo mkfs.xfs -s 4096  パーティション名
  (セクタサイズ 4096 byte に.こっちの方が I/O 速度上がるかもしれない(未確認))
  (ただし,CentOS 5.11 ではマウントできなかった.空き時間のあるときに,CentOS 7.2 でも試したい. checked 2016-03-11)

 ext4形式,容量2TB超

フォーマット対象 HDD を /dev/sde とする:

# parted
(parted プロンプトにて,以下を順次実行)
select /dev/sde
mklabel gpt
mkpart primary ext3 0 -0
quit

# mkfs.ext4 /dev/sde1

 保存メディアとして使う

保存メディア的なHDD利用する場合のフォーマット.新規増設 HDD を /dev/sdd とする:

# fdisk /dev/sdd
 (Linux Ext3 で全領域を使用,つまり /dev/sdd1 を使う.書き込みして終了)
# mkfs.ext3 -j -i 32768 -m 2 /dev/sdd1
 (bytes-per-inode を大きめ,つまりi-node 数の上限値を少なめに)
(reserved-blocks-percentage は2%とし,使用可能領域を多めに設定.ラベル名は付けない)

メモ:

  • 我々が研究で使うデータは,かなり大容量. bytes-per-inode のデフォルト(8192)は,小さすぎる. 言い方を変えれば,i-node 数上限値のデフォルトは大きすぎる. 自分のPCで使っている i-node 数を知りたければ,"df -i" を実行してみるがいい. システム領域を除けば,大部分のパーティションが使用率 1% 未満だろう.勿体ない. ただし,i-node 数はHDDの再フォーマットをしない限り変更できない. このリスクを理解している熟練者のみが使うべき
  • とはいえ... 上記設定により i-node テーブルで無駄になる量を活かしたとしても, 今時のHDD容量を考えれば微々たる量に過ぎない.他人にはお薦めしない. わずか数 MB 〜 数10 MBの HDD 容量が貴重だった時代の名残.私の個人的好みの問題
  • 記録メディア的な使い方なら,-m の数値はギリギリまで小さくしても良いだろう. ゼロはなんとなく気持ち悪いので,2% くらいにしておく.2% という数値に根拠は無い
  • 明確な動機もなくラベル名を付けない. ラベル名でマウントする設定のPCに接続したとき,名前が重複すると何かと厄介だから

  UUID を利用したマウント方法

ラベル名でのマウントもそれなりに便利だが,トラブルも伴う. 具体的には,あるPCで使用していたHDDを別PCに移設する場合には, 同一ラベル名のパーティションが複数検出される可能性がある. これがシステム領域だったりすると,OS起動時にエラーが生じるため面倒.

UUIDを使用したマウントにすれば,重複を気にしなくてよい.

  • UUID を確認するには?

複数の方法がある.

# /sbin/tune2fs -l /dev/sda1 | grep UUID

tine2fs コマンドにより, デバイス sda1 の情報表示からUUIDだけを選択表示.ただし,外付けRAIDはUUID表示できず.

# /sbin/blkid 

接続全デバイスの UUID 表示 (コマンドは /sbin/ 以下にある). ラベル名なども同時に表示される.

なお,ラベル名やUUIDを書き換えても, blkid では最新情報に更新されない(default では,/etc/blkid/blkid.tab を参照するため. パスはCentOSの場合)ので注意.

ls /dev/disk/by-uuid

/dev 以下の情報を直接表示. これだと,外付けRAIDや頻繁に取り付け/取り外しをおこなうUSB接続の外部HDDなどの UUID も確認できる.

  • UUID を確認するには? (case: XFS filesystem)

Use xfs_admin command (Bourne shell script. For CentOS, you can find it under /usr/sbin/)

# xfs_admin -u /dev/sdc1
  • UUID を消去・設定するには?
    • クリアしたいとき: tune2fs -U target_UUID clear
    • 設定したいとき
UUID 生成
tune2fs -U random /dev/sda1 または tune2fs -U time /dev/sda1 を使う. 乱数で生成するか,時刻ベースで生成するか,だけの違い. このほかにも, uuidgen というコマンドも使える.
  • UUID 使ったマウント

例えば /etc/fstab には下記のように書き込む:

UUID=1c0653cd-e897-xxxx-yyyy-55zzaabbccdd  /data  ext3    defaults,noatime  1  2

mount 時には,-U を使う: mount -U /mnt_point

/etc/fstab に書いてもいいが,autofs と組み合わせて 自動マウント・アンマウントという方法も可能. どの方法を使うかは,対象計算機の運営方針や管理者の好み次第で異なるだろう.

(/mnt 以下にオートマウントさせる場合)
$ cat /etc/auto.master
#
# $Id: auto.master,v 1.3 2003/09/29 08:22:35 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
/misc   /etc/auto.misc --timeout=60
/mnt    /etc/auto.mnt
$ cat /etc/auto.mnt
#
# $Id: auto.misc,v 1.2 2003/09/29 08:22:35 raven Exp $
#
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage

usb01           -fstype=vfat,rw,user,sync,umask=000     :/dev/disk/by-uuid/9999-aaaa

  • 行末尾の "9999-aaaa" 部分に対象となるHDDのUUIDを記載すればよい
  • この設定では,マウントは自動でもアンマウントが自動でない. アンマウントはマウントしたユーザ自身が手動でおこなう事を前提としている
  • autofs でも良いのだが,sudo により mount/umount を 特定のユーザないしユーザグループに割り当てるのも良かろう
  • 上記を利用して 「ユーザ個別のバックアップ用マウントポイントを割り当てる」 という方法も可能になる. ユーザがあまりにも多いところでは使いにくい. UUIDのリストを作るだけで疲れそうだし,使用する HDD の数が増えると, すぐに運用が破綻するだろう. 小人数の利用で,使用する HDDが(ある程度)固定されている場合なら,それなりに有効に使えそうだ. 大学の研究室共通サーバ上にある個人データを,ユーザである学生さんが自分自身でバックアップする, などの用途になら向いているかも

 swap 関連

最近は設定しないこともあるが,覚書として書いておく. なお,私個人が研究で使うLinuxでは,2010年頃よりswapを設定していない. swap設定してない事が原因で Linux PC に障害が発生したことは,約5年間で一度もない(と思う).

  • swap 領域のデバイス名(/dev/sd*)確認

fstab の記述がラベル名になってると,デバイス番号がわからなくなる.swap の切り離しなどをしたくなった時に調査.

$ ls -l /dev/disk/by-label
  • swap の切り離し・追加

設定済みの swap 領域のラベル名変更したい時に.swapoff にて一度システムから切り離し. mkswap にてラベル名を変更.

# mkswap -L main_swap /dev/sda8

もし,(可能性は低いが)swap 追加の必要に迫られたら, swapon などを参照. そんな時には,システムディスクとは別のディスクに設定する, などをすると良いかもしれない.

  XFS ファイルシステムの利用

1パーティション16TB 超となるファイルシステムを作成するには,Linux では ext4 か XFS を使う.ext4 は,記述時点のCentOS (v5.3; kernel 2.6.18)では標準サポートされていない. ext4 のリリース(kernel 2.6.19 以後; 2006年11月頃?)から日が浅く, 十分に洗練されていないのだろう.まだバグも多いようだし,安定性を最重要視するサーバで使うのは不向きだろう. 現時点(2011年2月)では XFS を利用することにする.

  • xfs を使うための準備
    • 今どきのカーネル(普通は 2.6.x 系)は,標準でXFS対応なので,気にしなくて良い
    • xfsprogs をyum インストールしておく
# yum search xfsprogs
# yum install xfsprogs xfsprogs-devel
  • 使用例
    • ファイルシステム作成

parted を使用した作成が必要. 下記は Dell PowerEdge R300 に接続した 2U SCSI RAID (2TB HDD * 12台, RAID-5 & standby HDD *1 の場合)

# /sbin/parted
GNU Parted 1.8.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb                                                  
Using /dev/sdb
(parted) mklabel gpt                                                      
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
parted: invalid token: gpt
Yes/No? yes                                                               
New disk label type?  [gpt]?                                              
(parted) mkpart primary xfs 0 -0                                              
(parted) print                                                            

Model: IFT A12U-G2421 (scsi)
Disk /dev/sdb: 20.0TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  20.0TB  20.0TB               primary       

(parted) quit

 mkfs -t xfs /dev/sdb1
 または
 mkfs.xfs /dev/sdb1
  • マウント
mount -t xfs /dev/<device_file> /<mount_point>
(例: mount -t xfs /dev/sdb1 /data)
自動マウントするには,/etc/fstab に書き込んでおく.ファイルシステム名をxfs にするのを忘れずに.

 XFS ファイルシステムのデフラグ

XFS ファイルシステムを長期利用し,かつファイルの書き換えが頻繁な使い方をしているようなら, ファイルシステムが断片化し,ついには体感できるほどに I/O が遅くなるだろう. 私の場合,約1年半で我慢できなくなった.

そんな時には,断片化情報を確認した上で,デフラグをすればよい. 情報確認用コマンドは xfs_db, デフラグコマンドは xfs_fsr である

# xfs_db -c frag -r /dev/sdb1
actual 797927, ideal 790905, fragmentation factor 0.88%
# xfs_db -c frag -r /dev/sdc1
actual 4962743, ideal 4526164, fragmentation factor 8.80%
# xfs_db -c frag -r /dev/sdd1
actual 2336488, ideal 2235416, fragmentation factor 4.33%

上記は実際に使っていたXFSファイルシステムでの実行例. 私の場合,上記の /dev/sdc1 のアクセス速度低下が我慢できなくなった. xfs_fsr の実行例は下記./etc/mtab に記録されてる XFS ファイルシステムをデフラグする. デフラグ時間は default だと2時間.下記では6時間 (21600 seconds) としている.

# xfs_fsr -t 21600

ある特定のファイルシステムのみに限定したければ,/etc/mtab をコピー,該当ファイルシステムだけ 記録されたテキストファイルを作成し,それを読み込むようにすればよい (xfs_fsr -m ファイル名) こういうシステムメンテナンス系のコマンドは,cron.daily とか root の crontab などに 追加しておくとよいだろう.

# cp /etc/mtab target_xfs.txt
# vi target_xfs.txt
(対象とするXFSファイルシステムの行だけ残す)

# xfs_fsr -t 21600 -m target_xfs.txt

 ext3 -> ext4 変換

そろそろ ext4 を標準ファイルシステムに使う distribution も増えてきた. また,ext4 の方が ext3 より I/O がかなり早いようなので, そろそろ移行してみようと思う(記述日: 2012-05-10).

$ sudo tune4fs -O extents,uninit_bg,dir_index,flex_bg -m 1  /dev/sdb1
$ sudo e4fsck -vfDC0 /dev/sdb1
(TBオーダーのHDDだと,数十分〜1時間くらいかかる,かも.時間は未計測なので当てにならない)
$ sudo vi /etc/fstab
(/dev/sdb1 のファイルシステム形式の指定を ext3 から ext4 に変更)
$ sudo mount -a

ext4 の取扱い前に,e4fsprogs を追加インストールしておくこと

$ sudo yum install e4fsprogs e4fsprogs-devel

ただし,接続しても 2TB 超のハードディスクだと 正確なサイズを認識できないこともある. ソフトウェア的に解決できる可能性もあるが,少々古い機材を使っていると, どうあがいてもダメな事もある.

 便利なコマンド

HDD 取扱の際に,知ってると助かる豆知識的な事柄. 知らなくても本質的な問題にはならない. しかし,1台のPCに対してHDDを1,2個程度増設するなら知らなくてもいいことでも,複数台のPCで複数個のHDDを入れ替えたりするようになると必要になる知識もある.

 HDDのシリアルナンバーを調べるには?

Seagate HDD の firmware 不具合問題が出たときに,PCのケースを開けずに調べたかった. 以下のコマンドで調べられる:

hdparm -I /dev/sdc | grep "Serial Number"
Seagate HDD firmware 不具合問題のドキュメント
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207931
対象の Serial Number が不具合を持つ該当品か否かを判定するサイト
https://apps1.seagate.com/rms_af_srl_chk/

追記: HDD serial number を調べる利点

  • SATA 接続 HDDを交換するときに必要になることがたびたびあった
  • 特に,同一メーカ・同一型番のHDDを複数台搭載したLinux機で HDDの一部を交換したい場合に困る. PCのケース開けて作業始めてから,「どれを交換するんだっけ?」という事を何度か経験. 交換したい HDD のデバイスレター (/dev/sd*)を知っていても, 交換対象のHDDを物理的に (目で見て) 特定できない.
  • HDD には,どのメーカであれシリアルナンバーが必ず記載されている(はず). HDD交換作業の前に,Linux OS 上にてシリアルナンバーを控えておけば, 迷わずに済む
  • SATA 接続になってから,デバイスレター (/dev/sd*) はマザーボード上の SATAポート番号の順序とは一致しなくなったことが原因. 昔の SCSI HDD なら,HDD それ自体に SCSI ID 設定するディップスイッチを搭載していたので, HDD そのものを見れば OS で認識するデバイスと対応づけるのは容易だった. IDE 接続でも,primary master/slave, secondary master/slave を HDD そのものに設定するディップスイッチがあったので,SCSI と同様,見ればわかった. SATA 接続になって,利点はかなり増えたが,唯一の欠点が 「目で見てもデバイスと対応付け出来なくなった」という点.

 ディスク操作関連コマンド

ラベルの確認,設定,消去

EXT2/EXT3 ファイルシステムでは,ラベル名は最長16文字まで. 16文字を超過した分は切り捨てられる. 最近はラベル名でのマウントをしない方針にしているが, ディスクの用途に合わせてラベル名付けを継続している. UUIDの情報はマウントには便利だが, UUIDリストだけでは用途が不明.自分が混乱する.

  • ラベル名の確認

デバイス名のみ指定,引数無しでラベル名を表示

e2label デバイス名

# e2label /dev/sdc1
  • ラベル名の設定

e2label デバイス名 ラベル名

# e2label /dev/sdc1 HOGE
デバイス sdc1 に HOGE というラベルを付ける.既存のものがあれば上書きされる
  • ラベル名の消去

e2label デバイス名 ""

# e2label /dev/sdc1 ""
空白で上書き,ってことだろう

 論理ボリューム logical volume

私の個人的趣味の問題だが,複数ディスクを(仮想的に)一つのディスクに見せかける などの論理ボリュームは極力使いたくない.

自分がよく知らないから,というのが第一の理由. 第二の理由は,トラブルからの復旧が困難であること. 第三の理由は,第二の理由とも重複することだが, (大容量すぎると)バックアップを取りにくい,という点.

# fdisk /dev/sdc1
(Use command "t". filesystem partition type must set to "8e" (Linux LVM))
# fdisk /dev/sdd1
(same as above)

# pvcreate /dev/sdc1
# pvcreate /dev/sdd1
# pvdisplay
(End of PV creation. Next, we tried to make logical volume group.)

# vgcreate WORK /dev/sdc1
(hoge)
# vgdisplay
(hogehoge)
# vgchange -a n WORK
# vgremove WORK
(Remove volume group "WORK". After that, we make same logical volume group using two HDD!)
# vgcreate WORK /dev/sdc1 /dev/sdd1
# vgdisplay WORK
(hogehoge)
# lvcreate -L 2730G -n lv1 WORK
(Edit /etc/fstab. Mounted by UUID)
# mount -a

 速度測定

読み書きの速度測定テスト. ベンチマークテストには興味ない. しかし,興味がないゆえに,いつもその方法(コマンド実行例)を忘れる. 一般的な速度計測手段として,手元に記録しておいてもいいだろう.

NFSマウント時の最適パラメータ(ex. rsize, wsize など)を 定めるための動作試験などにも使えるだろう.

$ dd if=/dev/zero of=./test count=1000 bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 22.9694 s, 45.7 MB/s
  (NFS4 over 1Gbps LAN; Thecus N7710, 6TB * 6-disk (+1spare) XFS, RAID5, checked 2016-02-13)

$ dd if=/dev/zero of=./test count=1000000 bs=1024
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 23.6812 s, 43.2 MB/s
  (NFS4 over 1Gbps LAN; Thecus N7710, 6TB * 6-disk (+1spare) XFS, RAID5, checked 2016-02-13)

ただし,上記の計測は並行してデータコピーを実施してる条件での計測.

参考: SATA3接続,内蔵HDDの場合(単独プロセスによる計測.並行書き込みなどの別プロセスなし)

$ dd if=/dev/zero of=./test count=1000000 bs=1024
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 5.55075 s, 184 MB/s
  (SATA3-connection; HGST Deskstar NAS HDN726060ALE610; XFS, checked 2016-02-13)

$ dd if=/dev/zero of=./test count=1000 bs=1048576
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.809 s, 218 MB/s

計測条件が同一ではないので,本来は単純比較してはいけない. 条件違いを承知の上で計測数値だけをみて NFS4 と内蔵HDDを比較すると,書き込み速度は約4倍程度異なる. 10Gbps LAN だったら,もっと速くなるだろうか? NAS 側の並行処理プロセスなしの条件では,どうなる?

 ファイルシステム

「このハードディスク,どのファイルシステムでフォーマットしたっけ?」 という時に使う. 既にマウント済みなら,df の -T オプションがわかりやすい.

$ df -hT
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sdf2                 xfs        31G  7.0G   24G  23% /
devtmpfs                  devtmpfs  7.7G     0  7.7G   0% /dev
tmpfs                     tmpfs     7.7G   80K  7.7G   1% /dev/shm
tmpfs                     tmpfs     7.7G   26M  7.7G   1% /run
tmpfs                     tmpfs     7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/sde1                 xfs       894G  199G  695G  23% /data/invariant02
/dev/sdf3                 xfs        14G  1.8G   13G  13% /var
/dev/sdf8                 ext4      117G   48G   63G  44% /invariant
/dev/sdf6                 ext4       21G   13G  6.6G  67% /usr/local
/dev/sdf7                 xfs        11G   34M   11G   1% /tmp
/dev/sdd1                 xfs       5.5T  4.0T  1.6T  72% /data/work
  :
  :

管理するPCやHDDの数が増え,かつ時間が経過するに従い,いろいろなことを忘れる. 私のようにズボラかつたまにしかシステム管理しないような人種は,メモすら忘れる. 私の場合,数年前に EXT4 と XFS のどちらをデフォルトで使うべきか迷っていたため, その名残りで両方のファイルシステムが混在した状況にある.

普段は特に意識しなくても問題ない. ただ,ディスクトラブル発生時の fsck かけたい時に少しだけ困った覚えがある. ならば,普段からメモしておけばよい. 手動でやるのは面倒かついざという時に情報がない事が多いなので, cron による自動バックアップスクリプトあたりにでも仕込んでおくのが得策. See also Linux 個人設定 # /etc/cron.daily

外付けHDD (例: データをオフライン保存したHDDを裸族のお立ち台使って接続とか)の場合, 取り付け時のデバイスレターさえ分かれば,fdisk -l (GPT を使ってるようなら parted) にて表示できる.

$ dmesg | less
  (HDD接続後にデバイスレター (/dev/sd?) を確認.接続直後なら,最後の部分に表示されてる)


  (128GB SSD の場合; 2009年頃に Linux sysytem drive として使ったもの)
$ sudo fdisk -l /dev/sdd

Disk /dev/sdd: 128.2 GB, 128228261888 bytes
255 heads, 63 sectors/track, 15589 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1   *           1          51      409626   83  Linux
/dev/sdd2              52       15525   124294905   83  Linux
/dev/sdd3           15526       15589      514080   82  Linux swap / Solaris
  (Id 部分が 83 なら ext3, 82 なら swap 領域)


  (6TB HDD の場合; 2TB 超過してるのでGPT使い XFS でフォーマットしてある)
$ sudo fdisk -l /dev/sdc

WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.
  (GPT を使ってるので,fdisk だと見えん,parted を使え,と文句を言われた)

WARNING: The size of this disk is 6.0 TB (6001175126016 bytes).
DOS partition table format can not be used on drives for volumes
larger than 2.2 TB (2199023255040 bytes). Use parted(1) and GUID 
partition table format (GPT).


Disk /dev/sdc: 6001.1 GB, 6001175126016 bytes
255 heads, 63 sectors/track, 729601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1      267350  2147483647+  ee  EFI GPT
  (GPT 使った何かだよ,としかわからない)


$ sudo parted
GNU Parted 1.8.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdc                                                  
Using /dev/sdc
(parted) print                                                            

Model: ATA HGST HDN726060AL (scsi)
Disk /dev/sdc: 6001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  6001GB  6001GB  xfs          primary       

(parted) quit                                                             
Information: Don't forget to update /etc/fstab, if necessary. 

 NAS

NAS を購入,運用開始(2016-02-10). Thecus N7710 (HDD: 7個搭載),6個のHDDをRAID5 とし,1個は hot spare にて運用.

default では,private LAN 固定IP (192.168.1.100)で起動している.

結論としては,NFS4 を使ったマウントで運用することにした.

 NAS のマウント (NFS編)

先に Samba でのマウントを試したが,書き込み速度がえらく遅かったので使用停止. NFS を使ったマウントへ変更.

 常時マウント (/etc/fstab 使用)

  1. N7710 の web管理画面の左メニュー "Storage" から "Share Forders" を選択.
  2. 右側のメイン画面でマウントしたいディレクトリ(ここでは,NAS_Public)を選択, フォルダ画面上部の "NFS" タブを押すと "Configure NFS Share" の画面がポップアップで開く.
  3. NFSマウントするクライアント(ここでは,IP=192.168.1.21)からのアクセス許可(Writable)を与える.
  1. NFS クライアント側で,必要なサービス (rpcbind, nfslock)を起動
  2. mount.nfs4 にて手動マウント,正常なマウント & 読み書きできることを確認
  3. /etc/fstab に書き込み,起動時にマウントさせる
$ sudo mount -t nfs4 192.168.1.100 /mnt/raid01
mount.nfs: remote share not in 'host:dir' format
(NASのディレクトリを指定していなかった.失敗.)

$ sudo mount -f nfs4 192.168.1.100:/NAS_Public /mnt/raid01
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
(NFSクライアント側で,必要なサービスが稼働していなかったらしい...)

$ sudo systemctl start  rpcbind
$ sudo systemctl enable rpcbind
$ sudo systemctl start  nfslock
$ sudo systemctl enable nfslock

$ sudo mount -f nfs4 192.168.1.100:/NAS_Public /mnt/raid01
mount.nfs: access denied by server while mounting 192.168.1.100:/NAS_Public
(やはりダメ.何故だろう... と考える.)
(そして,NAS 側で export に相当する設定をしていなかったことに気付く.アホや)

$ sudo mount -t nfs4 192.168.1.100:/NAS_Public  /mnt/raid01
(成功,/etc/fstab に書き込み)

$ sudo vi /etc/fstab

 autofs 使用

N2100 (ここでは 192.168.1.52 とする)を使用.1.5TB * 2台のRAID0にて. 今となってはかなり古いが,データ置き場としてまだ使える(2016-03-12).

常時稼動させてるわけじゃないので,/etc/fstab 使うのは不適当. ここでは autofs を使い,アクセス要求があった時のみマウントするようにした. 個人で使用する場合の設定なので,複数人で使う時には所有者情報などの設定に注意.


N2100 での設定.

  1. NFS daemon のモジュールをダウンロード. DL site; メーカサポート外の「野良module」なので,使う時は自己責任で.
  2. N2100 の web管理画面の上部メニュー "System" から "Module Mgmt" を選択. DLしたmoduleをインストール. なお,N2100 の再起動時には,手動で "Enable" する必要あり.
  3. "Name" 部分の "[Thecus]NFSD" をクリックして設定. マウントするディレクトリ(/data)を記載,アクセス制限設定(subnet 部分: 192.168.1.0/24), Map all uid to 部分は,"No UID mapping" にしておく.
  4. N2100 の web管理画面の上部メニュー "Storage" "Folder" にてディレクトリ(/data)作成. Linux側でマウントするときには,宛先が /raid/data になるので注意.

マウントするLinux機(NFSクライアント; CentOS 7.x)側での設定

  1. NFS client 関連のパッケージ (rpcbind)を用意.daemon を稼働させる. 既に入っていて稼働してたら,この作業はスキップ.
  2. NFSマウントするクライアントでマウントを手動実行,マウントできることを確認.
  3. (ここでは autofs 使う場合を記す) autofs 設定の修正,追記.
$ sudo yum -y install nfs-utils
$ sudo systemctl start rpcbind
$ sudo systemctl enable rpcbind
$ sudo mount -t nfs 192.168.1.52:/raid/data  /mnt/NAS
  (N2100 上では /data と設定してあるが,マウントするときには /raid をつける)

$ sudo yum -y install autofs
$ sudo systemctl start autofs
$ sudo systemctl enable autofs

$ sudo vi /etc/auto.master
--- ここから
  (末尾に下記を追加.ダイレクトマップを使う)
/-  /etc/auto.NAS
--- ここまで

$ sudo vi /etc/auto.NAS
--- ここから
  (ファイルにマウントポイントやオプションの情報を追加)
/mnt/NAS  -fstype=nfs,rw,rsize=8192,wsize=8192  192.168.1.52:/raid/data
--- ここまで

$ sudo systemctl restart autofs
  (設定変更したので restart)


参考web

  • NFSクライアントの設定 (CentOS 7): 自分が行ったのもほぼこの手順通り. 作業手順を確認するだけなら,このサイトが最も簡潔に書いてあると思う. たびたびお世話になってます.
  • automount の設定: ダイレクトマップの意味など.
  • Thecus NAS download center: これらNAS製品のメーカ Thecus (しーかす)のサイト. 私見ですが,ここの製品は信頼できます.

 NAS のマウント (Samba編)

Samba と NFS どちらでマウントすべきか決め兼ねたので,取り敢えず Samba を使ってマウントする方法をテスト.

後になって思うが,なぜ最初から NFS にしなかったのか疑問. おそらく,NAS のweb管理画面で Samba 関連の記述が最初に目に入ったので, 特に根拠無くそこから試したというのが実情だろう.

結局下記の方法は使う必要ないが,せっかく試したので記録しておく.

Samba によるマウントするための手順は下記:

  1. NAS へのアクセス用ユーザ(hogehoge)を用意.N7710 のwebインタフェース管理画面にて,事前にユーザ追加しておく
  2. smbclient にて,NAS 上のマウント対象ディレクトリ名を特定
  3. mount.cifs にて,対象ディレクトリのマウント,テスト実行(手動mountテスト)
  4. 起動時に自動マウントされるように,/etc/fstab に追記(自動mountテスト)
$ smbclient -L 192.168.1.100 -U hogehoge
Enter hogehoge's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.19]

  Sharename       Type      Comment
  ---------       ----      -------
  USBCopy         Disk      
  USBHDD          Disk      Used for external USB HDDs only.
  eSATAHDD        Disk      Used for eSATA HDDs only.
  NAS_Public      Disk      
  _NAS_Module_Source_ Disk      
  iTunes_music    Disk      
  IPC$            IPC       IPC Service (N7710)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.19]

  Server               Comment
  ---------            -------
  N7710                N7710

  Workgroup            Master
  ---------            -------
  WORKGROUP            
$ sudo mkdir  /mnt/raid01
$ sudo mount.cifs //192.168.1.100/NAS_Public  /mnt/raid01 -o user=hogehoge
Password for hogehoge@//192.168.1.100/NAS_Public:  ********
$ df
Filesystem                   1K-blocks       Used   Available Use% Mounted on
/dev/sdf2                     32240252    7079036    25161216  22% /
devtmpfs                       8031812          0     8031812   0% /dev
tmpfs                          8046484         80     8046404   1% /dev/shm
(中略)
/dev/sdh1                    937233624  208350148   728883476  23% /mnt/esata02
//192.168.1.100/NAS_Public 29287251968   14286924 29272965044   1% /mnt/raid01

約28TB のディスク領域をマウントできた(マウント場所: /mnt/raid01).

自動マウントする場合,ユーザ名やパスワードを /etc/fstab に書くこともできるが,それだとセキュリティ上好ましくない. 別ファイルに記載して,他者からは読めないようにプロテクトをかける.

$ cat ~/local/doc/raid01_auth.txt
username=hogehoge
password=hage1234
$ cat /ets/fstab
(fstab の末尾などに追加.ここでは,Samba ファイルシステムのみ表示)
//192.168.1.100/NAS_Public  /mnt/raid01  cifs  credentials=/home/hogehoge/local/doc/raid01_auth.txt,defaults   0   0

mount オプションとしては,"noatime" を付けないこと.これを付けてると,エラーが出てマウントされない(dmesgにて確認できる).

更新履歴

更新日 内容
2016-02-13 NAS ボックス(Thecus N7710)の取扱に関する記述の追記がきっかけで, 各種管理コマンドのメモから分離. NFS および Samba によるマウント方法を追加. 28TB (RAID5)が利用可能. 約20年前(私が修士の大学院生だった頃)と比べ,使えるディスクサイズが 10^3 から 10^4 倍になった. すごい時代になったものだ...
2012-05-10 EXT4 への変換に関する記述. この頃は,XFS と EXT4 のどちらを使うか迷っていた. 特に強い根拠なしに,何となく EXT4 を使い始めた.