RTFS

概要

RTFSは、ルーターの内蔵フラッシュROMに構築されるファイルシステムです。一般的なPCのファイルシステムと同様、内蔵フラッシュROMに任意のデータを保存しファイル名を付けて管理することができます。またディレクトリ構造も実現されています。内蔵フラッシュROMにはファームウェア (exec) や設定ファイル (config) など様々なデータが保存されていますが、それらとは独立した特定の領域をRTFSとして使用します。以降では、内蔵フラッシュROMのRTFS領域のことを単に「RTFS領域」と表記します。

RTFS領域に保存するデータの例として、Luaスクリプト機能のスクリプトファイルやカスタムGUIのHTMLファイルが挙げられます。これらの機能ではUSBメモリやmicroSDメモリカードから直接データを読み込むことも可能ですが、内蔵フラッシュROMにデータを保存することでルーターに外部メモリを接続する必要がなくなります。

RTFS領域や外部メモリに対して、ファイルやディレクトリの操作を行うためのコマンドがルーターに用意されています。本ドキュメントでは、RTFSの特徴およびファイルとディレクトリの操作コマンドの使用方法について解説します。

対応機種とファームウェアリビジョン

ヤマハRTシリーズでは以下の機種およびファームウェアで、RTFSをサポートしています。

機種 ファームウェア
RTX5000 Rev.14.00.15以降
RTX820 Rev.11.03.16以降
RTX1200 Rev.10.01.20以降
RTX800 Rev.10.01.20以降

注意事項

  • Luaスクリプト機能のスクリプトファイルやカスタムGUIのHTMLファイルなど、読み出し専用データを保存する用途としてRTFSを使用してください。ログファイルの記録など、RTFS領域への定期的な書き込みはフラッシュROMの消耗を早めます。頻繁に書き込みを行ったことが原因でフラッシュROMの故障に至った場合は、 保証期間内であっても無償修理の保証対象外になります。また、後述するガベージコレクトの処理により、予期せず通信が停止することがあります。
  • RTFS領域にファイルを保存した後、RTFS未対応のファームウェアにリビジョンダウンすると保存したファイルを読み出せなくなります。
  • RTFS領域へのアクセス中に電源を落としたり再起動したりすると、ファイルシステムが壊れてデータを読み出せなくなる恐れがあるので絶対に行わないでください。
  • メモリ使用率が高い状態でRTFS領域にアクセスすると、メモリ不足により処理を完了できずファイルシステムに不整合が生じる可能性があるのでファイルシステムの操作はできるだけメモリ使用率が低い状態で行ってください。
  • フラッシュROMは頻繁に読み書きすることを想定したデバイスではないので、アクセス速度はあまり速くありません。詳細は後述しますが、ファイルシステムの状態によってはアクセスを開始してから処理が完了するまで十数秒程度かかる場合もあります。

詳細

フラッシュROMの特性

フラッシュROMはハードディスクなどとは異なり、書き込む前に一旦消去する必要があります。また書き込みはバイト単位で可能ですが、消去は数十KB単位となります。このためRTFSではCD-RWなどと同様に追記動作を基本とし、容量の上限まで使い切った段階で必要のないデータを削除して空き容量を増やす作業 (ガベージコレクト) を行います。ガベージコレクトはRTFSの操作時に必要に応じて自動的に実行されますが、処理完了まで十数秒程度かかり、この間は通信など他の動作が停止します。事前にガベージコレクトを行っておきたい場合はrtfs garbage-collectコマンドを実行します。

ファイル操作コマンドにおけるパスの指定規則

コマンドを用いてファイル操作を行う際のパスの指定規則について解説します。

対象装置の指定

ファイル操作コマンドでは、RTFS領域と外部メモリ (USBメモリ、microSDメモリカード) に対してファイル操作を行うことができます。USBメモリを対象とする場合にはパスの先頭に "usb1:" を、microSDメモリカードの場合には "sd1:" を指定します (これをプレフィックスと呼びます)。RTFS領域を対象とする場合はプレフィックスをつけません。以下に例を示します。

