タグ別アーカイブ: Ubuntu

NFSはアンダースコアのあるexportsをマウントできない?

こんにちは、岡田洋一です。

最近は引き続いてファイルサーバの移行を行っています。
さてそのファイルサーバではNFSを提供しています。
ローカル環境の各ホストに対して同じホームディレクトリを提供してくれる非常に心強い存在です。
NFSも少し前にバージョンが3から4になり、パフォーマンスの向上やUID、GIDを揃えるidmapdとの連携など便利になったりしました。

さてそんなNFSなのですが、今回新サーバに移行するにあたってうまくマウントできない症状が起きました。

shell> sudo mount nfs.l2tp.org:/path_service /mnt/path_service
mount.nfs: Connection timed out

なにやらエラーが起きてますね。
NFSではexportsというファイルに設定を書いて色んなディレクトリを他のホストからマウントすることができるのですが、うまくいきません。
実はこれ、他のディレクトリではうまくいっていたんですね。でもこのディレクトリだけうまくいきません。

今回設定したのは下記の通りです。サーバクライアントともにUbuntu 14.04LTSです。

NFSサーバにて、fstabでbindマウントを行う
shell> grep service /etc/fstab
/pool/path_service       /exports/path_service  none    bind              0    0

次にexportsに記載
shell> /exports/path_service 192.168.1.0/24(async,nohide,no_subtree_check,no_root_sq
uash,rw)

最後に関連サービスの再起動などなど
shell> sudo mount -a
shell> sudo service nfs-kernel-server restart
shell> sudo exportfs -ra


クライアント側にてマウントさせる
shell> sudo mount nfs.l2tp.org:/path_service /mnt/path_service
mount.nfs: Connection timed out

うまくいかないです。

もう一度言いますが他のディレクトリはうまくマウントできているのです。このディレクトリがダメなのですね。
うまくいっている所と見比べてみると、ディレクトリ名にアンダーバー、アンダースコアがあることが考えられます。

この後実際にアンダーバーを省いたものでマウントさせてみると… ちゃんと動きました!

NFSはアンダーバーを含むファイル名をマウントする事ができないのでしょうか?

少しググってはみたのですがそれらしき記述は見当たらなくて、これまでも聞いたことが無くて…うーん。

もしどなたかご存じの方がいらっしゃった場合には教えてください!

追記:
ちなみにクライアント側でマウント先ディレクトリにアンダーバーがある場合には大丈夫でした。

shell> sudo mount nfs.l2tp.org:/pathservice /mnt/path_service

この場合には通るのでexportsでアンダーバーを許可していない、とかなのでしょうか。
またexportsにアンダースコア含みでディレクトリを記載してもマウント時にアンダースコア無しでマウントできてしまいました。
アンダーバーは無視されるのかな?

RAIDで作成したmdをフォーマットしてマウントするまで

こんにちは。

先日ubuntuでraidを構築したんですが、まだマウントもしていなかったのでマウントしてみます。

まずいきなり問題が発生です。
前回raidを作成するときにmd0というデバイス名で作っていたんですが、その後の何度かの再起動で番号が変わってしまったようです。

shell> ls /dev/md*
/dev/md127

/dev/md:
bush:0

よくはわからないですがmd127というデバイスがあります。これがどうやら先日つくったraidのようです。念のためmdadmコマンドで確認しておきます。

sudo mdadm -D /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Fri Sep 26 09:19:13 2014
     Raid Level : raid5
     Array Size : 14650675200 (13971.97 GiB 15002.29 GB)
  Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
   Raid Devices : 6
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Fri Oct  3 15:14:31 2014
          State : clean
 Active Devices : 6
Working Devices : 6
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : bush:0  (local to host bush)
           UUID : c3db0680:1c5c7986:c90a298a:96a9efb0
         Events : 99

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd
       4       8       64        4      active sync   /dev/sde
       6       8       80        5      active sync   /dev/sdf

ちなみに-Dは–detailと同じ意味らしいです。
ちゃんと/dev/sd{a,b,c,d,e,f}で構成されているraidのようですね。
なぜ番号が変わったかは…わかりません!なぜなのでしょうか。

と思ったら参考にしたサイトに「md*の番号は変わる」との記載がありました。なるほど!為になります。

さてこのmdをXFSでフォーマットしてマウントしていきます。
とはいってもmkfsでファイルテーブル(?)を書き込んでやるだけです。

