FreeBSDの最近のブログ記事

ソフトアップデート

| コメント(0) | トラックバック(0)
ソフトアップデートはメタデータの性能、 主にファイルの作成と削除の性能を劇的に改善します。 すべてのファイルシステムでソフトアップデートを有効にすることを推奨します。 ソフトアップデートに関して、2 つの欠点を意識すべきです。 1 つめは、ソフトアップデートはクラッシュ時におけるファイルシス テムの一貫性は保証しますが、 物理ディスクの更新が何秒か (1 分に達することもあります!) 遅れる可能性が高いことです。 システムがクラッシュした場合、より多くの作業結果が消えてしまうかもしれません。 2 つめは、ソフトアップデート はファイルシステムブロックを解放するのを遅らせるということです。 あるファイルシステム (たとえばルートファイルシステム) が満杯近くの時に それに対する大規模な更新、たとえば make installworld をすると、空き領域を使い果たして更新が失敗してしまうことがあります。
自分的に要約すると、
読み書きの性能向上、クラッシュ時も安心。でも、クラッシュ時のファイルは無くなるかも。
と言うことでしょうか。

FreeBSDのファイルシステムは、Linuxより遅いと言われています。
Linuxは標準でこのソフトアップデートは有効(らしい)。Linuxはよく分からないけど、どこかの記事で見た気がする。
FreeBSDは信頼性を高めたファイルシステムのようで、クラッシュ時でも直前のデータを保持してくれるのでしょうか。
しかし、クラッシュ時に、毎回fsckを実行しなければいけない。Windowsで言うところのスキャンディスクです。Windowsならキャンセルする選択肢もあるが、FreeBSDの場合は、fsckをしないと、そのディスクが利用できない。場合によってはOSが起動せずにシングルユーザーモードでfsckをしてから起動しないといけない。リモート地にあるマシンだと復旧まで非常に時間がかかる。
そこで、ソフトアップデートにすればいいと言う事でしょうか。
(とはいっても、FreeBSDはめったなことではクラッシュしない。)

■現在のファイルシステムでソフトアップデートを有効にする方法
# tunefs -n enable ad10
以下は無効にするときは
#
tunefs -n disable ad10
■新規のHDDでソフトアップデートを有効にする(ファイルはすべて消去されます。)
FreeBSD4.5以降
# newfs -U ad10


http://www.pinkdragon.net/doc_lib/contents/ja/freebsd_handbook/configtuning-disk.html
http://www.jp.freebsd.org/cgi/mroff.cgi?sect=7&cmd=&lc=1&subdir=man&dir=jpman-7.0.2%2Fman&subdir=man&man=ffs
http://www.pinkdragon.net/DocumentsLibrary/contents/ja/FreeBSD_man/newfs.8.html
# mount_ntfs -C eucJP /dev/ad0s1 /mnt


http://iris.homeunix.net/yayoi/freebsd/japanese/jamount.asp

Windows領域の日本語ファイル名をFreeBSDで扱う

FreeBSD 5.2-RELEASEにて、CD9660、MSDOSFS、NTFS、UDFファイルシステムがマルチバイト文字変換に対応しました。
これによって文字コードの異なる日本語ファイルシステムをFreeBSD上でEUC-JPとして扱うことが可能になります。
平たく言ってしまえばWindows領域に日本語のファイル名が存在した場合に、以前だと文字化けして扱えなかったものが日本語で扱えるようになるということです。
同様のことが4.xの頃にja-msdosfsによって実現していましたが、ja-msfsdosはFAT、FAT32のみでしたが今回はNTFSやCDにも対応しています。
また日本語だけでなく、ロシア語や韓国語などiconvに対応した言語ならどれでも相互変換が可能となっています。

ちなみにCD9660はISO9660規格のCD(通常のCDはこれです)、MSDOSFSはFATやFAT32、UDFはパケットライトCDのファイルシステムです。
NTFSはそのままなので説明する必要は無いでしょう。

ファイルシステムのマルチバイト変換を実現するには、kernelのコンフィグファイルに、

options LIBICONV

と、対応させたいファイルシステムのオプションが必要です。
それぞれのファイルシステムごとにマルチバイト変換をサポートするためのオプションが以下のように存在します。

options CD9660_ICONV
options MSDOSFS_ICONV
options NTFS_ICONV
options UDF_ICONV

ただし、これはマルチバイト変換をサポートするためのみのオプションですので、ファイルシステム自体に対応するオプションも必要です。

例えばCD9660_ICONVを使いたい場合は、

options LIBICONV
options CD9660
options CD9660_ICONV

の3つが必要ということです。
全てのファイルシステムのマルチバイト変換を有効にしたい場合は、

