HDDの熱暴走で、SSDに換装
7月末くらいから、研究室のメインマシンが知らないうちに停止して、BIOSの画面後に「SATA-0 not found」みたいになって止まる事があった。PCのケースを開けて触ってみると、ちんちん(名古屋弁で熱いって事、最上級はちんちこちん)。エアコンがほとんど効かない状態での連続稼働で、止まった感じ。しばらく扇風機を当てて冷やし、再起動すると普通に起動する。でもまたしばらくすると止まってしまう。色々忙しかったので、そんな状態でしばらく我慢してたけど、もう限界ってなって、何とかしようと決意。でも普通に再インストールして再セットアップって・・・ちょー面倒。そんな時間も無いので、クローン作って換装することに。で、どうせ換装するなら、この際SSDにしてしまおう!ってことで、512GBのSSD(CSSD-S6T512NHG6Q)を買ってきました。換装の方法は、
ASCIIの記事
を参考にしました。そのままやったらクローン作成中(データコピー中)にエラーが出て、「セクタバイセクタクロ−ンにチェックを入れてくれ」みたいに言われた。指示通り実行したら、コピーの時間が恐ろしくかかる。全然進まないので、「操作完了時にPCをシャットダウン」にチェックを入れて、帰りました。だから、200GBくらいのデータなんだけど、どれだけ時間がかかったかわかりません。
次の日になって、正常にシャットダウンされていたので、そのまま起動。しっかりデータがコピーされていたのを確認し、これまでOSが入っていた熱暴走のHDDの部分に、コピーが完了したSSDを接続して再起動。参考にしたページでは、このままでは起動しないから一手間加えるみたいに書いてあったけど、普通に起動しました。それも、感動的な速度で。もう、HDDには戻れないです。
惜しむらくは、マザーボードがSATA-3に対応していないため、転送速度が300MB/sで頭打ちになってしまうことでしょうか。適当なATAボード買ったらいいのかな?
sambaユーザの追加
研究室のサーバでsambaを運用し、共有フォルダもあわせて設定してます。新年度になって学生が来たから、新たにユーザの追加をしたんだけど、どんな設定だったか忘れて、ちょっとハマった。自戒(次回)のためのメモです。
環境として、ホームディレクトリを/home1/以下に、共有フォルダをpublicと言う名前で/home1/sambaに設定。smb.confの必要そうな部分だけ載せると、
[homes] comment = Home Directories browseable = no writable = yes create mask = 0700 directory mask = 0700 [public] comment = Public Stuff path = /home1/samba public = yes force group = ohzekilab writable = yes directory mode = 0777 create mode = 0777 printable = no valid users = @ohzekilab
みたいな感じになってます。ポイントは、[public]でforce groupを設定していることです。ってことで、新しいユーザを作成する時に、グループをohzekilabにするか、別にohzekilabのサブグループを作って、登録するかのどちらかです。私は後者の設定をしたので、ユーザを作成した後、サブグループに追加しました。ただし、コマンドでの追加方法を忘れたので、直接/etc/groupファイルを編集しました。それからsambaユーザの追加をおこない、完了です。たぶん、こんな感じ。
# adduser user1 # smbpasswd -a user1
/etc/groupファイル抜粋
ohzekilab:x:1006:an,pon,tan,user1
あとは、Windowsマシンから新しいドライブの追加で、「\\192.168.1.1\public」と「\\192.168.1.1\user1」みたいに書けば、追加できるはず。IPアドレスは、自分の環境に合わせてください。
一応、これで動いてます。
NFSしたファイルをrsyncでバックアップが正常にできなかったので、再設定
タイトルの通りなんですが、NFSでマウントしたフォルダをrsyncでバックアップしています。これまで、正常に動作していると思っていましたが、よくよくチェックすると、バックアップされていないファイルがありました。パーミッションが700とか600のファイル、フォルダです。
- 修正前の設定
サーバ側の/etc/exports
/home1 172.16.1.2(rw,fsid=0,insecure,no_subtree_check,async)
クライアント側の/etc/fstab
server:/home1 /home1 nfs auto 0 0
この状態で、以下のようなrsyncコマンドを実行します。(ホントは毎日差分バックアップを取っているので、若干違いますが、要点だけです)
rsync -av /home1 /backup/20141211backup
何をしているかというと・・・NFSマウントした/home1を、/backup/20141211backup以下に、オーナー、グループ、パーミッション、タイムスタンプなどをそのまにバックアップをとっている感じです。これで万事OKと思っていたら、ログファイルに
permission denied (13)
が山ほど書かれていました。rsyncのオプションが悪いのかと色々調べてみましたが、大抵はファイルの所有者がちがうとか、root権限で実行すればエラーが消えるとか、そんなことしか書かれていません。rootで実行してるのに・・・。--chmod=u+rwxのオプションもつけましたが、だめでした。
そもそも、なんでパーミッションが700とかなんだ?と思っていたら、sambaで新しくwindows側からファイル等を作成すると、セキュリティの関係から、デフォルトで700のマスクがかかってるんですね。とりあえず根本の解決にはならないけど、これも変更して、755とかにしておきました。
いよいよわからなくなっていたんですが、これはもしかして、NFSが怪しいのでは?と思って設定ファイルのオプションをよく見ると、デフォルトではroot_squash(クライアントからマウントしたファイルにアクセスするとき、たとえrootでもroot権限がない設定)らしい。これしかない!と思って、/etc/exportsファイルで
/home1 172.16.1.2(rw,fsid=0,no_root_squash,insecure,no_subtree_check,async)
赤字の部分を追加して、以下のコマンドでサーバのNFSを再起動しました。
# /etc/init.d/nfs-kernel-server restart
それから再度、バックアップをおこなうと、ばっちりでした。ってことで、NFSサーバ側で、NFSクライアント側にroot権限を与えない設定(それがデフォルトなんです)がいかんかったみたいです。どーせ研究室内からのアクセスしかできない(と思う)ので、これでおけです。
Linuxマシン同士で、sshによるパスワード無しのログイン方法
並列計算機設定の過程で、Linux同士をパスワード無しでログインできる環境が必要になりました。毎回忘れるので、その設定方法を簡単に書いておきます。なお、すでにNIS、NFSの設定は済んでいます。この設定にNISが必要かどうか、正直よくわかりません。不要な気もするんですが・・・だれか教えてください。ただ今回の方法では、NFSは必要です。
まず、ssh-keygenコマンドで、秘密鍵と公開鍵を作成します。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home1/ohzeki/.ssh/id_rsa):(Enter) Created directory '/home1/ohzeki/.ssh'. Enter passphrase (empty for no passphrase):(何も書かずにEnter) Enter same passphrase again:(何も書かずにEnter) Your identification has been saved in /home1/ohzeki/.ssh/id_rsa. Your public key has been saved in /home1/ohzeki/.ssh/id_rsa.pub. The key fingerprint is: (略) The key's randomart image is: [ RSA 2048] (略)
ここで、何も書かずにEnterが重要です。
これにより、パスワード無しの~/.ssh/id_rsaファイル(秘密鍵)と、~/.ssh/id_rsa.pubファイル(公開鍵)が作成されます。このid_rsa.pubファイルを、本来は接続先のマシンの~/.ssh/以下に、authorized_keysファイルとしてコピーするのですが、NFSでマウントされているため、同じフォルダにコピーすればOKです。
$ cd ~/.ssh/ $ cp id_rsa.pub authorized_keys
これにより、パスワード無しのログインが可能となります。
@calc1:~$ ssh calc2
とすると、計算機calc2へログインできるはずです。ログインできない場合、sshdの設定と再起動が必要かもしれません。ubuntu14.04では不要でした。以上です。
以下のサイトを参考にしました。ありがとうございました。
http://www.checksite.jp/linux-ssh-nonpass/
ubuntu14.04+ifortの環境に、MPICH3をインストール(後編)
前編で、MPICH3をインストールしてパスを通したので、その後の設定です。並列化する計算機全てにMPICH3をインストールし、パスを通しておきます。
複数の計算機でプログラムを並列実行する場合の条件として、以下の2つがあります。
1.それぞれの計算機で同じディレクトリ構成の同じ場所に、同じ実行ファイルを用意する
2.互いの計算機に、パスワード無しでログインできる
1に関しては、NFSで解決済みです。
2に関しては、別に記事(ここ)を書きますが、以下のようなコマンドが実行できれば、OKと思います。計算機をそれぞれ「calc1」、「calc2」としたとき、calc1から
@calc1:~$ ssh calc2 hostname calc2
calc2から、
@calc2:~$ ssh calc1 hostname calc1
以上のように、それぞれのマシン名が互いに表示されればOKです。
このような状態で、MPICH2では、mpdというデーモンを動かす必要があったようですが、MPICH3では不要です。mpdの代わりに、「hydra」というマネージャプログラムが勝手に使われるようです。並列計算を実行するには、まず計算機のノード情報を記載したファイルを用意します。ファイル名は適当で構いません。ここでは~/machinefileとして、中身を以下のように記載します。
calc1:8 calc2:8
それぞれ、「ノード名:最大コア数」となります。(たぶんです。ハイパースレッティングとか、よくわからん。ご自分の環境で色々試してください。)
あとは、実行ファイル(ここでは、a.out)を用意して実行するだけです。
$ mpiexec -n 16 -f ~/machinefile ./a.out
ここでは、16並列で、先ほど作成した~/machinefile内のノードに割り振って計算します。
もしも実行ファイルが無い場合、コマンドでもOKです。たとえば、
$ mpiexec -n 16 -f ~/machinefile hostname calc1 calc1 calc1 calc1 calc1 calc1 calc1 calc1 calc2 calc2 calc2 calc2 calc2 calc2 calc2 calc2
などです。各計算機で実行されていることがわかります。ここまでできれば、とりあえず終了です。
以下のサイトを参考にしました。ありがとうございました。
http://www.softek.co.jp/SPG/Pgi/TIPS/public/general/mpich2_use.html
http://pccluster.web.fc2.com/MPI.html