ML115に
debianでNASっぽいものを作ってみる話で、
アクセスの無いときはHDD電源を落とすとかがんばって
それにゃりに出来たのだが、ちょっと改良。
HDD回転停止させて出てくる不満点は何たって初回アクセス時の起動待ち。致し方にゃいとはいえやはりおもしろくにゃい。
で、そういやNTFSでも似たようにゃことしたにゃぁ、という、ディレクトリエントリのキャッシュをやってみる。
方法は単純に find / >/dev/null を定期的に動かすだけ〜
といいたいがいらんディレクトリまで見させるとディスク書き込みが発生したりとかややこしいので、今回はsambaで公開してる/homeのみを巡回。さらにファイル属性その他も拾っとくべきにゃので-printf "%a%A@%c%f%F%g%h%i%m%n%s%t%u%Y"とかにゃんとか適度に。sambaからのアクセスを装ってmount -t cifs //localhost/homes /home/tmp -o iocharset=utf8とかしたディレクトリ相手に。
これで、sambaから見た範囲ではどのディレクトリを見に行ってもHDDアクセスはにゃくにゃり、HDD起動無しの快速レスポンスとにゃる。ACL? それは拾えてにゃいようにゃ・・・
さらにreiserfsのおまけ機能のおかげか、.md5のようにゃ微細にゃファイルがキャッシュされてることがある。もちろんHDD稼働時においてもエントリのリストアップは瞬時に帰ってくるようににゃる。
〜 memo 〜
umount /mnt/preread
rmdir /mnt/preread
mkdir /mnt/preread
chmod 777 /mnt/preread
mount -t cifs //localhost/homes /mnt/preread -o iocharset=utf8,username=neko
echo start.
while : ; do
nice -19 find /mnt/preread -printf "%a%A@%c%f%F%g%h%i%m%n%s%t%u%Y\n" ;
sleep 10
done|
nice -19 perl -e 'use Time::HiRes qw(sleep);while(<>){sleep(0.001)}'
par2.exeはpathによろしくにゃい2バイトが挟まってると失敗するんだが、ファイル名は致し方にゃいとして、ディレクトリに関しては回避できるので回避してみる。
subst x: .
pushd x:\
par2 c 〜
popd
subst x: /d
ただ、x:が決め打ちににゃるのが美しくにゃい。pushdで\\localhost\c$〜という手もあるが、
set drv=
call :search_free_drive drv
@echo free_drive : %drv%:
subst %drv%: . || pause
pushd %drv%:\ || pause
echo nice -19 "%par%" c -b32700 -r3 -m50 -n1 par2 %_x%
nice -19 "%par%" c -b32700 -r3 -m50 -n1 par2 %_x%||echo.
popd
subst %drv%: /d || pause
goto :EOF
:search_free_drive
set free_drive=
for %%d in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do ^
call :search_free_drive_sub1 %%d
set %1=%free_drive%
exit /b
:search_free_drive_sub1
if not "%free_drive%"=="" exit /b
rem @echo %1:?
subst %1: . >NUL || exit /b
subst %1: /d
rem @echo found %1:
set free_drive=%1
exit /b
これで自動探索するはず。
・・・っていうか.c書き換えるべき(笑)