shell> mkfs.xfs -f /dev/md127
meta-data=/dev/md127             isize=256    agcount=32, agsize=114458496 blks
         =                       sectsz=4096  attr=2, projid32bit=0
data     =                       bsize=4096   blocks=3662668800, imaxpct=5
         =                       sunit=128    swidth=640 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

これで完了です。
試しにマウントしてみます。

shell> sudo mkdir -p /mnt/hoge
shell> sudo mount -t xfs /dev/md127 /mnt/hoge

バッチリですね!

最後に自動マウントをさせてみたいと思います。どうやらmd*の番号の部分が変わってしまうらしくUUIDでマウントさせるといいらしいです。

UUIDの確認はtune2fsというコマンドでできるらしいのですが、このコマンドはファイルシステムがext2/3/4じゃないとだめらしいです。
今回のファイルシステムはxfsを使っていたので他の手段になります。

ググってみるとblkidというコマンドでできるようです。これで出力されるUUIDをマウントさせます。

shell> sudo umount /mnt/hoge
shell> blkid /dev/md127
/dev/md127: UUID="f8a0fa74-9e9d-48b2-a497-e593a6444572" TYPE="xfs"
shell> sudo vi /etc/fstab
...省略...
UUID=f8a0fa74-9e9d-48b2-a497-e593a6444572  /mnt/hoge      xfs     noatime 0           0
shell> sudo mount -a
shell> mount -v
...省略...
/dev/md127 on /mnt/hoge type xfs (rw,noatime)

バッチリですね!

今回参考にしたサイトです。
[Linux] 外付けUSBハードディスクをまるごとxfsでフォーマットする方法 – SumiTomohikoの日記

mdadmを使ったRAIDの構築 – 前人未踏の領域へ

raid – Ubuntu Server 12.04, MDADM device number suddenly changes? – Ask Ubuntu

Ubuntu 14.04 LTS でRAID5を構成してみた

宅内のNASがそろそろ一杯になりそうなので半年前程から構想していたファイルサーバの新設に着手した。

構成としては3TB*6なHDDでUbuntu 14.04で動かす。
サービスとしてはNFSを中心にSamba、FTPなどのファイル関係のサービスを立てる予定。

ちなみにOSの選定はFreeNASと迷ったんだけれどFreeNAS(というかFreeBSD)がなかなかNFSv4を取り入れてくれないことと、湯バード先生からの「Ubuntuでやれば簡単だよそんなん」という強い後押しをもらって助けてもらいながら着手。

 

というわけでまずはベースとなるRAIDの構成。

一応ファイルサーバなので冗長化構成にしようとおもっていて、3TB*6をRAID5かRAID6かに。もともと2TBをFreeNAS 0.7系のRAIDZで運用している。で、今回の新設&リプレイスでも冗長化をしたいなぁ、と。ちなみに前回のファイルサーバでは幸いな事に障害は発生せぬまま終わりそう。

で、いままであまり気にせずにRAIDとかやってたんだけれど、6台だと容量の効率とか耐障害性とか色々あるなぁということで、RAIDについて調べてみた。

下記のサイトが非常にわかりやすくまとめてくれていた。


HDD6台でRAID5構成
(0.03^6)+(0.03^5*0.97*6)+(0.03^4*0.97^2*15)+(0.03^3*0.97^3*20)+(0.03^2*0.97^4*15)=0.01245587
→障害確率1.25%(3台構成の時の5倍!)
※HDD有効利用率は83%

HDD6台でRAID6構成
 (0.03^6)+(0.03^5*0.97*6)+(0.03^4*0.97^2*15)+(0.03^3*0.97^3*20)=0.000504418
 →障害確率0.05%
 ※HDD有効利用率は67%

RAID構成のHDDの障害発生率一覧 | Asterisk Staff Blog

 

なるほど、RAID6(HDD二台を冗長化用)とすると障害発生率がかなりひくくなる、ということらしい。

でも3TB*6でも12TBしか容量を使うことができず、容量の実効効率が…、ということでRAID5を選択。

 

さてではRAIDの種類も決まったことで早速RAID5の構築へ。

下記のサイトを参考にしながら取り組みました。

Ubuntu mdadm その54 – RAID 6アレイを作成する基本的なコマンドの例・作成したアレイの確認と利用 – Ubuntu kledgeb

