スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)
可変長ブロックデバイスは,導入時には作成されていません。そのため,事前に作成する必要があります。
スーパユーザが,次のコマンドを実行します。
/etc/mknod /dev/dat/vdat010 c 119 0x010001 /bin/chmod 0666 /dev/dat/vdat010 |
可変長ブロックテープは,任意のブロック長で書き込まれたテープです。
任意のブロック長での書き込みができるため,DAT形式のほかにバイナリ形式のデータも直接扱えます。ただし,書き込みと同じブロック長で読む必要があります(例えば,64キロバイトで書いたブロックを32キロバイトで読むと,残りの32キロバイトは読まれません)。レコードごとに長さを変更しても,それを読む方に伝える手段がないため,通常最終ブロック以外は同じブロック長で書き込み,最終ブロックだけ端数のブロック長で書くようにします。
データベース作成ユティリティ(pdload)はそのブロック長を32キロバイトとしているので,それより大きいブロック長で作成されたテープの正常読み取りはできません。
そのため,作成時はブロック長を32キロバイト以下にする必要があります。
次の作成例では,ブロック長を32キロバイトに設定しています。
DAT形式もバイナリ形式も同じように作成します。
cpコマンドはバッファ長を指定できないので使用できません。代わりにddコマンドを使用します。
dd if=/usr/bin/vi of=/dev/dat/vdat010 bs=32k →7+1 入力レコード →7+1 出力レコード |
(凡例)→:システムの出力
次のようなプログラムを作成すると,任意長のデータ(data_lenで指定)をブロック長32キロバイトで可変長ブロックテープに出力します(32キロバイトのwrite_bufをシステムバッファに割り当ててから,フルバッファリング(_IOFBF)指定で出力します)。
#define PROC_BUFSIZ 1024 * 32 FILE* fp; int data_len; /* データ長(バイナリ時必要)*/ char write_buf[PROC_BUFSIZ]; /* システムコールのbuf */ char data_buf[PROC_BUFSIZ]; /* ユーザのbuf */ : fp = fopen("/dev/dat/vdat010","w") setvbuf(fp, write_buf, _IOFBF, PROC_BUFSIZ) : while(データのある間) { データ書き込み処理 } : fclose(fp); |
元データが通常ファイルの場合,(a)の方法で作成し直します。
DAT装置が2台ある場合は,次の方法でバッファ長を変換できます。
dd if=/dev/vdat010 ibs=64k of=/dev/vdat011 obs=32k |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.