USBメモリの/dir1ディレクトリにあるファイルとディレクトリを表示する。
# show file list usb1:/dir1
microSDメモリカードの/dir1/dir2/file1.txtを削除する。
# delete sd1:/dir1/dir2/file1.txt
RTFS領域の/dir1/file1.txtをmicroSDメモリカードのルートディレクトリにコピーする。
# copy /dir1/file1.txt sd1:/

相対パスと絶対パス

WindowsのコマンドプロンプトやUNIX系OSのシェルでは、一般的にファイルやディレクトリの指定方法としてルートディレクトリ '/' から記述する絶対パスと、カレントディレクトリを基点として目的のファイル、ディレクトリがどこにあるのかを示す相対パスの2種類があります。ヤマハルーターに搭載されいてるCUIにはカレントディレクトリの概念がありませんが、setコマンドを使用し、環境変数 "PWD" を設定することで相対パス指定によるファイル操作を実現できます。なお、setコマンドでは大文字と小文字が区別されます。例えば "PWD" と "Pwd" は異なる環境変数となることに注意してください。

RTFS領域の/dir1/dir2/file1.txtを相対パスで指定して削除する。
# set PWD=/dir1/dir2
# delete file1.txt
RTFS領域の/dir1/dir2/file1.txtを絶対パスで指定して削除する。
# delete /dir1/dir2/file1.txt

また、カレントディレクトリそのものを示す "." や、1つ上のディレクトリを示す ".." を使用することができます。

RTFS領域の/dir1/dir2ディレクトリにあるファイルとディレクトリを表示する
# set PWD=/dir1/dir2
# show file list .
1つ上の/dir1ディレクトリにあるファイルとディレクトリを表示する。
# set PWD=/dir1/dir2
# show file list ..

相対パスの基点を外部メモリにすることも可能です。

USBメモリの/dir1/file1.txtを相対パスで指定して削除する。
# set PWD=usb1:/dir1
# delete file1.txt

PWDを設定していない場合、相対パスの基点は内蔵フラッシュROM (RTFS) のルートディレクトリ '/' となります (PWDの初期値)。

相対パスと絶対パスのいずれを使用する場合でも、ルートディレクトリ以外でスラッシュ '/' で終わるパスはエラーとなります。

tftpを用いたファイル転送

tftpを用いて、RTFS領域や外部メモリに対してファイル転送 (書き込み、読み出し) が可能です。

tftpを用いたファイル転送を行うには、tftp hostコマンドでホストからルーターへのアクセスが許可されている必要があります。

RTFS領域や外部メモリのファイルをtftpクライアントから指定するには、絶対パスを使用します。外部メモリを対象とする場合は最初にポート名 ("usb1" または "sd1") を指定し、その後につづけてスラッシュ '/' から始まる絶対パスを入力します。また、ルーターに管理者パスワードが設定されている場合にはパスの後にスラッシュ '/' を入力し、続けてパスワードを指定します。なお、環境変数PWDを用いた相対パスは使用できません。Windowsのコマンドプロンプトからの実行例を以下に示します。

PC上のfile1.txtをルーター (IPアドレス: 192.168.100.1、管理者パスワード: doremi) に挿入されているmicroSDメモリカードの/dir1/file2.txtに保存する。
C:\>tftp 192.168.100.1 put file1.txt sd1/dir1/file2.txt/doremi
ルーター (IPアドレス: 192.168.100.1、管理者パスワード: doremi) のRTFS領域に保存されている/dir1/file1.txtをPC上のfile2.txtに保存する。
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領域と外部メモリ、それぞれの仕様を比較して解説します。

  RTFS領域 外部メモリ
書き込み可能容量
  • RTX5000: 10MB
  • RTX820: 1536KB
  • RTX1200: 1536KB
  • RTX800: 1536KB
使用する外部メモリに依存。
1ファイルの最大サイズ 書き込み可能容量と同等。 2GB。
作成可能なファイル数、ディレクトリ数 ファイルとディレクトリ合計で1000まで。 使用する外部メモリのフォーマットに準ずる。
ファイル名、ディレクトリ名の長さ 制限なし。ただし、入力するコマンドの文字数がコマンドラインの最大長 (4095文字) を超える場合、ファイルやディレクトリの操作はできない。 単体のファイル名、ディレクトリ名は99文字。フルパスではプレフィックスを除いて246文字。
ファイル名、ディレクトリ名に使用できる文字種 以下の文字を使用することができる。
  • 半角アルファベット (A-Z、a-z)
  • 半角数字 (0-9)
  • ハイフン '-'、アンダースコア '_'、ピリオド '.'