今回の構成ではUSBメモリにOSを入れてある。HDD等の構成は以下の通り

HDD1 /dev/sda
HDD2 /dev/sdb
HDD3 /dev/sdc
HDD4 /dev/sdd
HDD5 /dev/sde
HDD6 /dev/sdf

USBメモリ(ブートディスク) /dev/sda

この中でHDD1〜6をRAID5にする。

shell> sudo mdadm --create /dev/md0 --level=raid5 --raid-devices=6 --chunk=512 --verbose /dev/sd{a,b,c,d,e,f}

これでraidが構成される。確認は/proc/mdstatを見る

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdf[6] sde[4] sdd[3] sdc[2] sdb[1] sda[0]
14650675200 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/5] [UUUUU_]
[==========>..........] recovery = 54.5% (1598589964/2930135040) finish=219.0min speed=101293K/sec

unused devices: <none>

この状態でRAIDの同期中なのであとは同期完了まで待てばOK!

svnで結果をたくさん入れたかった

Ubuntu Serverのアップグレードを行ったんだけど、apacheのconfファイルが色々と変わってて、それに伴って/etc配下をsvnに入れてた分の更新作業を行った。

Ubuntu Serverは12.04から14.04にアップグレードしたんだけれど、一つ前の13.10からapacheのconfのルールなどがちょくちょくかわったみたいで更新作業が結構発生した。

また標準で(?)くっついてくるモジュールが減ったらしく、前のバージョンでは存在したmodsのconfとloadファイルが無くなっていた。

自分は利用するconfファイルをすべてsvn管理下においているんだけど、アップグレードでaptによって削除されてしまったファイルがいくつか。

shell> cd /etc/apache2/
shell> svn st
...(前略)...
? mods-available/authn_core.load
! mods-available/authn_default.load
? mods-available/authn_socache.load
? mods-available/authz_core.load
? mods-available/authz_dbd.load
! mods-available/authz_default.load
? mods-available/buffer.load
? mods-available/cache_disk.conf
? mods-available/cache_disk.load
? mods-available/cache_socache.load
! mods-available/cern_meta.load
? mods-available/data.load
? mods-available/dialup.load
...(後略)....

svn stしてみると出てくるファイルのうち、?は新規に追加されたファイル、!は削除されてしまったファイル。
これらのファイルをsvn del、svn addしてみる。
手動でひとつひとつ追加、削除するのは大変なのでsvn stからcutをつかってxargsにわたしてみる。
svn stの!とか?からファイル名までは空白8文字で、cutに行頭から9文字を削除するオプションがあるらしくてそれをつかう。

shell> svn st | grep ! | cut -c9- | xargs svn del
D authn_default.load
D authz_default.load
D cern_meta.load
D disk_cache.conf
D disk_cache.load
D ident.load
D imagemap.load
D mem_cache.conf
D mem_cache.load
D version.load
shell> svn st | grep \? | cut -c9- | xargs svn add
A cache_disk.load
A cache_socache.load
A data.load
A dialup.load
A echo.load
...(後略)...

</pre>

というわけでたくさんのファイルを一括して処理できました。

addの方ではハテナマークをエスケープするためにバックスラッシュを追加した。またファイル名の途中にハテナやビックリが入っていると引っかかりそうなので、行頭から(-e ‘^!’)を入れた方がいいかも。

Ubuntu 11.10でmysql-workbenchがインストールできない

Ubuntu 11.10にmysql-workbench 5.2.35を入れようと思ったら11.04のパッケージしか無い。まぁ入るだろうと思って

sudo dpkg-i mysql-workbench-gpl-5.2.35-1ubu1104-amd64.deb

して、要求されるパッケージを入れたけど、ダメ。
ソースから入れようと思ってconfigureで要求されるライブラリを一つ一つ入れて行ったけど、Cの構文エラーは出るし宣言エラーは出るし全然通らない。

で、数時間の探し回ったら パッチ
コンパイル方法の解説を発見
手順どおりにソースを展開したディレクトリで

% sudo apt-get install build-essential autoconf automake libtool libzip-dev libxml2-dev libsigc++-2.0-dev libglade2-dev libgtkmm-2.4-dev libglu1-mesa-dev libmysqlclient15-dev uuid-dev liblua5.1-dev libpcre3-dev g++ libglade2-dev libgnome2-dev python-pexpect libboost-dev libsqlite3-dev python-dev libgnome-keyring-dev libctemplate-dev
% patch -p0 < ../5.2.35-ubuntu_11_10_compile_fix.patch
% ./autogen.sh -prefix=/usr/local
make

