ftpコマンドでバッチ処理したいときってありますよね。
しょっちゅう同じディレクトリの中身を同じディレクトリに放り込むとか。
じゃ、シェルスクリプト書きましょうということで。
あ、例のごとくWindowsじゃなくてLinuxです
で、今回はFTPS(FTP over SSL)での記述なので、ftpじゃなくてlftp使います。
まあftpでも同じような感じだと思います。
#!/bin/sh if lftp <<_EOD set cmd:fail-exit yes open ftps://ftps.example.com user hoge hogehoge cd /remote lcd /local mirror -R quit _EOD then echo "upload succeeded.\n" else echo "upload failed.\n" fi
という感じのシェルスクリプトを今回書きました。
内容としては、lftpコマンドで<<_EODから_EODまでを実行させて、実行結果が正常なら成功したよ、失敗したら失敗したよ、と表示させています。
lftpでは
set cmd:fail-exit yes
とすることで、コマンドが失敗したら接続を切ってエラーを返すようにできます。
バッチ処理にはもってこいです。
そのあと、openで接続先をftpsで開いて、userで認証、cdでリモートのファイルを置きたいディレクトリに移動、lcdでローカルの置きたいファイルがあるディレクトリに移動、mirror -Rでローカルのファイルをリモートにミラーしてquitで終了としてます。
このあたりは人によってやりたいことが違うのでご自由にしましょう。
見ての通り認証のパスワードがめっちゃ記述されている(user hoge hogehogeのhogehogeがパスワード)ので、スクリプトのパーミッションには気をつけましょう。
if – then – else – fiの流れはlftpコマンドが成功したらthenで失敗したらelseってことでまあ詳しくはシェルスクリプトでぐぐってください。
ディスクを交換しろっていうのが一番正解なのはわかってます。
普通にext3とかext4とかで使ってる場合は
e2fsck -cfy /dev/sda1
とかやれば、e2fsckから間接的にbadblocksが呼び出されて不良セクタのファイルシステムへの登録処理を行ってくれるじゃないですか。
Windowsでいうところのchkdsk /Rみたいなもんですよね。
で、たとえば/dev/sda1と/dev/sdb1と/dev/sdc1でRAID5くんでたとして、/dev/sdc1で不良セクタが発生してmdadmに蹴られてfaultマークつけられたとするじゃないですか。
とりあえずremoveしてRAIDから外しますよね。
で、まあなんか一時的なシステムの不具合だった場合またaddしてやればそのまま動いたり、まあ場合によってはリビルドかけるなりすれば復活するわけじゃないですか。
でも、がちでディスクに問題があるっていうか不良セクタが発生していた場合、とりあえず代替処理してやれば動きそうな気がしてるんですよね。
でも、e2fsckから間接的にbadblocksを呼び出す方法だと、RAID5だとリビルドのRead/Writeが平行して走ることになるから駄目っぽいですよね。
じゃあ直接
badblocks -o badblocks.txt -s /dev/sdc1
とかやって不良セクタの発生してるブロックを書き出してやって、
e2fsck -l badblocks.txt /dev/sdc1
とかやって不良ブロックを不良ブロックinodeに登録って普通のext2/3/4ファイルシステムならできるけど、RAID5アレイ上のファイルシステムだとどう考えても駄目ですよね。
ということはファイルシステムが作成される前の段階で代替処理を行わなければならないわけですが、それってどうやるんでしょうか。
表向きにはHDDの不良セクタの代替処理はファームウェアが勝手にやってくれるとのことなわけですが、実際のところ普通に不良セクタが出没します。
そんなHDDのSMART値をみるとReallocated_Sector_Ctは0だったりします。
全くあてになりません。
で、肝心の代替法なんですが、やっと見つけたと思ったらこんなんでした。
該当ブロックを再配置します
[root@www ~]# dd if=/dev/zero of=/dev/hda3 bs=4096 count=1 seek=120 1+0 records in 1+0 records out 4096 bytes (4.1 kB) copied, 6.4496e-05 seconds, 63.5 MB/s [root@www ~]# sync
これ本当に再配置ですか?
単に問題の箇所をzeroフィルしてるだけにしか見えないんですけど。
ということでbacblocksで見つけた不良箇所をファイルシステムへ登録せずに、代替セクタ処理を行わせたいんだけどもやり方がわからないわけです。
誰か知らないですか。

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 