半角アルファベットの大文字と小文字は区別される。

以下の記号は使用することができない。

\ / : * ? " ~ < > |

日本語 (Shift_JIS) を使用することができません。半角アルファベットの大文字と小文字は区別されない。

外部メモリを指定できるコマンドにおける仕様の差異

外部メモリの利用で解説している各機能において使用するコマンドと、本ドキュメントにおけるファイル、ディレクトリの操作コマンドとの仕様の違いは以下の通りです。

  外部メモリの利用で使用するコマンド 本ドキュメントにおけるコマンド
ファイル名、ディレクトリ名の長さ プレフィックスを除いて64文字。 単体のファイル名、ディレクトリ名は99文字。フルパスではプレフィックスを除いて246文字。
ファイル名、ディレクトリ名に使用できる文字種 英数字、アンダースコア '_'、ピリオド '.' を使用できる。大文字と小文字は区別されない。また、ピリオドで終了する名前は指定できない。

以下の記号は使用することができない。

\ / : * ? " ~ < > |

日本語 (Shift_JIS) を使用することができません。半角アルファベットの大文字と小文字は区別されない。

自動検索

RTX800以外の機種で使用できる。プレフィックスの後にスラッシュ '/' を含まないファイル名のみを指定することで検索が行われる。

また、ファイルの指定はルートディレクトリのみが対象となり、プレフィックスの後にスラッシュ '/' を含むファイル名を指定することはできない。

使用できない。プレフィックスの後のファイル名、ディレクトリ名は常にスラッシュ '/' から始まる絶対パスを指定する。
外部メモリから外部メモリへのデータのコピー copy configコマンドやcopy execコマンドで、コピー元とコピー先の両方に外部メモリを指定することはできない。 copyコマンドで、コピー元とコピー先の両方に外部メモリを指定することができる。

コマンド

環境変数の設定

[書式]
set NAME=VALUE
no set NAME[=VALUE]
[設定値]
  • NAME ... 環境変数名
  • VALUE ... 設定値
[説明]

ルーターの環境変数を設定する。

環境変数名の命名規則は次の通りである。

  • 半角の英数字とアンダースコア '_' が使用できるが、アンダースコアまたは数字を最初の文字にすることはできない。
  • 変数名の長さに制限はないが、setコマンドはコマンドラインの最大長 (4095文字) を超えて実行できない。
  • 英字の大文字、小文字を区別する。例えば、abcと Abcは別の変数として扱われる。
[ノート]

環境変数 "PWD" の設定値がファイル操作コマンドにおける相対パスの基点となる。"PWD" が設定されていない場合、相対パスの基点はフラッシュROM (RTFS) のルートディレクトリ '/' となる。

ファイル情報の一覧の表示 (仕様拡張)

[書式]
show file list LOCATION [all] [file-only]
[設定値]
  • LOCATION
    • internal ... 内蔵フラッシュROM
    • ext0 ... 外付けフラッシュATAカード
    • 相対パスまたは絶対パス
  • all ... 配下の全ディレクトリを対象とする
  • file-only ... ファイル名のみを表示する
[説明]
  • 指定した場所に格納されているファイルやディレクトリの一覧を表示する。
  • LOCATIONにinternalを指定すると内蔵フラッシュROMに格納されているconfigの一覧が表示される。
  • 内蔵フラッシュROMのRTFS領域や外部メモリに保存されているファイルやディレクトリの一覧を表示する場合には、対象となるディレクトリを相対パスまたは絶対パスでLOCATIONに指定する。
[ノート]

LOCATIONがinternalもしくはext0の場合にはallとfile-onlyを指定することはできない。

[実行例]
# 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
#

ディレクトリの作成

[書式]
make directory PATH
[設定値]
  • PATH ... 相対パスまたは絶対パス
[説明]

指定した名前のディレクトリを作成する。

ファイルまたはディレクトリの削除

[書式]
delete PATH
[設定値]
  • PATH ... 相対パスまたは絶対パス