パッチを当てないとコンパイルが出来ても
起動スプラッシュでフリーズするらしい
makeはCore2Quad 2.4GHzのメモリ4GBで30-40分かかるらしい。

subversion1.7をインストールした環境でphp-svnのコンパイルが通らない

開発用のサーバを立てていて、svnの1.7.1をソースからコンパイルして入れた環境(Ubuntu 11.10)で、phpのモジュール「php-svn」のインストールが出来なかった時のメモ。
当然peclから入れてもエラーで通らない。廃止された関数があるらしい。
しかたなく、1.6系のライブラリをインストール

sudo aptitude install libsvn-dev

aptとかから入れた物は/usr/以下、ソースから入れら/usr/local以下に入るので共存できる。
で、Makefileを編集

/usr/local/include/subversion-1/

/usr/include/subversion-1/

に置換してmakeしてみたら通った。

Ubuntu server 10.04LTSでLDAPサーバ構築(2)

続き。PAM関連の設定。とりあえずLDAPでログイン出来るようにしてみる。

必要なパッケージのインストール
sudo apt-get install libnss-ldap
途中、対話式に設定をする画面になるので、設定する。
必要なら完了後、sudo dpkg-reconfigure ldap-auth-configで再度設定できる。
LDAPログインを有効にする
sudo auth-client-config -t nss -p lac_ldap
/etc/pam.d/common-passwordの編集
26行目
password [success=1 user_unknown=ignore default=die] pam_ldap.so authtok try_first_pass
の、authtokを消去。
ユーザは存在するがホームディレクトリが存在しない場合に、自動でホームディレクトリを作成するようにする。
/etc/pam.d/にあるcommon-sessionとcommon-session-noninteractiveに追記
session required pam_mkhomedir.so skel=/etc/skel umask=0022
PAMのアップデート
sudo pam-auth-update

これで、frontend.ldifに記述したテストユーザでログイン出来た。

Ubuntu server 10.04LTSでLDAPサーバ構築(1)

LDAP的な物をインストール
sudo aptitude install slapd
sudo aptitude install ldap-utils
よくわからないけど、スキーマをロードするよう色々なサイトに書いてあった。
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
backend.ldifを作成
exampleとかcomとかの部分は環境に合わせて。
参考までに書き換えた行には印付けておく。

# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=example,dc=com # 書き換え
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com # 書き換え
olcRootPW: secret # 書き換え
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none # 書き換え
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read # 書き換え

作成したbackend.ldifをロード
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif
frontend.ldifを作成
backendと同じく書き換えた部分には印を付けておく。
# Create top-level object in domain
dn: dc=example,dc=com # 書き換え
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Organization
dc: Example
description: LDAP Example

# Admin user.
dn: cn=admin,dc=example,dc=com # 書き換え
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin # 書き換え
description: LDAP administrator # 書き換え
userPassword: secret # 書き換え

dn: ou=people,dc=example,dc=com # 書き換え(peopleをusersにしてみた)
objectClass: organizationalUnit
ou: people # 書き換え

dn: ou=groups,dc=example,dc=com # 書き換え
objectClass: organizationalUnit
ou: groups

# この辺がユーザだと思う
dn: uid=john,ou=people,dc=example,dc=com # 書き換え
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john # 書き換え
sn: Doe # 書き換え
givenName: John # 書き換え
cn: John Doe # 書き換え
displayName: John Doe # 書き換え
uidNumber: 1000 # 書き換え
gidNumber: 10000 # 書き換え
userPassword: password # 書き換え
gecos: John Doe # 書き換え
loginShell: /bin/bash
homeDirectory: /home/john # 書き換え
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: [email protected]
postalCode: 31000
l: Toulouse
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress:
initials: JD

dn: cn=example,ou=groups,dc=example,dc=com # 書き換え
objectClass: posixGroup
cn: example # 書き換え
gidNumber: 10000

作成したfrontend.ldifをロード
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.ldif
ユーザが追加されたか確認
ldapsearch -xLLL -b “dc=example,dc=com” uid=john sn givenName cn

ここまでの手順は丸々
https://help.ubuntu.com/10.04/serverguide/C/openldap-server.htmlを参考にした。