$Date: 2023/07/06 20:30:27 $
RTFSは、ルーターの内蔵フラッシュROMに構築されるファイルシステムです。一般的なPCのファイルシステムと同様、内蔵フラッシュROMに任意のデータを保存しファイル名を付けて管理することができます。またディレクトリ構造も実現されています。内蔵フラッシュROMにはファームウェア (exec) や設定ファイル (config) など様々なデータが保存されていますが、それらとは独立した特定の領域をRTFSとして使用します。以降では、内蔵フラッシュROMのRTFS領域のことを単に「RTFS領域」と表記します。
RTFS領域に保存するデータの例として、Luaスクリプト機能のスクリプトファイルやカスタムGUIのHTMLファイルが挙げられます。これらの機能ではUSBメモリやmicroSDメモリカードから直接データを読み込むことも可能ですが、内蔵フラッシュROMにデータを保存することでルーターに外部メモリを接続する必要がなくなります。
RTFS領域や外部メモリに対して、ファイルやディレクトリの操作を行うためのコマンドがルーターに用意されています。本ドキュメントでは、RTFSの特徴およびファイルとディレクトリの操作コマンドの使用方法について解説します。
ヤマハRTシリーズでは以下の機種およびファームウェアで、RTFSをサポートしています。
機種 | ファームウェア |
---|---|
RTX3510 | すべてのリビジョン |
RTX1300 | |
RTX1220 | |
RTX830 | |
NVR510 | |
NVR700W | |
RTX1210 | |
RTX5000 | |
RTX3500 | |
FWX120 | |
RTX810 | |
NVR500 | |
RTX1200 | Rev.10.01.16以降 |
SRT100 | Rev.10.00.52以降 |
フラッシュROMはハードディスクなどとは異なり、書き込む前に一旦消去する必要があります。また書き込みはバイト単位で可能ですが、消去は数十KB単位となります。このためRTFSではCD-RWなどと同様に追記動作を基本とし、容量の上限まで使い切った段階で必要のないデータを削除して空き容量を増やす作業 (ガベージコレクト) を行います。ガベージコレクトはRTFSの操作時に必要に応じて自動的に実行されますが、処理完了まで十数秒程度かかり、この間は通信など他の動作が停止します。事前にガベージコレクトを行っておきたい場合はrtfs garbage-collectコマンドを実行します。
コマンドを用いてファイル操作を行う際のパスの指定規則について解説します。
ファイル操作コマンドでは、RTFS領域と外部メモリ (USBメモリ、microSDメモリカード) に対してファイル操作を行うことができます。USBメモリを対象とする場合にはパスの先頭に "usb1:" を、microSDメモリカードの場合には "sd1:" を指定します (これをプレフィックスと呼びます)。RTFS領域を対象とする場合はプレフィックスをつけません。以下に例を示します。
# show file list usb1:/dir1
# delete sd1:/dir1/dir2/file1.txt
# copy /dir1/file1.txt sd1:/
WindowsのコマンドプロンプトやUNIX系OSのシェルでは、一般的にファイルやディレクトリの指定方法としてルートディレクトリ '/' から記述する絶対パスと、カレントディレクトリを基点として目的のファイル、ディレクトリがどこにあるのかを示す相対パスの2種類があります。ヤマハルーターに搭載されいてるCUIにはカレントディレクトリの概念がありませんが、setコマンドを使用し、環境変数 "PWD" を設定することで相対パス指定によるファイル操作を実現できます。なお、setコマンドでは大文字と小文字が区別されます。例えば "PWD" と "Pwd" は異なる環境変数となることに注意してください。
# set PWD=/dir1/dir2 # delete file1.txt
# delete /dir1/dir2/file1.txt
また、カレントディレクトリそのものを示す "." や、1つ上のディレクトリを示す ".." を使用することができます。
# set PWD=/dir1/dir2 # show file list .
# set PWD=/dir1/dir2 # show file list ..
相対パスの基点を外部メモリにすることも可能です。
# set PWD=usb1:/dir1 # delete file1.txt
PWDを設定していない場合、相対パスの基点は内蔵フラッシュROM (RTFS) のルートディレクトリ '/' となります (PWDの初期値)。
相対パスと絶対パスのいずれを使用する場合でも、ルートディレクトリ以外でスラッシュ '/' で終わるパスはエラーとなります。
tftpを用いて、RTFS領域や外部メモリに対してファイル転送 (書き込み、読み出し) が可能です。
tftpを用いたファイル転送を行うには、tftp hostコマンドでホストからルーターへのアクセスが許可されている必要があります。
RTFS領域や外部メモリのファイルをtftpクライアントから指定するには、絶対パスを使用します。外部メモリを対象とする場合は最初にポート名 ("usb1" または "sd1") を指定し、その後につづけてスラッシュ '/' から始まる絶対パスを入力します。また、ルーターに管理者パスワードが設定されている場合にはパスの後にスラッシュ '/' を入力し、続けてパスワードを指定します。なお、環境変数PWDを用いた相対パスは使用できません。Windowsのコマンドプロンプトからの実行例を以下に示します。
C:\>tftp 192.168.100.1 put file1.txt sd1/dir1/file2.txt/doremi
C:\>tftp 192.168.100.1 get /dir1/file1.txt/doremi file2.txt
外部メモリ指定時のプレフィックスにコロン ':' を用いないのは、UNIX系OSのtftpコマンドにおけるファイルの指定方法として "ホスト名:ファイル名" という書式があるためです。
ルーターの設定ファイル (config、config0〜config4) やファームウェア (exec、exec0、exec1) を対象とするか、もしくはRTFS領域を対象とするかは、ルーター側のファイル名が絶対パスか否かで区別することができます。例えば、設定を転送する場合は "config" を、RTFS領域のルートディレクトリにconfigという名前のファイルを転送する場合は "/config" を、それぞれ指定します。
なお、RTFS領域や外部メモリを対象としてファイル転送を行う場合、暗号化機能には対応していません。
ルーターでファイル操作を行う場合、対象となる装置によって制限事項が変わります。ここでは、RTFS領域と外部メモリ、それぞれの仕様を比較して解説します。
RTFS領域 | 外部メモリ | |
---|---|---|
書き込み可能容量 |
|
使用する外部メモリに依存。 |
1ファイルの最大サイズ | 書き込み可能容量と同等。 | 2GB。 |
作成可能なファイル数、ディレクトリ数 | ファイルとディレクトリ合計で1000まで。 | 使用する外部メモリのフォーマットに準ずる。 |
ファイル名、ディレクトリ名の長さ | 制限なし。ただし、入力するコマンドの文字数がコマンドラインの最大長 (4095文字) を超える場合、ファイルやディレクトリの操作はできない。 | 単体のファイル名、ディレクトリ名は99文字。フルパスではプレフィックスを除いて246文字。 |
ファイル名、ディレクトリ名に使用できる文字種 |
以下の文字を使用することができる。
|
以下の記号は使用することができない。 \ / : * ? " ~ < > | 日本語 (Shift_JIS) を使用することができる。半角アルファベットの大文字と小文字は区別されない。 |
外部メモリの利用で解説している各機能において使用するコマンドと、本ドキュメントにおけるファイル、ディレクトリの操作コマンドとの仕様の違いは以下の通りです。
外部メモリの利用で使用するコマンド | 本ドキュメントにおけるコマンド | |
---|---|---|
ファイル名、ディレクトリ名の長さ | プレフィックスを除いて64文字。 | 単体のファイル名、ディレクトリ名は99文字。フルパスではプレフィックスを除いて246文字。 |
ファイル名、ディレクトリ名に使用できる文字種 | 英数字、アンダースコア '_'、ピリオド '.' を使用できる。大文字と小文字は区別されない。また、ピリオドで終了する名前は指定できない。 |
以下の記号は使用することができない。 \ / : * ? " ~ < > | 日本語 (Shift_JIS) を使用することができる。半角アルファベットの大文字と小文字は区別されない。 |
自動検索 |
Rev.10.01系以降のファームウェアで使用できる。プレフィックスの後にスラッシュ '/' を含まないファイル名のみを指定することで検索が行われる。 Rev.9.01系やRev.10.00系では使用できない。また、ファイルの指定はルートディレクトリのみが対象となり、プレフィックスの後にスラッシュ '/' を含むファイル名を指定することはできない。 |
使用できない。プレフィックスの後のファイル名、ディレクトリ名は常にスラッシュ '/' から始まる絶対パスを指定する。 |
外部メモリから外部メモリへのデータのコピー | copy configコマンドやcopy execコマンドで、コピー元とコピー先の両方に外部メモリを指定することはできない。 | copyコマンドで、コピー元とコピー先の両方に外部メモリを指定することができる。 |
# show file list / all [ / ] 2009/08/05 07:02:58 <DIR> dir1 2009/08/05 07:03:04 <DIR> dir3 [ /dir3 ] 2009/08/05 07:04:11 11 file2.txt [ /dir1 ] 2009/08/05 07:03:01 <DIR> dir2 [ /dir1/dir2 ] 2009/08/05 07:04:01 9 file1.txt # # show file list / all file-only /dir3/file2.txt /dir1/dir2/file1.txt #
# show status rtfs 容量 : 1572864 バイト 空き容量 : 1566025 バイト 作成可能エントリ数: 995 ファイル数 : 2 ディレクトリ数 : 3 #
本機能において出力されるSYSLOGメッセージを以下に示します。実際に出力されるメッセージには "[RTFS]" というプレフィックスが付加されます。
レベル | 出力メッセージ | 意味 |
---|---|---|
INFO | Failed to initialize. | 起動時の初期化処理に失敗し、RTFSにアクセスすることができない。再起動を繰り返してもこのメッセージが出るようであれば、フォーマットする必要がある。 |
Formatted. | RTFS領域がフォーマットされた。 | |
Failed to format. | RTFS領域のフォーマットに失敗した。 | |
Garbage collected. | RTFS領域がガベージコレクトされた。 | |
Failed to garbage collect. | RTFS領域のガベージコレクトに失敗した。 |