[説明]

指定したファイルまたはディレクトリを削除する。
ディレクトリが空でない場合は配下のファイルとディレクトリも同時に削除される。

[ノート]

PATHに相対パスで "config" または "exec" を指定した場合、本コマンドではなく、delete configコマンドまたはdelete execコマンドが実行される。
このような場合には相対パスを使用せず、絶対パスでファイルまたはディレクトリを指定する。

ファイルまたはディレクトリの複製

[書式]
copy PATH1 PATH2
[設定値]
  • PATH1 ... コピー元となるファイルまたはディレクトリの相対パスまたは絶対パス
  • PATH2 ... コピー先の相対パスまたは絶対パス
[説明]

ファイルまたはディレクトリを複製する。コピー元がディレクトリの場合は、配下のすべてのファイルとディレクトリが再帰的に複製される。

PATH1がファイルの場合の動作は以下の通りとなる。

  • PATH2と同名のファイルが存在する場合はPATH2のデータがPATH1のデータで上書きされる。
  • PATH2と同名のディレクトリが存在する場合は、そのディレクトリの配下にPATH1と同名のファイルが作成される。
  • PATH2と同名のファイルやディレクトリが存在しない場合にはPATH2が作成される。

PATH1がディレクトリの場合の動作は以下の通りとなる。

  • PATH2と同名のファイルが存在する場合は複製を実行できない。
  • PATH2と同名のディレクトリが存在する場合は、そのディレクトリの配下にPATH1と同名のディレクトリが作成される。
  • PATH2と同名のファイルやディレクトリが存在しない場合にはPATH2が作成される。
[ノート]

PATH1に相対パスで "config" または "exec" を指定した場合、本コマンドではなく、copy configコマンドまたはcopy execコマンドが実行される。このような場合には相対パスを使用せず、絶対パスでファイルまたはディレクトリを指定する。

ファイル名またはディレクトリ名の変更

[書式]
rename PATH NAME
[設定値]
  • PATH ... 変更対象のファイルまたはディレクトリの相対パスまたは絶対パス
  • NAME ... 変更後の名前
[説明]

指定したファイルまたはディレクトリの名前を変更する。

[ノート]

NAMEにスラッシュ '/' を含む名前を指定することはできない。

RTFSの状態の表示

[書式]
show status rtfs
[説明]

内蔵フラッシュROMのRTFS領域の状態を表示する。表示する内容は次の通り。

  • 容量
  • 空き容量
  • 作成可能エントリ数
  • ファイル数
  • ディレクトリ数
[実行例]
# show status rtfs
Capacity                          : 1572864 bytes
Free space                        : 1566025 bytes
Number of entries that can be made: 995
Number of files                   : 2
Number of directories             : 3
#

RTFSのフォーマット

[書式]
rtfs format
[説明]

内蔵フラッシュROMのRTFS領域をフォーマットし、すべてのデータを削除する。
工場出荷状態に戻した場合にもフォーマットが行われる。

[ノート]

フォーマットを実行するとデータは完全に削除され、復元することができない。

RTFSのガベージコレクト

[書式]
rtfs garbage-collect
[説明]

内蔵フラッシュROMのRTFS領域にある不要なデータを削除し、空き容量を増やす。
ガベージコレクトは通常必要なときに自動で実行されるが、処理に数十秒かかるため、事前に行っておきたい場合にこのコマンドを実行する。

[ノート]

ガベージコレクトによってファイルが削除されたり上書きされたりすることはない。

SYSLOGメッセージ一覧

本機能において出力されるSYSLOGメッセージを以下に示します。実際に出力されるメッセージには "[RTFS]" というプレフィックスが付加されます。

レベル 出力メッセージ 意味
INFO Failed to initialize. 起動時の初期化処理に失敗し、RTFSにアクセスすることができない。
再起動を繰り返してもこのメッセージが出るようであれば、フォーマットする必要がある。
Formatted. RTFS領域がフォーマットされた。
Failed to format. RTFS領域のフォーマットに失敗した。
Garbage collected. RTFS領域がガベージコレクトされた。
Failed to garbage collect. RTFS領域のガベージコレクトに失敗した。

ページトップへ戻る