options LIBICONV
options CD9660
options CD9660_ICONV
options MSDOSFS
options MSDOSFS_ICONV
options NTFS
options NTFS_ICONV
options UDF
options UDF_ICONV

がコンフィグファイルにある必要があります。

必要なものをコンフィグファイルに追加できたら、kernelの再構築を行ってください。

なお、kernelの再構築をする代わりにkernelモジュールを起動時にロードしても使えます。
例えば以下のように、

# vi /boot/loader.conf

libiconv_load="YES"
msdosfs_iconv_load="YES"

を記述すれば、MSDOSFSのマルチバイト変換が利用可能になります。

FAT領域をマルチバイト変換してマウントする

マルチバイト変換をサポートしたkernelでFreeBSDを起動できたら、早速マウントしてみましょう。
FAT(MSDOS)領域をマルチバイト変換してマウントするには、mount_msdosfsコマンドに-Lと-Dオプションを付けて実行します。
-Lオプションが変換先の文字コード(日本語であればja_JP.eucJP)、-Dオプションが変換元の文字コード(日本語であればCP932(ShiftJIS))です。

# mount_msdosfs -L ja_JP.eucJP -D CP932 /dev/ad0s2 /mnt

のように実行します。
正常にマウントできていれば、FAT領域(ShiftJIS)の日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述し起動時にマウントさせるには、

/dev/ad0s2  /mnt  msdosfs  -L=ja_JP.eucJP,-D=CP932,rw  0  0

NTFS領域をマルチバイト変換してマウントする

NTFSはMSDOS領域と違い、文字コードはどの言語であってもUnicode(UTF-8)です。
そのためNTFS領域をマルチバイト変換してマウントするには、変換先の文字コード(日本語であればeucJP)のみを指定してマウントすれば良いです。
NTFS領域をマルチバイト変換してマウントするには、mount_ntfsコマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。

# mount_ntfs -C eucJP /dev/ad0s1 /mnt

のように実行します。
正常にマウントできていれば、NTFS領域の日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述し起動時にマウントさせるには、

/dev/ad0s1  /mnt  ntfs  -C=eucJP,rw  0  0

のようにします。
なお-Cを付けてNTFS領域をマウントすると自動的に読み取り専用でマウントされます。

ISO9660領域をマルチバイト変換してマウントする

同様にCD(ISO9660)の領域をマルチバイト変換してマウントするには、mount_cd9660コマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。

# mount_cd9660 -C eucJP /dev/acd0 /cdrom

のように実行します。
正常にマウントできていれば、CDの日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述するには、

/dev/acd0  /cdrom  cd9660  -C=eucJP,ro,noauto  0  0

のようにします。
これで

# mount /cdrom

を実行すれば日本語ファイル名を表示可能な状態でマウントされます。

UDFなCD領域をマルチバイト変換してマウントする

同様にUDFなCD領域をマルチバイト変換してマウントするには、mount_udfコマンドに-Cオプションを付けて実行します。
-Cオプションが変換先の文字コード(日本語であればeucJP)です。

# mount_udf -C eucJP /dev/acd0 /udf_cdrom

のように実行します。
正常にマウントできていれば、UDFなCDの日本語名ファイルがFreeBSD上(EUC-JP)で扱えるようになります。
これを/etc/fstabに記述するには、

/dev/acd0  /udf_cdrom  udf  -C=eucJP,ro,noauto  0  0

のようにします。
これで

# mount /udf_cdrom

を実行すれば日本語ファイル名を表示可能な状態でマウントされます。


ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/
ここから、FreeBSD4.11とか古いバージョンのsrcがダウンロードできる。
ちなみに、バージョン1なんかもいまだにある。

おかげでやっとzipも展開できたよ。

ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/4.11-RELEASE/


sendmailのコマンド

| コメント(0) | トラックバック(0)

■配送テスト
sendmail -bt -C/etc/sendmail.cf

■queueにたまってるかどうかの確認
sendmail -bp

■queueの送信
sendmail -q

■queueの送信(詳細状況をだしながら)
sendmail -q -v

■バッググラウンドで起動
sendmail -L sm-mta -bd -q30m
sendmail -L sm-msp-queue -Ac -q30m


■queueを削除する(あて先不明で配送されないメールを定期的に削除する)
※お試し中です。よい方法があったら教えてください。cronで定期的にすればいいんじゃないかなぁと。
kill `cat /var/run/sendmail.pid`
mv /var/spool/mqueue/* /var/spool/omqueue

sendmail -L sm-mta -bd -q30m
sendmail -L sm-msp-queue -Ac -q30m

sendmail -oQ/var/spool/omqueue -q -v
rm /var/spool/omqueue/*

最初に書いたのは2006年5月25日