EMFS

$Date: 2023/07/06 20:22:18 $

概要

EMFSは、読み出し専用のファイルを、ルーターのコマンドとして保存できるファイルシステムです。ファイルの内容が内蔵不揮発性メモリーに保存される点ではRTFSと同じですが、RTFSとは異なりファイルの内容がコマンドとしてconfigの中に保存されているので、他の設定と同様に一つのconfigファイルとして扱えることが大きな違いです。


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

ヤマハルーターでは以下の機種およびファームウェアで、EMFSをサポートしています。

機種ファームウェア
vRX VMware ESXi版すべてのリビジョン
vRX Amazon EC2版
RTX3510
RTX1300
RTX1220
RTX830Rev.15.02.03以降
NVR510Rev.15.01.13以降
NVR700WRev.15.00.14以降
RTX1210Rev.14.01.26以降
RTX5000Rev.14.00.26以降
RTX3500

詳細

EMFSは、読み出し専用のファイルをルーターのコマンドとして保存できるファイルシステムです。ファイルは、embedded fileコマンドで作成、保存され、その他の設定と同様にshow configコマンドで表示されます。EMFS上のファイルシステムはTFTPやSCPを使ってconfigファイル内のコマンドの一部として送受信が可能です。読み出し専用のファイルとして、Luaスクリプトファイルを保存したり、callコマンドで呼び出すマクロを保存するのに利用できます。

EMFSは読み出し専用のファイルシステムであり、LuaスクリプトのAPI等からはファイルを読み出すことしかできず、ファイルの作成、変更、削除は行えません。また、あまり大きなファイルは保存できないことや、ディレクトリは作成できないことに注意が必要です。

EMFS上のファイルを読み出すためには、パスの先頭に"emfs:"を指定します。また、EMFSにはディレクトリの概念がないため、すべてのファイルはEMFSのルートディレクトリ上に存在することになります。

show file listコマンドでEMFSを表示する場合、このコマンドを実行した時点の日時が表示されます。

# embedded file test.txt <<EOF
This is a test file.
EOF
# show file list emfs:/
2018/01/01 16:26:49              21 test.txt
#
# embedded file cat <<EOF
f=io.open(arg[1])
for l in f:lines() do
  print(l)
end
f:close()
EOF
# show file list emfs:/
2018/01/01 16:32:32              65 cat
2018/01/01 16:32:32              21 test.txt
#
# show config
...
login password *
ip lan1 address 192.168.100.1/24
...
embedded file test.txt <<EOF
This is a test file.
EOF
embedded file cat <<EOF
f=io.open(arg[1])
for l in f:lines() do
  print(l)
end
f:close()
EOF
#
# lua emfs:/cat emfs:/test.txt
This is a test file.
#
# set PWD=emfs:/
# lua cat test.txt
This is a test file.
#
# alias cat='lua emfs:/cat'
# @cat test.txt
This is a test file.
#

EMFSのファイル名には、半角文字での英大文字、英小文字、数字、ハイフン(-)、アンダースコア(_)、ピリオド(.)が使用できます。その他の文字は使えません。英大文字と英小文字は区別されます。また、ファイル名の長さに制限はありませんが、入力するコマンドの文字数がコマンドラインの最大長(4095文字)を超えることはできません。

EMFSのファイルに保存できるのは、コマンドラインから入力できる文字のみです。したがって、バイナリーファイルを保存する場合は、BASE64形式で保存する必要があります。

# embedded file -b cert1.p12 <<EOF
MIIKYQIBAzCCCicGCSqGSIb3DQEHAaCCChgEggoUMIIKEDCCBw8GCSqGSIb3DQEHBqCCBwAwggb8
AgEAMIIG9QYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIBVoyOiRil50CAggAgIIGyEBby8bZ
...
ZdM61lXlMSUwIwYJKoZIhvcNAQkVMRYEFPOEFIlwBvnvsoTfUDuWphr8gdfcMDEwITAJBgUrDgMC
GgUABBQOD2ZRWqCcWC5sEwwhwFw46zkN+AQIcwN9T98mMc4CAggA
EOF
#

コマンド一覧

EMFSファイルの作成、削除

[書式]
embedded file [-b] FILENAME <<EOF_STRING
no embedded file [-b] FILENAME [<<EOF_STRING]
[設定値]
-b ... BASE64形式を指定
FILENAME ... ファイル名
EOF_STRING ... EOF文字列
[説明]
EMFS上のファイルを作成、削除する。

embedded fileコマンドを投入すると、コンソールはファイルの内容を入力するモードとなる。EOF_STRINGで指定したEOF文字列が入力されるまでが、ファイルの内容となる。no embedded fileコマンドでファイルを削除できる。

-bオプションを指定した場合は、入力されたファイルの内容はBASE64形式であるものとして処理される。BASE64形式として不正な内容の場合はエラーとなる。バイナリーファイルを保存する場合は、BASE64形式でなければならない。-bオプションが省略された場合は、入力された内容がそのままテキストファイルとして保存される。

EOF文字列として利用できる文字種は、半角英数字(A-Z、a-z、0-9)のみである。英大文字、小文字は区別される。

[ノート]
複数行からなるコマンドに対応していないため、schedule atコマンドでは実行できない。

Luaスクリプトrt.command()で複数行からなるコマンドを実行する場合には、各行を改行文字('\n')で連結した文字列をコマンドとして渡す。改行文字は'\n'でなくてはならず、'\r''\r\n'ではエラーとなる。

rtn, err = rt.command("embedded file x <<EOF\necho This is x\nEOF")
	

参考情報