RAW

Section: System Administration (8)
Updated: August 1999
Index Return to Main Contents
 

名前

raw - Linux raw キャラクタデバイスをバインドする  

書式

raw /dev/raw/raw<N> <major> <minor>

raw /dev/raw/raw<N> /dev/<blockdev>

raw -q /dev/raw/raw<N>

raw -qa  

説明

raw は Linux raw キャラクタデバイスを ブロックデバイスにバインドするために用いられる。 どんなブロックデバイスでも利用できる。 またバインドする時にデバイスドライバがアクセス可能でなくてもかまわない (つまりオンデマンドでロードされるカーネルモジュールであってもかまわない)。

raw の利用法には 2 つのモードがある。一つは raw デバイスのバインドを 設定する動作であり、もう一つは存在しているバインドに対する問合わせをする 動作である。 raw デバイスの設定をするときは、 /dev/raw/raw<N> はファイルシステム中に存在している raw デバイスのノードのデバイス名である。 バインド先のブロックデバイスは、 majorminor 番号で示しても良いし、存在しているブロックデバイスファイルのパス名 /dev/<blockdev> で示しても良い。

既に存在しているバインドに対して、 -q オプションによって問合わせを行うことができる。 この際には、問合わせる raw デバイスのファイル名を指定しても良いし、 -a オプションを用いればバインド済みの全ての raw デバイスが対象となる。

major と minor を 0 に指定することにより、アンバインドすることができる。

いったん raw デバイスをブロックデバイスにバインドすると、 その raw デバイスはバインド先のブロックデバイスと同じように オープンしたり read/write できる。しかし raw デバイスの動作は ブロックデバイスと全く同じではない。特に違う点としては、 raw デバイスへのアクセスは、 カーネルのブロックバッファキャッシュを全く用いない。 全ての I/O は、その I/O を行ったプロセスのアドレス空間に対して 直に行われる。もし下層にあるブロックデバイスドライバが DMA をサポートしていると、データコピーを全く行わなくても I/O を完了することができる。

raw I/O では、プロセスのアドレス空間が割り付けられた物理メモリに 直接的なハードウェアアクセスを行うので、例外的な制限がいくつか存在する。 全ての I/O はメモリやディスク上で正しくアラインされていなければならない。 すなわちディスク上のセクタ先頭から始まり、セクタ長の整数倍で、 かつ仮想メモリ上のデータバッファもセクタ長の整数倍でなければならない。 ほとんどのデバイスでは、セクタのサイズは 512 バイトである。  

オプション

-q, --query
問合わせモード。 raw は新たなバインドを設定する代わりに、 既存のバインドに対する問合わせを行う。
-a, --all
-q オプションとともに用い、既存のバインド済み raw デバイスすべてに対して問合わせを行う。
-h, --help
ヘルプを表示して、終了する。
-V, --version
バージョン情報を表示して、終了する。

 

バグ

Linux の dd(1) コマンドは、bs= オプションなしで使うべきである。 また、ブロックサイズはデバイスのセクタサイズ (通常は 512 バイト) の 倍数である必要がある。 さもないと、 dd(1) は "Invalid Argument" メッセージ (EINVAL) を出して、失敗する。

raw I/O デバイスは、 Linux ブロックデバイスのバッファキャッシュとの キャッシュの整合性を管理しない。バッファキャッシュに既に存在するデータを raw I/O を用いて上書きすると、そのバッファキャッシュの指す記憶装置の デバイスの実際の内容との不整合が発生する。 これは恣意的なものであるが、 質問した人によって、回答はバグであったり仕様であったりするだろう!  

注意

アプリケーションは、raw デバイスを使うよりも、 /dev/sda1 のようなデバイスを O_DIRECT フラグ付きで open(2) するべきである。  

著者

Stephen Tweedie (sct@redhat.com)  

入手方法

raw コマンドは util-linux パッケージの一部であり、 https://www.kernel.org/pub/linux/utils/util-linux/ から入手できる。


 

Index

名前
書式
説明
オプション
バグ
注意
著者
入手方法

This document was created by man2html, using the manual pages.
Time: 22:31:57 GMT, March 24, 2020